এটা শক্তিশালী শাখা git ভুল?


11

যখন আমি কোনও বৈশিষ্ট্য শাখায় কাজ করছি, আমার কাজটি পর্যালোচনা করা এবং মূল শাখায় সংহত হওয়ার আগে আমি ইন্টারেক্টিভ রিবেস ব্যবহার করে শাখায় করা কমিটগুলি পরিষ্কার করতে চাই ।

বৈশিষ্ট্যটির বিকাশের সময়, আমি আমার মধ্যবর্তী কাজটি ব্যাকআপ পরিমাপ হিসাবে দূরবর্তী সংগ্রহস্থলের দিকে ঠেলাতে চাই। অর্থাৎ যখন আমার হার্ড-ড্রাইভটি ক্র্যাশ হয়ে যায়, আমি চাই না যে আমার সম্পূর্ণ বৈশিষ্ট্যটি শাখাটি হারাতে হবে।

যাইহোক, এটি সত্য হয়ে যায় যে আমাকে প্রায়শই git push --forceরিবেসের পরে দূরবর্তী সংগ্রহস্থলটিতে একটি কাজ করতে হয়, এমন একটি ক্রিয়া যা সাধারণত ত্রুটিযুক্ত হয়। বা লিঙ্কযুক্ত গিথুব পৃষ্ঠা যেমন বলে:

যেহেতু আপনার প্রতিশ্রুতিবদ্ধ ইতিহাস পরিবর্তন করা অন্যদের জন্য সংগ্রহশালা ব্যবহার করে জিনিসগুলি জটিল করে তুলতে পারে, আপনি ইতিমধ্যে কোনও সংগ্রহশালার দিকে ধাক্কা দিলে কমিটগুলি পুনর্বাসিত করা খারাপ অভ্যাস হিসাবে বিবেচিত হয়।

এমন কোনও (সাধারণভাবে গৃহীত) নীতি কি এই দ্বন্দ্ব সমাধান করে?

এটি কেন নকল নয় "গিরিটি" রিলিজিংয়ের নিয়ম "গিটটি এত প্রয়োজনীয়?

আমার প্রশ্নটি এখানে দূরবর্তী সংগ্রহস্থলটিতে আপনার কাজের ব্যাকআপ নেওয়া এবং আপনার কাজটি প্রত্যাখ্যানের মধ্যে দ্বন্দ্ব সমাধানের জন্য একটি নীতি চেয়েছে , অন্য প্রশ্নটি একটি বিরোধ আছে তা অস্বীকার করার চেষ্টা করে এবং কেন কিছু লোক মনে করে যে এই বিরোধটি আদৌ বিদ্যমান, এবং এইভাবে জিজ্ঞাসা করে কেন "বাধ্যতামূলক" জোরপূর্বক ছাড়গুলি না চাপানো?



1
@gbjbaanb আপনি যদি ডব্লিউআইপি কমিট করেন তবে এক দিনের কাজের জন্য অনেক কমিট করা এড়াতে একটি রিবেস খুব কার্যকর। আমি প্রায়শই ছোট ছোট পরিবর্তনগুলির জন্য কমিট করি তাই প্রয়োজনে আমার "একটি রাজ্য পূর্বাবস্থায় ফিরে আসুন" বিকল্পটি পাওয়া যায় - এর বেশিরভাগই রেপোর মূল ইতিহাসের অপ্রাসঙ্গিক / গোলমাল (যার কারণে রিবেস এত দরকারী)।
এন্ডারল্যান্ড

1
@gbjbaanb এটি আমার মতে মতামতের একটি বিষয়। অনেক দল তাদের ইতিহাস পরিষ্কার রাখতে একটি রিবিসিং কৌশল ব্যবহার করে।
চিয়েল দশ ব্রিনকে

1
@ জেনারল্যান্ডের সবাই সুন্দর ইতিহাস চায়, এটি এখনও ভুল (এবং বিপজ্জনক) লিঙ্কটি দেখানো হিসাবে করতে হবে। টরভাল্ডসকে কখনই এটি প্রবেশ করা উচিত ছিল না, তার পরিবর্তে প্রতিশ্রুতি প্রদর্শনীতে "সংকুচিত" হওয়ার অনুমতি দেওয়া উচিত ছিল।
gbjbaanb

