2-উপায় সংযুক্তির চেয়ে 3-উপায় সংযুক্তি কেন সুবিধাজনক?


165

উইকিপিডিয়া বলছে যে একটি 3-উপায় সংহতকরণ 2-উপায় সংযুক্তির তুলনায় ত্রুটি-ঝুঁকির চেয়ে কম থাকে এবং প্রায়শই বার ব্যবহারকারীর হস্তক্ষেপের প্রয়োজন হয় না। কেন এই ক্ষেত্রে?

একটি উদাহরণ যেখানে 3-উপায় সংযুক্তি সফল হয় এবং 2-উপায় সংহত ব্যর্থতা সহায়ক হবে।

উত্তর:


259

বলুন আপনি এবং আপনার বন্ধু দুজনেই একটি ফাইল পরীক্ষা করে দেখেছেন এবং এতে কিছু পরিবর্তন করেছেন। আপনি শুরুতে একটি লাইন সরিয়েছেন, এবং আপনার বন্ধুটি শেষে একটি লাইন যুক্ত করেছে। তারপরে তিনি তার ফাইলটি প্রতিশ্রুতিবদ্ধ করেছিলেন এবং আপনার তার পরিবর্তনগুলি আপনার অনুলিপিতে মিশ্রিত করতে হবে।

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

একটি ত্রি-মুখী মার্জ সহ, এটি দুটি ফাইলের তুলনা করতে পারে, তবে এটি তাদের প্রত্যেকটির মূল অনুলির সাথেও তুলনা করতে পারে (আপনার উভয়ের এটি পরিবর্তন করার আগে)। সুতরাং এটি দেখতে পাবে যে আপনি প্রথম লাইনটি সরিয়েছেন এবং আপনার বন্ধুটি সর্বশেষ লাইনটি যুক্ত করেছে। এবং এটি সেই তথ্যটি মার্জড সংস্করণ তৈরি করতে ব্যবহার করতে পারে।


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

7
@ হারি বলুন মূলটির তিনটি লাইন ছিল (এবিসি)। এটি আমার বন্ধুর অনুলিপি (এবিসিডি) দিয়ে শুরু হয় এবং এটি আমার (বিসি) সাথে তুলনা করে। আসলটি না দেখে মনে হতে পারে যে আমি এ এবং ডি উভয়ই সরিয়েছি এবং চূড়ান্ত ফলাফলটি বিসি হওয়া উচিত।
জেডাব্লু

80

একটি পারফর্ম উপস্থাপনা থেকে এই স্লাইড আকর্ষণীয়:

স্লাইড চিত্র

ত্রি-মুখী মার্জ সরঞ্জামটির প্রয়োজনীয় যুক্তিটি সহজ:

  • বেস, উত্স এবং লক্ষ্যযুক্ত ফাইলের তুলনা করুন
  • উত্স এবং লক্ষ্য ফাইল ফাইলের "অংশগুলি" শনাক্ত করুন:
    • খণ্ডগুলি যে বেসের সাথে মেলে না
    • বেসগুলি মেলে এমন খণ্ডগুলি
  • তারপরে, একত্রে মার্জড ফলাফলগুলি এক সাথে রাখুন:
    • সমস্ত 3 টি ফাইলে একে অপরের সাথে মেলে খণ্ডগুলি
    • খণ্ডগুলি যে উত্স বা টার্গেটের সাথে বেসের সাথে মেলে না তবে উভয়ই নয়
    • খণ্ডগুলি যে বেসের সাথে মেলে না তবে এটি একে অপরের সাথে মেলে (যেমন, উত্স এবং লক্ষ্য উভয় ক্ষেত্রেই তাদের একই পদ্ধতিতে পরিবর্তন করা হয়েছে)
    • বিরোধীরা যে দ্বন্দ্বগুলির জন্য স্থানধারক, বিরোধী হিসাবে এটি ব্যবহারকারীর দ্বারা সমাধান করা হবে।

নোট করুন যে এই চিত্রের "খণ্ডগুলি" খাঁটি প্রতীকী। প্রত্যেকে একটি ফাইলের লাইন, বা শ্রেণিবিন্যাসে নোড অথবা একটি ডিরেক্টরিতে ফাইলও উপস্থাপন করতে পারে। এটি সমস্ত কোনও নির্দিষ্ট সংশ্লেষের সরঞ্জামে সক্ষম তার উপর নির্ভর করে।

