เปรียบเทียบข้อความ (Text Diff Checker)

เปรียบเทียบข้อความหรือโค้ดสองชุดทีละบรรทัด บรรทัดที่เพิ่ม ลบ และเปลี่ยนจะถูกไฮไลต์ ละเอียดถึงคำที่ต่างกัน

ทำงานในเบราว์เซอร์ไม่ต้องสมัครไม่มีการอัปโหลด

วางข้อความในทั้งสองช่องเพื่อดูความแตกต่าง

วิธีใช้ เปรียบเทียบข้อความ (Diff Checker)

  1. วางข้อความต้นฉบับทางซ้ายและข้อความที่เปลี่ยนทางขวา หรือเปิดไฟล์สองไฟล์
  2. การเปรียบเทียบอัปเดตทันทีที่คุณพิมพ์ เลือกมุมมอง เคียงข้างกัน หรือ Unified
  3. ติ๊ก ไม่สนใจช่องว่าง, ไม่สนใจตัวพิมพ์เล็กใหญ่ หรือ ไม่สนใจบรรทัดว่าง เพื่อซ่อนสิ่งรบกวน เช่น การเยื้องใหม่
  4. ใช้ ซ่อนส่วนที่ไม่เปลี่ยน เพื่อโฟกัสที่การเปลี่ยนแปลง โดยแสดงบริบทรอบ ๆ สามบรรทัด
  5. คลิก คัดลอกเป็น patch หรือ ดาวน์โหลด .diff เพื่อรับ unified diff มาตรฐานที่ใช้กับ git apply หรือ patch ได้

Diff checker นี้ทำงานอย่างไร

เครื่องมือแยกข้อมูลทั้งสองเป็นบรรทัดและรัน อัลกอริทึม Myers difference ซึ่งเป็นอัลกอริทึม O(ND) เดียวกับที่ใช้ใน git diff และ GNU diff โดยหาลำดับการแทรกและการลบที่สั้นที่สุดที่เปลี่ยนต้นฉบับให้เป็นข้อความที่เปลี่ยนแล้ว ผลลัพธ์จึงแสดงบรรทัดที่เปลี่ยนน้อยที่สุดเท่าที่เป็นไปได้ บรรทัดต้นและท้ายที่เหมือนกันจะถูกข้ามก่อน ทำให้การเปรียบเทียบไฟล์หลายพันบรรทัดเกือบจะทันที

เมื่อบรรทัดที่ถูกลบและบรรทัดที่ถูกเพิ่มอยู่ติดกัน จะถูกจับคู่เป็นบรรทัดที่ แก้ไข และ diff อีกครั้งทีละคำ คำที่เปลี่ยนจริงจะได้รับไฮไลต์ที่เข้มกว่า ตัวแปรที่เปลี่ยนชื่อหรือตัวเลขที่ถูกแก้จึงโดดเด่นแม้อยู่ในบรรทัดยาว

มุมมองเคียงข้างกัน vs. unified

เคียงข้างกัน วางต้นฉบับไว้ทางซ้ายและเวอร์ชันใหม่ไว้ทางขวา พร้อมเลขบรรทัดของทั้งสองฝั่ง เป็นมุมมองที่ง่ายที่สุดสำหรับรีวิวข้อความ ไฟล์ config และการเปลี่ยนโค้ดเล็กน้อย มุมมอง Unified แสดงบรรทัดที่ลบ (-) และเพิ่ม (+) สลับกันในคอลัมน์เดียว ซึ่งเป็นรูปแบบที่ใช้ในเครื่องมือรีวิวโค้ดและไฟล์ patch

รูปแบบ unified diff (patch)

patch ที่ส่งออกเป็นไปตามรูปแบบ diff -u: เฮดเดอร์ ---/+++ ตามด้วย hunk ที่ขึ้นต้นด้วย @@ -l,s +l,s @@ โดย l คือเลขบรรทัดแรก และ s คือจำนวนบรรทัดของ hunk ในแต่ละไฟล์ แต่ละ hunk มีบริบทที่ไม่เปลี่ยนสามบรรทัด จึงใช้กับ patch -p0 หรือ git apply ได้แม้บรรทัดใกล้เคียงจะย้ายที่

เมื่อใดควรใช้ตัวเลือกการละเว้น

  • ไม่สนใจช่องว่าง ถือว่าบรรทัดเท่ากันหากต่างกันเพียงช่องว่างหรือแท็บ ใช้หลังจากเยื้องโค้ดใหม่หรือเปลี่ยนแท็บเป็นช่องว่าง
  • ไม่สนใจตัวพิมพ์เล็กใหญ่ สะดวกสำหรับ SQL, HTML และไฟล์ log ที่ตัวพิมพ์ไม่สำคัญ
  • ไม่สนใจบรรทัดว่าง ซ่อนบรรทัดที่ถูกเพิ่มหรือลบเพื่อเว้นระยะเท่านั้น

คำถามที่พบบ่อย

ข้อความของฉันถูกอัปโหลดไปที่ใดหรือไม่?
ไม่ การเปรียบเทียบทำงานในเบราว์เซอร์ของคุณด้วย JavaScript ทั้งหมด สิ่งที่คุณวางไม่ถูกส่งไปยังเซิร์ฟเวอร์ คุณจึงเปรียบเทียบโค้ดส่วนตัว สัญญา หรือไฟล์ config ได้อย่างปลอดภัย
ข้อความใหญ่ได้แค่ไหน?
ไฟล์หลายหมื่นบรรทัดเปรียบเทียบเสร็จในเวลาไม่ถึงวินาทีบนแล็ปท็อปทั่วไป เนื่องจากต้นทุนของอัลกอริทึมเพิ่มตามจำนวนความแตกต่าง ไฟล์ขนาดใหญ่มากสองไฟล์ที่ต่างกันโดยสิ้นเชิงจะใช้เวลานานที่สุด
เปรียบเทียบไฟล์สองไฟล์แทนการวางได้ไหม?
ได้ ใช้ปุ่ม เปิดไฟล์ เหนือแต่ละช่องเพื่อโหลดไฟล์ในเครื่อง ไฟล์ถูกอ่านโดยเบราว์เซอร์ของคุณและไม่ถูกอัปโหลด
ทำไมบรรทัดหนึ่งแสดงเป็นลบและเพิ่ม แทนที่จะเป็นแก้ไข?
บรรทัดจะถูกจับคู่เป็น “แก้ไข” ก็ต่อเมื่อกลุ่มบรรทัดที่ถูกลบอยู่ติดกับกลุ่มบรรทัดที่ถูกเพิ่มโดยตรง หากสองบรรทัดมีข้อความร่วมกันน้อยมาก จะข้ามการไฮไลต์ระดับคำ เพราะจะรกกว่าการแสดงทั้งบรรทัดว่าเปลี่ยน
เปรียบเทียบ JSON object อย่างไร?
ใช้เครื่องมือ JSON Diff ซึ่งเปรียบเทียบโครงสร้างที่พาร์สแล้ว ลำดับคีย์และการจัดรูปแบบจึงไม่สร้างความแตกต่างที่ผิดพลาด และแสดง path ที่เปลี่ยนอย่างแม่นยำ

เครื่องมือที่เกี่ยวข้อง