আপনি কখন বিভিন্ন গিট একীকরণ কৌশল ব্যবহার করবেন?


429

গিট-মার্জ-এর ম্যান পৃষ্ঠা থেকে, আপনি ব্যবহার করতে পারেন এমন একাধিক মার্জ কৌশল রয়েছে।

  • সংশোধন করুন - এটি কেবলমাত্র তিন-মুখী মার্জ অ্যালগরিদম ব্যবহার করে দুটি মাথা (যেমন বর্তমান শাখা এবং আপনি যে অন্য শাখা থেকে আপনি টানছেন) সমাধান করতে পারেন। এটি ক্রিস-ক্রস সংশ্লেষের অস্পষ্টতাগুলি সাবধানে সনাক্ত করার চেষ্টা করে এবং সাধারণত নিরাপদ এবং দ্রুত বলে বিবেচিত হয়।

  • পুনরাবৃত্ত - এটি কেবলমাত্র 3-উপায় মার্জ অ্যালগরিদম ব্যবহার করে দুটি মাথা সমাধান করতে পারে। যখন একাধিক সাধারণ পূর্বপুরুষ থাকে যেগুলি 3-উপায় একত্রিত করার জন্য ব্যবহার করা যায়, এটি সাধারণ পূর্বপুরুষদের একীভূত গাছ তৈরি করে এবং এটি 3-উপায় সংযুক্তির জন্য রেফারেন্স ট্রি হিসাবে ব্যবহার করে। লিনাক্স ২.6 কার্নেল ডেভেলপমেন্ট ইতিহাস থেকে নেওয়া প্রকৃত মার্জ কমিটগুলিতে পরীক্ষাগুলির দ্বারা ভুল সংযোজন না করে এর ফলে কম সংশ্লেষের বিরোধ ঘটে বলে জানা গেছে। অতিরিক্তভাবে এটি পুনরায় নামগুলিতে জড়িত মার্জগুলি সনাক্ত এবং পরিচালনা করতে পারে। একটি শাখা টানা বা মার্জ করার সময় এটি ডিফল্ট মার্জ কৌশল।

  • অক্টোপাস - এটি দ্বি-মাথাের চেয়ে বেশি কেস সমাধান করে, তবে ম্যানুয়াল রেজোলিউশনের প্রয়োজন এমন জটিল মার্জ করতে অস্বীকার করে। এটি প্রাথমিকভাবে একসাথে বিষয় শাখা প্রধানকে বান্ডিল করার জন্য ব্যবহৃত হতে বোঝানো হয়েছে। একাধিক শাখা টানা বা মার্জ করার সময় এটি ডিফল্ট মার্জ কৌশল।

  • আমাদের - এটি যে কোনও সংখ্যক মাথা সমাধান করে, তবে সংযুক্তির ফলাফল সর্বদা বর্তমান শাখার প্রধান is এটি পাশের শাখাগুলির পুরানো বিকাশের ইতিহাসকে ছাড়িয়ে যাওয়ার জন্য ব্যবহৃত হয়।

  • সাবট্রি - এটি একটি সংশোধিত পুনরাবৃত্ত কৌশল। গাছ A এবং B মার্জ করার সময়, B যদি A এর একটি সাবট্রির সাথে মিলে যায় তবে বি প্রথম স্তরের গাছগুলি পড়ার পরিবর্তে A এর গাছের কাঠামোর সাথে মেলে। এই সমন্বয়টি সাধারণ পূর্বপুরুষ গাছের সাথেও করা হয়।

আমি কখন ডিফল্টের চেয়ে আলাদা কিছু নির্দিষ্ট করব? কোন পরিস্থিতিতে প্রতিটি জন্য সেরা?

উত্তর:


305

আমি সংকল্পের সাথে পরিচিত নই, তবে আমি অন্যগুলি ব্যবহার করেছি:

পুনরাবৃত্তি

