อัลกอริทึมความอดทนแตกต่างจากgit diff
อัลกอริทึมเริ่มต้นอย่างไรและเมื่อใดที่ฉันต้องการใช้
--histogram
พารามิเตอร์ที่ "... ขยายอัลกอริธึมความอดทนเป็น" สนับสนุนองค์ประกอบทั่วไปที่เกิดขึ้นน้อย " git-scm.com/docs/git-diff.html
อัลกอริทึมความอดทนแตกต่างจากgit diff
อัลกอริทึมเริ่มต้นอย่างไรและเมื่อใดที่ฉันต้องการใช้
--histogram
พารามิเตอร์ที่ "... ขยายอัลกอริธึมความอดทนเป็น" สนับสนุนองค์ประกอบทั่วไปที่เกิดขึ้นน้อย " git-scm.com/docs/git-diff.html
คำตอบ:
คุณสามารถอ่านโพสต์จาก Bram Cohenผู้เขียนอัลกอริทึม diff อดทน แต่ฉันพบโพสต์บล็อกนี้เพื่อสรุปขั้นตอนวิธี diff อดทนได้เป็นอย่างดี:
Patience Diff มุ่งเน้นพลังงานของมันในบรรทัดเนื้อหาที่มีความถี่ต่ำซึ่งทำหน้าที่เป็นเครื่องหมายหรือลายเซ็นของเนื้อหาสำคัญในข้อความ มันยังคงเป็นฐานที่แตกต่างของ LCS แต่มีความแตกต่างที่สำคัญเนื่องจากพิจารณาเฉพาะการเรียงลำดับบรรทัดที่ยาวที่สุดของลายเซ็น:
ค้นหาบรรทัดทั้งหมดที่เกิดขึ้นเพียงครั้งเดียวทั้งสองข้างจากนั้นทำการเรียงลำดับทั่วไปที่ยาวที่สุดบนบรรทัดเหล่านั้นจับคู่ให้ตรงกัน
คุณควรใช้ความอดทนต่างกันเมื่อใด ตามที่ Bram ความอดทนต่างกันดีสำหรับสถานการณ์นี้:
กรณีที่เลวร้ายจริงๆคือกรณีที่มีสองเวอร์ชั่นแยกกันอย่างมากและนักพัฒนาไม่ได้ระมัดระวังในการรักษาขนาดของแพตช์ให้อยู่ในการควบคุม ภายใต้สถานการณ์เหล่านั้นอัลกอริธึม diff อาจกลายเป็น 'แนว' ในบางครั้งซึ่งตรงกับส่วนที่ยาวของวงเล็บปีกกาด้วยกัน แต่มันก็มีความสัมพันธ์กับฟังก์ชั่นวงเล็บปีกกาในรุ่นหนึ่งด้วยวงเล็บปีกกาของฟังก์ชันต่อไปในรุ่นอื่น สถานการณ์นี้น่าเกลียดมากและอาจส่งผลให้ไฟล์ข้อขัดแย้งที่ใช้ไม่ได้โดยสิ้นเชิงในสถานการณ์ที่คุณต้องการนำเสนอสิ่งต่าง ๆ ให้สอดคล้องกันมากที่สุด
อัลกอริทึม diff อดทนเป็นอัลกอริทึม diff ช้าลงที่แสดงผลลัพธ์ที่ดีขึ้นในบางกรณี
สมมติว่าคุณได้เช็คอินไฟล์ต่อไปนี้เพื่อคอมไพล์:
.foo1 {
margin: 0;
}
.bar {
margin: 0;
}
ตอนนี้เราจัดลำดับส่วนใหม่และเพิ่มบรรทัดใหม่:
.bar {
margin: 0;
}
.foo1 {
margin: 0;
color: green;
}
อัลกอริทึม diff เริ่มต้นอ้างว่าส่วนหัวมีการเปลี่ยนแปลง:
$ 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;
+}
มีการสนทนาที่ดีมีคุณภาพต่างอัตนัยที่นี่และคอมไพล์ 2.11 คือการสำรวจการวิเคราะห์พฤติกรรม diff เพิ่มเติม
โปรดทราบว่าอัลกอริทึมอดทนต่างยังคงมีบางคนที่รู้จักกันในกรณีพยาธิวิทยา