1
@gbjbaanb কিন্তু ... তিনি করেন নি, এবং তাই আমাদের যা আছে তা নিয়ে কাজ করতে হবে। আমার কাছে এটি প্রতিটি বৈশিষ্ট্য শাখা থেকে 30+ পৃথক এবং বর্ধিত কমিটের পরিবর্তে মাস্টার শাখায় একক প্রতিশ্রুতিবদ্ধ হওয়া অনেক বেশি কার্যকর। তবে প্রত্যেকেরই আলাদা ওয়ার্কফ্লো থাকবে, আমি অনুমান করি ...
এন্ডারল্যান্ড

উত্তর:


5

নিজেকে প্রশ্ন করার মূল প্রশ্ন:

  • মাস্টারটিতে ফিরে যাওয়ার পরে আপনি কি আপনার দূরবর্তী শাখাটি রাখেন?

আপনি যদি মাস্টারে মার্জ হওয়ার পরে আপনার দূরবর্তী বৈশিষ্ট্যটি শাখাটি মুছে ফেলেন তবে ইতিমধ্যে আপনি ইতিহাস হারাচ্ছেন। আপনার মার্জ / পিআর করার আগে আপনাকে এই স্কোয়াশটি স্কোয়াশ / রিবেস করে ধরে নিলে আপনি এই ইতিহাসটি হারাবেন। আপনার সমস্ত ফোর্স পুশ এক্ষেত্রে করছে আপনাকে গিথবকে ব্যাকআপ হিসাবে ব্যবহার করার অনুমতি দিচ্ছে।

অবস্থা যেখানে আপনি ইতিহাস এবং বল ধাক্কা রাখতে চান তাহলে আপনার রিমোটের শাখা হয় persisting পর হচ্ছে মার্জ এবং শুধুমাত্র একটি সময় অস্থায়ী সময়ের জন্য বিদ্যমান নয়।

আমি মনে করি আপনি জিজ্ঞাসা করছেন আমি নিরবচ্ছিন্ন শাখা রাখব কিনা? না, এএএফআইসি তবুও, চাপ দেওয়ার কারণে এটি তাত্ত্বিকভাবে একই শাখায় আগত অন্যান্য ব্যবহারকারীদের কাছ থেকে কমে যাওয়ার ক্ষতি হতে পারে

মনে হচ্ছে আপনার একসাথে একাধিক লোক সেই শাখায় চাপ দিচ্ছেন। এর অর্থ হল আপনি কি করতে শাখা ইতিহাস যত্নশীল।

আপনার মধ্যবর্তী কাজের পরিবর্তে আপনি যা করতে পারেন তা হ'ল সেই শাখার কাঁটাচামচ তৈরি করা। আপনি এটির দিকে এগিয়ে যেতে পারেন এবং তারপরে মার্জ করার আগে আপনার সমস্ত অঙ্গীকারকে একক প্রতিশ্রুতিতে রিবাজ করতে পারেন, সুতরাং যখন আপনি সেগুলি আপনার বৈশিষ্ট্য-শাখায় মার্জ করেন, তখন আপনার কেবল 1 টি কমিট থাকে (আপনার সম্পূর্ণ শাখার প্রত্যাবর্তিত ইতিহাসের সাথে)।


"মাস্টারে ফিরে যাওয়ার পরে আপনি কি আপনার দূরবর্তী শাখাটি রেখেছেন?" আমি মনে করি আপনি জিজ্ঞাসা করছেন আমি নিরবচ্ছিন্ন শাখা রাখব কিনা? না, এএএফআইসি তবুও, চাপ দেওয়ার কারণে এটি তাত্ত্বিকভাবে একই শাখায় আগত অন্যান্য ব্যবহারকারীদের কাছ থেকে কমে যাওয়ার ক্ষতি হতে পারে।
চিয়েল দশ ব্রিংকে

@ চিলটেনব্রিংক আমি সে সম্পর্কে কিছুটা সম্পাদনা করেছি। এফওয়াইআই
এন্ডারল্যান্ড

আমি মনে করি যে বাধ্যতামূলকভাবে ধাক্কা দেওয়ার সময়ে প্রতিশ্রুতিবদ্ধ ধ্বংসগুলি রোধ করার ব্যবস্থা হিসাবে কাঁটাচামক করা আসলে খুব ভাল পরামর্শ। তবে এএফআইএকি এটি আসলে গিট ধারণা নয় এবং সহজেই এটি করার জন্য আপনার চারপাশে একটি পরিষেবা র‌্যাপার দরকার (যেমন গিথুব)। আমি কি সে সম্পর্কে সঠিক? বা আমি কেবল একটি পৃথক শাখা তৈরি করার জন্য আপনার "কাঁটাচামচ" শব্দটি ব্যবহার করতে ভুল করেছি?
চিয়েল টেন ব্রিনকে