দ্রুত-ফরোয়ার্ড একীকরণের জন্য পুনরাবৃত্তিমূলকটি ডিফল্ট। আমরা সবাই তার সাথে পরিচিত।

অক্টোপাস

আমি যখন অক্টোবাস ব্যবহার করেছি যখন আমার কাছে বেশ কয়েকটি গাছ ছিল যা একত্রীকরণের প্রয়োজন ছিল। আপনি এটি বৃহত্তর প্রকল্পগুলিতে দেখেন যেখানে অনেকগুলি শাখার স্বতন্ত্র বিকাশ ঘটে এবং এটি সমস্ত একত্রে একত্রিত হয়ে প্রস্তুত।

একটি অক্টোপাস শাখা যতক্ষণ না এটি পরিষ্কারভাবে এটি করতে পারে ততক্ষণ একটি প্রতিশ্রুতিতে একাধিক মাথা একত্রিত করে।

উদাহরণস্বরূপ, কল্পনা করুন আপনার একটি প্রকল্প রয়েছে যার একটি মাস্টার রয়েছে এবং তারপরে মার্জ করার জন্য তিনটি শাখা রয়েছে (তাদের একটি, বি এবং সি কল করুন)।

ধারাবাহিক পুনরাবৃত্ত মার্জগুলি এর মতো দেখায় (মনে রাখবেন যে প্রথম সংশ্লেষটি দ্রুত-অগ্রসর হয়েছিল, কারণ আমি পুনরাবৃত্তি বাধ্য করি নি):

পুনরাবৃত্ত মার্জ সিরিজ

তবে, একটি একক অক্টোপাস মার্জটি এর মতো দেখাবে:

commit ae632e99ba0ccd0e9e06d09e8647659220d043b9
Merge: f51262e... c9ce629... aa0f25d...

অক্টোপাস মার্জ

আমাদিগের

আমাদের == আমি অন্য একটি মাথা টানতে চাই, তবে মাথাটি যে সমস্ত পরিবর্তনগুলি প্রবর্তন করে সেগুলিকে ফেলে দিন।

এটি কোনও শাখার প্রভাব ছাড়াই কোনও শাখার ইতিহাস রাখে।

(পড়ুন: এমনকি এই শাখাগুলির মধ্যে পরিবর্তনের দিকেও নজর দেওয়া হয় না The শাখাগুলি কেবল মার্জ হয়ে গেছে এবং ফাইলগুলিতে কিছুই করা হয় না you আপনি যদি অন্য শাখায় মার্জ করতে চান এবং প্রতিবারই প্রশ্ন থাকে "আমাদের ফাইল সংস্করণ বা তাদের সংস্করণ "আপনি ব্যবহার করতে পারেন git merge -X ours)

subtree

সাবট্রি কার্যকর যখন আপনি অন্য প্রকল্পে আপনার বর্তমান প্রকল্পের একটি উপ ডিরেক্টরিতে রূপান্তর করতে চান। আপনার কাছে কোনও লাইব্রেরি থাকলে আপনি উপ-মডেল হিসাবে অন্তর্ভুক্ত করতে চান না যখন দরকারী।


1
সুতরাং ওকোটোপাসের একমাত্র আসল সুবিধা হ'ল গাছে সংযুক্তির সংখ্যা হ্রাস করা?
অটো

60
আপনাকে অক্টোপাস মার্জ কৌশলটি নির্দিষ্ট করার দরকার নেই : আপনি দুটির বেশি শাখা ( git merge A B ...) সংশ্লেষ করলে এটি স্বয়ংক্রিয়ভাবে ব্যবহৃত হয় ।
জাকুব নরবস্কি

অফ-টপিক যাওয়ার জন্য দুঃখিত, তবে আপনি সেই স্ক্রিনশটগুলি তৈরি করেছেন এমন সরঞ্জামটি কী? এটি দেখতে শাখার ইতিহাসের দুর্দান্ত / চমত্কার ভিজ্যুয়ালাইজেশনের মতো দেখাচ্ছে ...
বারানড হগ