আপনি হয়তো জিজ্ঞাসা করছেন যে 3-ত্রি মার্জটি 2-উপায় সংযুক্তির উপর কী সুবিধা দেয়। আসলে, দ্বিমুখী একত্রীকরণের মতো কোনও জিনিস নেই, কেবলমাত্র সরঞ্জাম যা দুটি ফাইলের মধ্যে পৃথক হয় এবং আপনাকে একটি ফাইল বা অন্য ফাইল থেকে খণ্ডগুলি বাছাই করে "মার্জ" করতে দেয়।
কেবলমাত্র একটি 3-ত্রি মার্জ আপনাকে জানার ক্ষমতা দেয় যে কোনও অংশটি উত্স থেকে পরিবর্তন এবং দ্বন্দ্ব পরিবর্তন করে কি না।


"দ্বন্দ্ব পরিবর্তন হয় কিনা।" - দ্বি-মুখী সংহতকরণ (পৃথক) পাশাপাশি কোনও দ্বন্দ্বও দেখায় না (যদিও দ্বন্দ্বের উত্স হিসাবে তথ্যটি হারিয়ে গেছে) /
ভ্লাদ

1
গিটে যদিও 4-দিকের একত্রীকরণ করা সাধারণ যেখানে বেসটি বাস্তবে এক নয়। তবুও একটি 3-উপায় সংহত আরও ভাল এবং দ্বিমুখী।
ওয়ার্নাইট

@ ওয়ার্নাইট, এখানে কি 5-উপায় সংহত আছে?
পেসারিয়ার

@ পেসারিয়ার এটি আমি জানি না, তবে গিটারের চেরি-বাছাই বা পুনর্বাসনের সময় এটি ঘটছে।
ওয়ার্নাইট

খুব বিস্তারিত এবং দরকারী ব্যাখ্যা
কানেগ

20

আমি এটি সম্পর্কে একটি খুব বিস্তারিত পোস্ট লিখেছি । মূলত আপনি মুছে ফেলার ট্র্যাক করতে পারবেন না / দ্বিমুখী করে খুব, খুব অনুপাতহীন।


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

1
আপনার টিউটোরিয়ালটি কেবল পড়ুন এবং এটি আমার পক্ষে সত্যিই সহায়ক। আপনার বর্ণিত বিকাশকারীদের মতো আমিও একইরকম অনুভব করি। আমি সবসময় ত্রি-মুখী সংযোজনকে ভয় পেয়েছি।
racl101

3
আমি আপনাকে আপনার নিবন্ধের কিছু অংশ অনুলিপি এবং আটকানোর পরামর্শ দিচ্ছি। আমি মনে করি এটি আপনাকে upvotes অর্জন করতে সহায়তা করবে এবং স্ট্যাকওভারফ্লো দর্শনের সাথে আরও সংযুক্ত হবে।
স্যামুয়েল

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

20

একটি তিনটি উপায় সংহত যেখানে একটি বেস ফাইলে দুটি পরিবর্তনসেটগুলি প্রয়োগ করার সাথে সাথে মার্জ করা হয়, একটি প্রয়োগ করার বিপরীতে, তারপরে ফলাফলটি অন্যটির সাথে মার্জ করে।

উদাহরণস্বরূপ, একই জায়গায় একটি লাইন যুক্ত হওয়ার সাথে দুটি পরিবর্তন হওয়া দুটি সংযোজন হিসাবে ইন্টারপ্রেড করা যেতে পারে, একটি লাইনের পরিবর্তন নয়।

উদাহরণ স্বরূপ

ফাইল এ দুটি লোকের দ্বারা সংশোধন করা হয়েছে, একটি মজ যোগ করছে, একটি মাউস যুক্ত করছে।

#File a
    dog
    cat

#diff b, a
    dog
+++ mouse
    cat

#diff c, a
    dog
+++ moose
    cat

এখন, যদি আমরা পরিবর্তনগুলি সেটগুলি প্রয়োগ করার সাথে সাথে মার্জ করি তবে আমরা পেয়ে যাব (3-উপায় মার্জ)

#diff b and c, a
    dog
+++ mouse
+++ moose
    cat

তবে আমরা যদি খ প্রয়োগ করি, তবে খ থেকে সিতে পরিবর্তনের দিকে তাকান এটি দেখতে মনে হবে যে আমরা কেবল 'ইউ' কে একটি 'ও' তে পরিবর্তন করছি (দ্বিমুখী একীকরণ)

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