@ চিল্টেনব্রিন্ক ভালভাবে আপনি একই জিনিস বিভিন্ন উপায়ে সম্পাদন করতে পারেন। যদি আপনার বৈশিষ্ট্য শাখা দূরবর্তী সংগ্রহস্থলে থাকে, আপনি রেপো কাঁটাচামচ করতে পারেন এবং সেই শাখার সংস্করণ রাখতে পারেন। এবং তারপরে স্কোয়াশিংয়ের পরে এই শাখাটিকে আপনার প্রত্যন্ত শাখায় মার্জ করুন। অথবা আপনি কেবল একটি আলাদা স্থানীয় শাখা তৈরি করতে পারেন (সম্ভবত featurebranch-local) এবং তারপরে সেই শাখায় সক্রিয় দেব করতে পারেন, যতগুলি কমিট চান আপনি with একবার আপনি একত্রীকরণ করতে চান, সেগুলি স্কোয়াশ করুন এবং তারপরে সেগুলি বৈশিষ্ট্যে মার্জ করুন। মূলত কেবল একটি আসল অস্থায়ী শাখায় ডেভ করা এবং তারপরে আপনার বৈশিষ্ট্যে স্কোয়াশিং / মার্জ করা।
এন্ডারল্যান্ড

ধরে নিই যে রেপো ফোর করা অপ্রয়োজনীয় কারণ কেউ গিথুব ব্যবহার করে না, আমরা একটি "বেসরকারী" develop-featureশাখা নিয়ে কাজ করব। অবশ্যই বেসরকারীতা নিখুঁতভাবে কনভেনশন দ্বারা এবং কোনও কিছুর দ্বারা প্রয়োগ করা হয় না তবে নীতিমালার অংশ হতে পারে বিশেষত যদি এর জন্য নির্দিষ্ট কিছু শাখা নামকরণ সম্মেলন চালু করা হয় introduced (সম্ভবত আমি এখনই খুব উদ্বিগ্ন হয়ে উঠছি, সম্ভবত নয়) এর সাথে মিশ্রণটি --force-with-leaseআঘাত করতে পারে না, যদিও এটি নির্ভর করা উচিত নয়, যেমনটি আমার অন্যান্য পোস্টে উল্লেখ করা হয়েছে।
চিয়েল টেন ব্রিনকে

3

আমি এখানে কিছু সম্ভাবনা তালিকাবদ্ধ করছি যা আমার মনকে অতিক্রম করে।

সর্বদা একটি নতুন শাখায় পুনর্বাসনা করুন

অগোছালো শাখা থাকা অবস্থায় some-featureএটি একটি নতুন শাখায় পুনরায় চালু করুন। যেমন

$ git checkout -b some-feature-rebase
$ git rebase -i master # etc..

তারপরে some-feature-rebaseপর্যালোচনা এবং সংহত হয়েছে।

সমস্যা: এখানে একটি বড় অবক্ষয় হ'ল, কঠোরভাবে বলতে গেলে, প্রতিটি পুনর্বাসনের জন্য আপনার একটি নতুন শাখা দরকার। (উদাহরণস্বরূপ, কোড পর্যালোচনার পরে আপনি যদি পরিবর্তন করেন তবে আপনার একাধিক প্রত্যাখ্যান থাকতে পারে)

ব্যবহার git push --force-with-lease

আমি ঠিক এর git push --force-with-leaseবিকল্পgit push --force সম্পর্কে শিখেছি , যা

আমরা আশা করি না এমন রাজ্য না হলে কোনও শাখা আপডেট করতে অস্বীকার করে; অর্থাত্ কেউই উজানের শাখাটি আপডেট করেনি।

সমস্যা : এটি এমন পরিস্থিতিতে সরাসরি উন্নতি হয়েছে বলে মনে হয় যেখানে আমরা কেবল ব্যবহার করি --force, তবে এখনও কিছু সতর্কতা রয়েছে, উল্লেখযোগ্যভাবে যখন আমি ক এর git fetchপরিবর্তে একটি করি git pull, যা আমাদের স্থানীয় উজানের শাখাগুলি আপডেট করে, --force-with-leaseএমন ভেবে ভ্রান্ত হয় যে রিমোটে কোনও নিরবচ্ছিন্ন পরিবর্তন করা হয়নি ric শাখা।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.