4
লিনাক্স পরিবেশের জন্য gitg
আকাশ অগ্রবাল

2
এর সাথে এই ইঙ্গিতটি -X oursদুর্দান্ত me
মাইকেল 11

49

প্রকৃতপক্ষে কেবলমাত্র দুটি কৌশলই আপনি বেছে নিতে চান আমাদের যদি আপনি শাখা দ্বারা আনা পরিবর্তনগুলি বর্জন করতে চান তবে শাখাটিকে ইতিহাসে রাখুন, এবং সাবট্রি যদি আপনি সুপার প্রকল্পের উপ-ডিরেক্টরিতে (যেমন 'গিট-গুই' তে) একীকরণ করতে চান তবে সাবট্রি গিট 'সংগ্রহস্থল)।

দুটি বেশি শাখা মার্জ করার সময় অক্টোপাস মার্জ স্বয়ংক্রিয়ভাবে ব্যবহৃত হয়। সমাধান এখানে প্রধানত ঐতিহাসিক কারণে, এবং যখন আপনি ধাক্কা করা হয় রিকার্সিভ একত্রীকরণ কৌশল কোণ ক্ষেত্রে।


মারাত্মক গিট-রাইটিং-ট্রি ত্রুটিযুক্ত দ্বি-মাথা সংযুক্তির জন্য আমাকে ডিফল্ট 'পুনরাবৃত্ত' এর পরিবর্তে 'সমাধান' বেছে নিতে হয়েছিল। 'সমাধান' কৌশলটি পরিষ্কারভাবে মার্জ হয়েছে। ব্রাঞ্চে একত্রীকরণের ফলে প্রচুর পরিমাণে ফাইল সরিয়ে নিয়ে এটি করা যেতে পারে।
thaddeusmt

@ থাডডিউসমেট: আকর্ষণীয়। আপনি কি দয়া করে, যদি সম্ভব হয় তবে মেলিং তালিকায় গিটারের "পুনরাবৃত্ত" মার্জ কৌশলটির এই ব্যর্থতা সম্পর্কে বাগ রিপোর্ট পোস্ট করুন? আগাম ধন্যবাদ.
জাকুব নরবস্কি

@ জাকুবনারাইবস্কি আমি নিশ্চিত নই যে আমি কীভাবে অর্থবহ ত্রুটি প্রতিবেদন ফাইল করার জন্য পর্যাপ্ত তথ্য একত্রিত করেছি, আমি গিতের সাথে একটি এন 100 বি, দুঃখিত। আমি আমার উত্তর এখানে উল্লেখ হিসাবে ( stackoverflow.com/a/10636464/164439 ) আমার অনুমান যে আমাকে উভয় শাখায় পরিবর্তন অনুরূপ সঙ্গে কি ছিল, এবং "সঙ্কল্প" সদৃশ পরিবর্তন কুঁদন একটি ভাল পেশা আছে।
থাদডিউস্মেট

@ JakubNarębski এখন দ্বারা আপনার কাছে নির্বাচন করতে পারবেন তাহাদেরই , যা ম্যানুয়াল "এর বিপরীত তা তারা গ্রহণ করে আমাদেরআর তাদের জন্য রয়েছে তন্ন তন্ন আপনার জন্য স্বয়ংক্রিয়ভাবে নির্বাচিত আপনি সামান্য আপনার anwser আপডেট করতে পারেন পারে, যোগ। তাহাদেরই বিকল্প
SebNag

3
@ সেবতু: এখানে কোনও theirsমার্জ কৌশল নেই (এটি --strategy=theirs), তবে সেখানে theirsডিফল্ট recursiveমার্জ কৌশলটি (যা --strategy=recursive --strategy-option=theirs, বা ন্যায়সঙ্গত -Xtheirs) এর বিকল্প রয়েছে।
জাকুব নরবস্কি

23

