`গিট ডিফ - প্যাশনেন্স` কী?


219

ধৈর্য্যের অ্যালগোরিদম কীভাবে ডিফল্ট git diffঅ্যালগরিদম থেকে পৃথক হয় এবং আমি কখন এটি ব্যবহার করতে চাই?


1
সম্ভবত এটি স্থানান্তরিত কোড এবং পরিবর্তিত লাইনের সাথে মেলে যা অনেক ধীর হতে পারে
কোডিমানিক্স

আমি বাজার থেকে ধৈর্য ডিফের জন্য একটি স্বতন্ত্র লিপিটি বের করেছি, আপনি এটি অন্য এস থ্রেডে খুঁজে পেতে পারেন ।
ট্রাইপাই

38
একটি অনুসরণ প্রশ্ন। আমি কখন ধৈর্য পৃথক না করা উচিত?
বালকি

4
এছাড়াও --histogramপ্যারামিটারটি রয়েছে যা "..." অল্প সংখ্যক সাধারণ উপাদানগুলিকে সমর্থন "করার জন্য ধৈর্য্যের অ্যালগরিদমকে বাড়িয়েছে git-scm.com/docs/git-diff.html
রবার্ট

উত্তর:


183

আপনি ধৈর্যশীলতা পৃথক অ্যালগরিদমের লেখক ব্র্যাম কোহেনের একটি পোস্ট পড়তে পারেন তবে ধৈর্য্যের ভিন্নতাটি অ্যালগরিদমের সংক্ষিপ্তসার হিসাবে আমি এই ব্লগ পোস্টটি পেয়েছি :

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

সমস্ত লাইনগুলি উভয় পক্ষের ঠিক একবারে উপস্থিত হয় তা সন্ধান করুন, তারপরে সেই লাইনগুলিতে দীর্ঘতম সাধারণ অনুচ্ছেদ করুন do

যখন আপনি উচিত ব্যবহার ধৈর্য পরিবর্তন? ব্রামের মতে, ধৈর্যশীলতার পার্থক্য এই পরিস্থিতির জন্য ভাল:

সত্যই খারাপ ঘটনাগুলি সেগুলিতে যেখানে দুটি সংস্করণ নাটকীয়ভাবে ডাইভার্ট হয়ে গেছে এবং বিকাশকারী প্যাচ মাপগুলি নিয়ন্ত্রণে রাখার বিষয়ে সাবধান হন না। এই পরিস্থিতিতে একটি পৃথক অ্যালগরিদম মাঝেমধ্যে 'মিসেলাইনড' হয়ে উঠতে পারে কারণ এটি দীর্ঘ কোঁকড়ানো বন্ধনীগুলির সাথে একত্রে মিলিত হয়, তবে এটি অন্য সংস্করণে পরবর্তী পরবর্তী ফাংশনের কোঁকড়ানো বন্ধনীগুলির সাথে এক সংস্করণে ফাংশনগুলির কোঁকড়ানো বন্ধনীগুলির সাথে সংযোগ স্থাপন করে। এই পরিস্থিতিটি খুব কুৎসিত এবং এটির ক্ষেত্রে সম্পূর্ণরূপে অব্যর্থহীন দ্বন্দ্বের ফাইল তৈরি হতে পারে যেখানে আপনার এই জাতীয় জিনিসগুলির সুসংগতভাবে উপস্থাপনের জন্য প্রয়োজন।


3
আপাতত এক্সএমএল এর সাথে আমার অভিজ্ঞতায় এটি সাধারণ ডিফের হিসাবে ঠিক একই "খারাপ" ফলাফল দেয়।
স্টিভ্লো

5
এক্সএমএল সহ ধৈর্যশীলতার পার্থক্যের সাথে আমার আরও ভাল ভাগ্য হয়েছিল; আমি বর্তমানে যে পার্থক্যটি দেখছি তার মধ্যে নিয়মিত ডিফ অ্যালগরিদমের সাথে বর্ণিত মিস্যালাইনমেন্টের সমস্যাটি রয়েছে তবে ধৈর্যশীলতার ভিন্নতার সাথে একেবারে দুর্দান্ত দেখাচ্ছে।
me_and

22
প্রক্রিয়াটির অ্যানিমেটেড জিআইএফ সহ এই ব্লগটির একটি দুর্দান্ত ব্যাখ্যা রয়েছে: alfedenzo.livej
पत्रकार.

3
আমি এই ব্লগটি খুব আকর্ষণীয় এবং অ্যালগরিদমের বিবরণে আরও লিঙ্কগুলির সাথে ভাল ব্যাখ্যা সরবরাহ করেছি: ফ্যাবিস্যাংলার্ড.net / git_code_review / diff.php আশা করি এটি কারও পক্ষে কার্যকর হবে
সাথওখ

ফ্রোবনিটজ / ফাইব / ফ্যাক্ট ডিফটি gist.github.com/roryokane/6f9061d3a60c1ba41237
জর্জ ভি

52

আপনি এটি মার্জগুলির জন্যও ব্যবহার করতে পারেন (কিছু এক্সএমএল বিরোধের জন্য এখানে সত্যিই ভাল কাজ করেছে):

git merge --strategy-option=patience ...

51
বা এর মাধ্যমেgit config --global diff.algorithm patience
টোবু

11
খাটো হবে git merge -X patience
পাইথননট

42

ধৈর্য ডিফ অ্যালগরিদম একটি ধীর ডিফ অ্যালগরিদম যা কিছু ক্ষেত্রে আরও ভাল ফলাফল দেখায়।

ধরুন আপনি গিট করতে নিম্নলিখিত ফাইলটি চেক ইন করেছেন:

.foo1 {
    margin: 0;
}

.bar {
    margin: 0;
}

এখন আমরা বিভাগগুলি পুনঃক্রম এবং একটি নতুন লাইন যুক্ত:

.bar {
    margin: 0;
}

.foo1 {
    margin: 0;
    color: green;
}

ডিফল্ট ডিফ আলগোরিদিম দাবি করে যে বিভাগের শিরোনামগুলি পরিবর্তিত হয়েছে:

$ git diff --diff-algorithm=myers   
diff --git a/example.css b/example.css
index 7f1bd1e..6a64c6f 100755
--- a/example.css
+++ b/example.css
@@ -1,7 +1,8 @@
-.foo1 {
+.bar {
     margin: 0;
 }

-.bar {
+.foo1 {
     margin: 0;
+    color: green;
 }

ধৈর্যশীল ভিন্নতা এমন একটি ফলাফল দেখায় যা তর্কযোগ্যভাবে আরও স্বজ্ঞাত:

$ git diff --diff-algorithm=patience
diff --git a/example.css b/example.css
index 7f1bd1e..6a64c6f 100755
--- a/example.css
+++ b/example.css
@@ -1,7 +1,8 @@
-.foo1 {
-    margin: 0;
-}
-
 .bar {
     margin: 0;
 }
+
+.foo1 {
+    margin: 0;
+    color: green;
+}

এখানে সাবজেক্টিভ ডিফার গুনের একটি ভাল আলোচনা রয়েছে এবং গিট ২.১১ আরও বিভিন্ন ধরণের হিউরিস্টিক অন্বেষণ করছে

লক্ষ্য করুন ধৈর্য পরিবর্তন আলগোরিদিম এখনও কিছু জানা আবেগপূর্ণ ক্ষেত্রে হয়েছে

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