আমাকে আপনার বিষয়গুলির প্রত্যক্ষ এবং স্পষ্ট উত্তর দিন:
আমাদের সমস্যাটি দীর্ঘমেয়াদী সাইডব্যাঞ্চগুলির সাথে রয়েছে - যে ধরণের যেখানে আপনি কয়েকজন লোককে সাইডব্র্যাঞ্চে কাজ করে যা মাস্টারের কাছ থেকে বিভক্ত হয়, আমরা কয়েক মাস ধরে বিকাশ করি এবং যখন আমরা একটি মাইলফলক পৌঁছে যাই তখন আমরা দুজনকে সমন্বয় করি।
আপনি সাধারণত কয়েক মাস ধরে আপনার শাখাগুলিকে সিঙ্ক না করতে চান না।
আপনার বৈশিষ্ট্য শাখাটি আপনার কর্মপ্রবাহের উপর নির্ভর করে কিছু ছড়িয়েছে; আসুন কেবল এটি master
সরলতার জন্য কল করুন । এখন, যখনই আপনি মাস্টার প্রতিশ্রুতিবদ্ধ, আপনি এবং করতে পারেন git checkout long_running_feature ; git rebase master
। এর অর্থ হ'ল আপনার শাখাগুলি ডিজাইনের মাধ্যমে সর্বদা সিঙ্ক থাকে।
git rebase
এখানে সঠিক জিনিস। এটি হ্যাক বা উদ্ভট বা বিপজ্জনক কিছু নয়, তবে সম্পূর্ণ প্রাকৃতিক। আপনি একটি বিট তথ্য হারিয়ে ফেলেন যা বৈশিষ্ট্য শাখার "জন্মদিন", তবে এটি। যদি কোনও সন্ধানী এটি গুরুত্বপূর্ণ মনে করে তবে এটি অন্য কোথাও সংরক্ষণ করে সরবরাহ করা যেতে পারে (আপনার টিকিট ব্যবস্থায়, বা যদি প্রয়োজনটি দুর্দান্ত হয় তবে একটি git tag
...)।
এখন, আইএমএইচও, এটি পরিচালনা করার প্রাকৃতিক উপায় হ'ল, একক প্রতিশ্রুতিতে সাইডব্র্যাঞ্চকে স্কোয়াশ করুন।
না, আপনি একেবারে এটি চান না, আপনি একটি মার্জ কমিট চান। মার্জ কমিটও একটি "একক কমিট" is এটি, কোনওভাবে, সমস্ত স্বতন্ত্র শাখাকে "মাস্টার" করার মাধ্যমে সন্নিবেশ করায় না। master
একত্রীকরণের সময় প্রধান এবং শাখা প্রধান - এটি দুটি পিতা-মাতার সাথে একক প্রতিশ্রুতিবদ্ধ ।
--no-ff
অবশ্যই অবশ্যই বিকল্পটি নির্দিষ্ট করে নিন ; --no-ff
আপনার দৃশ্যের মধ্যে ছাড়াই মার্জ করা কঠোরভাবে নিষিদ্ধ করা উচিত। দুর্ভাগ্যক্রমে, --no-ff
ডিফল্ট নয়; তবে আমি বিশ্বাস করি যে একটি বিকল্প আপনি সেট করতে পারেন যা এটি এটিকে করে makes দেখুন git help merge
কি জন্য --no-ff
আছে (সংক্ষেপে: এটা আচরণ আমি আগের অনুচ্ছেদে বর্ণিত সক্রিয়), এটা অত্যন্ত গুরুত্বপূর্ণ।
আমরা মাস্টার্সের ইতিহাসে সমান্তরাল বিকাশের মাসগুলিকে পূর্ববর্তীভাবে ছাড়ছি না।
একদম ঠিক নয় - আপনি কখনও কোনও শাখার কিছু "ইতিহাসের" মধ্যে ফেলে দিচ্ছেন না, বিশেষত মার্জ কমিট দিয়ে নয়।
আর যদি কারও পক্ষে সাইডব্র্যাঞ্চের ইতিহাসের জন্য আরও ভাল সমাধানের প্রয়োজন হয় তবে অবশ্যই এটি এখনও রয়েছে - এটি কেবল মাস্টার নয়, এটি সাইডব্র্যাঞ্চে।
মার্জ কমিটের সাথে, এটি এখনও আছে। মাস্টার নয়, সাইডব্র্যাঞ্চে, একীভূত হওয়ার প্রতিপত্তি হিসাবে অভিভাবকদের একজন হিসাবে স্পষ্টভাবে দৃশ্যমান এবং চিরকালের জন্য রাখা হয়েছে, যেমনটি হওয়া উচিত।
আমি কি করেছি দেখুন? আপনার স্কোয়াশ প্রতিশ্রুতিবদ্ধতার জন্য আপনি যে সমস্ত জিনিস বর্ণনা করেছেন তা মার্জ কমিটের সাথেই রয়েছে--no-ff
।
সমস্যাটি এখানে: আমি কমান্ড লাইনের সাথে একচেটিয়াভাবে কাজ করি, তবে আমার দলটির বাকী অংশ জিইআইএস ব্যবহার করে।
(পার্শ্ব মন্তব্য): আমি প্রায় একচেটিয়াভাবে কমান্ড লাইনের সাথেও কাজ করি (ভাল, এটি মিথ্যা, আমি সাধারণত ইমাস ম্যাজিট ব্যবহার করি তবে এটি অন্য গল্প - যদি আমি আমার স্বতন্ত্র ইম্যাক্স সেটআপের সাথে কোনও সুবিধাজনক জায়গায় না থাকি তবে আমি কমান্ডটি পছন্দ করি লাইন হিসাবে ভাল)। কিন্তু দয়া করে নিজের একটা উপকার করবেন এবং অন্তত চেষ্টা git gui
একবার। এটা যাতে আরো অনেক কিছু যোগ করার জন্য ইত্যাদি লাইন, কৃপণ ব্যক্তি বাছাই করার জন্য দক্ষ / সর্বনাশের কারণ যোগ করা হয়েছে।)
এবং আমি আবিষ্কার করেছি জিইউআইএসের কাছে অন্যান্য শাখা থেকে ইতিহাস প্রদর্শন করার কোনও যুক্তিসঙ্গত বিকল্প নেই।
কারণ আপনি যা করতে চেষ্টা করছেন তা সম্পূর্ণরূপে চেতনাবিরোধী git
। git
মূলটি একটি "নির্দেশিত অ্যাসাইক্লিক গ্রাফ" এর উপর ভিত্তি করে তৈরি করে যার অর্থ প্রচুর তথ্য কমিটের পিতা-সন্তানের সম্পর্কের মধ্যে রয়েছে। এবং, মার্জগুলির জন্য, এর অর্থ সত্যিকারের একত্রীকরণ দুটি বাবা এবং একটি সন্তানের সাথে প্রতিশ্রুতিবদ্ধ। আপনি no-ff
মার্জ কমিটগুলি ব্যবহার করার সাথে সাথে আপনার সহকর্মীদের জিইউআই ঠিক ঠিক হয়ে যাবে।
সুতরাং আপনি যদি এই স্কোয়াশ প্রতিশ্রুতিতে পৌঁছে যান, "এই উন্নয়নটি শাখা এক্সওয়াইজেড থেকে স্কোয়াশড হয়েছে", এক্সওয়াইজেডে কী আছে তা দেখার জন্য এটি একটি বিশাল বেদনা।
হ্যাঁ, তবে এটি জিইউআইয়ের সমস্যা নয়, তবে স্কোয়াশ কমিটের। স্কোয়াশ ব্যবহারের অর্থ হল আপনি বৈশিষ্ট্য শাখার মাথাটি ঝাঁকুনি ছেড়ে চলেছেন এবং সম্পূর্ণ নতুন প্রতিশ্রুতি তৈরি করছেন master
। এটি কাঠামোটি দুটি স্তরের উপর ভেঙে দেয় এবং একটি বৃহত্তর গন্ডগোল সৃষ্টি করে।
সুতরাং তারা এই বড়, দীর্ঘ বিকাশের সাইডব্যাঞ্চগুলি সর্বদা মার্জ কমিটের সাথে একত্রীকরণ করতে চায়।
এবং তারা একেবারে ঠিক আছে। কিন্তু তারা "মার্জ নেই মধ্যে ", তারা শুধু মার্জ করা হয়েছে। মার্জ একটি সত্যিকারের ভারসাম্যযুক্ত জিনিস, এর কোনও পছন্দের দিক নেই যা "অন্য" টিতে মিশে যায় ( শাখা ইত্যাদির মতো ছোট ছোট দৃশ্যগত পার্থক্য বাদে git checkout A ; git merge B
ঠিক একই রকম) git checkout B ; git merge A
minorgit log
তারা এমন কোনও ইতিহাস চান না যা মাস্টার শাখা থেকে তাত্ক্ষণিকভাবে অ্যাক্সেসযোগ্য নয়।
যা সম্পূর্ণ সঠিক। এমন কোনও সময়ে যখন কোনও নিমজ্জনিত বৈশিষ্ট্য নেই, আপনার master
সমৃদ্ধ ইতিহাসের একক শাখা থাকবে যেখানে সেখানে উপস্থিত সমস্ত বৈশিষ্ট্য প্রতিশ্রুতি রেখাগুলি আবদ্ধ ছিল, সময় git init
থেকে শুরু করে প্রতিশ্রুতিতে ফিরে যেতে হবে (দ্রষ্টব্য যে আমি শব্দটি বিশেষত ব্যবহার করতে এড়িয়ে গেছি " শাখাগুলি "সেই অনুচ্ছেদের পরবর্তী অংশে" কারণ সেই সময়ের ইতিহাস আর "শাখা" নয়, যদিও কমিট গ্রাফটি বেশ শাখাগুলি হবে)।
আমি এই ধারণা ঘৃণা করি;
আপনি যে যন্ত্রটি ব্যবহার করছেন তার বিপরীতে আপনি যেহেতু কাজ করছেন সেহেতু আপনি কিছুটা ব্যথার জন্য রয়েছেন। git
পদ্ধতির বিশেষত শাখাবিন্যাস / মার্জ এলাকায়, খুব মার্জিত এবং শক্তিশালী; আপনি যদি এটি সঠিকভাবে করেন (যেমন উপরে বর্ণিত হয়েছে, বিশেষত --no-ff
এটির সাথে ) এটি অন্য পদ্ধতির (যেমন, শাখাগুলির জন্য সমান্তরাল ডিরেক্টরি কাঠামো থাকার বিপর্যস্ত জগাখিচুড়ি) দ্বারা উত্সাহিত হয় ap
এর অর্থ সমান্তরাল বিকাশের ইতিহাসের একটি অবিরাম, অপরিবর্তনীয় জট।
অন্তহীন, সমান্তরাল - হ্যাঁ।
অবিচল, জট - না।
তবে আমাদের কী বিকল্প আছে তা আমি দেখছি না।
প্রতিদিনের উদ্ভাবক git
, আপনার সহকর্মী এবং বিশ্বের অন্যান্য অংশের মতো প্রতিদিন কাজ করবেন না কেন ?
একত্রিত-কমিটের সাথে নিয়মিত সাইডব্র্যাঞ্চগুলি মাস্টারে মার্জ করার পাশাপাশি এখানে কি আমাদের কোনও বিকল্প আছে? বা, এমন কোনও কারণ আছে যা নিয়মিতভাবে মার্জ-কমিটগুলি ব্যবহার করা আমার পক্ষে আশঙ্কাজনক খারাপ নয়?
অন্য কোনও বিকল্প নেই; খারাপ হিসাবে না।