"সমাধান" বনাম "পুনরাবৃত্ত" মেশিন কৌশল

রিকার্সিভ হ'ল বর্তমান ডিফল্ট দ্বি-মাথা কৌশল, তবে কিছু অনুসন্ধানের পরে অবশেষে "সমাধান" সংযুক্তির কৌশল সম্পর্কে কিছু তথ্য পেলাম।

গিল ( অ্যামাজন ) সহ ও'রিলি বই সংস্করণ নিয়ন্ত্রণ থেকে নেওয়া (প্যারাফ্রেসড):

মূলত, "সমাধান" হ'ল গিট সংশ্লেষের জন্য ডিফল্ট কৌশল ছিল।

সঙ্কট-ক্রস সংশ্লেষ পরিস্থিতিতে, যেখানে একাধিক সম্ভাব্য সংশ্লেষের ভিত্তি রয়েছে, সমাধানের কৌশলটি এইভাবে কাজ করে: সম্ভাব্য সংশ্লেষের ভিত্তিগুলির মধ্যে একটি বেছে নিন এবং সর্বোত্তম হওয়ার জন্য আশাবাদী। এটি যতটা শোনাচ্ছে ততটা খারাপ নয়। এটি প্রায়শই দেখা যায় যে ব্যবহারকারীরা কোডের বিভিন্ন অংশে কাজ করছেন। সেক্ষেত্রে, গিট সনাক্ত করে যে এটি ইতিমধ্যে কিছু স্থানে রয়েছে এমন কিছু পরিবর্তন পুনর্বার করছে এবং দ্বন্দ্ব এড়িয়ে সদৃশ পরিবর্তনগুলি এড়িয়ে চলে। বা, যদি এগুলি সামান্য পরিবর্তন হয় যা দ্বন্দ্বের কারণ হয়ে থাকে তবে কমপক্ষে দ্বন্দ্বটি বিকাশকারীকে পরিচালনা করা সহজ হওয়া উচিত ..

আমি ডিফল্ট পুনরাবৃত্ত কৌশলটির সাথে ব্যর্থ হওয়া "সমাধান" ব্যবহার করে গাছগুলি সফলভাবে মার্জ করেছি। আমি fatal: git write-tree failed to write a treeত্রুটি পাচ্ছিলাম এবং এই ব্লগ পোস্টের ( মিরর ) ধন্যবাদ দিয়ে আমি "-র সমাধান" চেষ্টা করেছি, যা কাজ করেছে। আমি এখনও ঠিক নিশ্চিত নই কেন ... তবে আমি মনে করি এটি হ'ল কারণ আমার দুটি গাছেই সদৃশ পরিবর্তন হয়েছিল এবং সেগুলি সঠিকভাবে "এড়িয়ে যাওয়া" সমাধান করেছি।


আমি 3-উপায় মার্জ (p4 विसর) ব্যবহার করছি এবং পুনরাবৃত্ত - মার্জ ব্যর্থ হওয়ার পরে আমার বি। বি এস ই ফাইলে বিবাদগুলি লিখিত হয়েছিল। সমাধান-কৌশল থেকে ফিরে পড়া এই ক্ষেত্রে সহায়তা করে।
mrzl


-2

উপরের উত্তরগুলিতে সমস্ত কৌশল বিশদ প্রদর্শিত হচ্ছে না। উদাহরণস্বরূপ, কিছু উত্তর আমদানি সম্পর্কে বিস্তারিত অনুপস্থিত resolveবিকল্প এবং recursiveঅনেক সাব বিকল্প রয়েছে যেমন ours, theirs, patience, renormalize, ইত্যাদি

অতএব, আমি অফিশিয়াল gitডকুমেন্টেশন পরিদর্শন করার পরামর্শ দেব যা সম্ভাব্য সমস্ত বৈশিষ্ট্য বৈশিষ্ট্যগুলি ব্যাখ্যা করে:

https://git-scm.com/docs/merge-strategies

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