KDiff3 เป็นเครื่องมือแบบ Open Source สำหรับเปรียบเทียบความแตกต่าง (Diff) และรวมไฟล์ข้อความ (Merge) ที่รองรับทั้งการเทียบ 2 ไฟล์ (2-way diff) และ 3 ไฟล์ (3-way merge) นิยมใช้งานร่วมกับระบบ Version Control เช่น Git เพื่อแก้ปัญหา Merge Conflict หรือใช้ตรวจเช็กไฟล์คอนฟิกต่าง ๆ
ทำความเข้าใจโครงสร้างหน้าต่าง (3-Way Merge)
เมื่อเปิดไฟล์ขึ้นมาเปรียบเทียบ โปรแกรมจะแบ่งพื้นที่ทำงานออกเป็น 2 ส่วนหลัก
- หน้าต่างด้านบน (Input Windows)
ทำหน้าที่เป็นไฟล์ต้นทางสำหรับอ่านอย่างเดียว (Read-only) ไม่สามารถพิมพ์แก้หรือสั่งส่งค่าข้ามไปหากันโดยตรงได้- A (Base)
ไฟล์ต้นฉบับดั้งเดิมก่อนมีการแก้ไข - B (Branch/Local)
ไฟล์เวอร์ชันที่มีการแก้ไขชุดที่ 1 (เช่น งานฝั่งเรา) - C (Branch/Remote)
ไฟล์เวอร์ชันที่มีการแก้ไขชุดที่ 2 (เช่น งานของทีม)
- A (Base)
- หน้าต่างด้านล่างสุด (Output Window)
เป็น หน้าต่างผลลัพธ์จริง ที่จะถูกนำไปเขียนบันทึกลงดิสก์ การเลือกหรือรวมโค้ดทั้งหมดจะต้องส่งผลลัพธ์ลงมาที่กล่องนี้เท่านั้น
ขั้นตอนการ Merge ไฟล์
- เปิดไฟล์และกำหนดปลายทาง
- ไปที่ File > Open
- ระบุไฟล์ในช่อง A, B (และ C หากมี)
- สำคัญ: ในช่อง Output ต้องระบุไฟล์ปลายทางที่ต้องการให้บันทึกทับ (เช่น ใส่ path เดียวกับไฟล์ B หากต้องการ Sync ค่าไปทับ B) หากไม่ได้ใส่ตั้งแต่แรก โปรแกรมอาจไม่เปิดระบบบันทึกให้
- เปิดโหมดผสานไฟล์
- หากยังไม่มีหน้าต่างด้านล่าง ให้เลือกเมนู File > Merge Current File หรือ Merge > Show Merge Editor เพื่อเปิดหน้าต่าง Output
- เลือกข้อความเข้าสู่ Output
- เมื่อเลื่อนไปยังจุดที่ขัดแย้ง โปรแกรมจะขึ้นแถบสีพร้อมข้อความสีแดงเตือนว่า
<??? Merge Conflict> - คลิกเมาส์ไปที่บรรทัดดังกล่าวใน หน้าต่าง Output ด้านล่างสุด
- กดปุ่มตัวอักษร A, B หรือ C บน Toolbar ด้านบน (หรือคลิกขวาที่บรรทัดแล้วเลือก) เพื่อดึงข้อความจากหน้านั้นลงมา
- สามารถเลือกผสมกันได้ เช่น กด B แล้วกด C ตาม โปรแกรมจะนำโค้ดทั้งสองฝั่งมาต่อกัน หรือจะพิมพ์แก้ไขข้อความในกล่อง Output โดยตรงก็ได้เช่นกัน
- เมื่อเลื่อนไปยังจุดที่ขัดแย้ง โปรแกรมจะขึ้นแถบสีพร้อมข้อความสีแดงเตือนว่า
- บันทึกผลลัพธ์ (Save)
- ตรวจสอบว่าไม่มีจุดขัดแย้งค้างอยู่ แล้วกด File > Save (Ctrl + S บน Windows / Cmd + S บน Mac) เพื่อบันทึกผลลัพธ์ทับไฟล์ปลายทาง
ปัญหาที่พบบ่อย: ทำไมถึงกด Save / Save As ไม่ได้?
หลายคนมักพบปัญหาเมนู Save และ Save As… กลายเป็นสีเทา (Disabled) สาเหตุหลักเกิดจาก
- ยังมี Merge Conflict ค้างอยู่
KDiff3 มีระบบป้องกันไม่ให้บันทึกไฟล์เด็ดขาด หากยังมีแถบ<??? Merge Conflict>หรือยอด Unsolved Conflict ใน Status bar มากกว่า 0- วิธีแก้: กดเมนู Merge > Choose A for All Unsolved Conflicts (หรือเลือก B) เพื่อสั่งให้เคลียร์ทุกจุดที่ค้างอยู่ให้อัตโนมัติ เมื่อ Conflict กลายเป็น 0 ปุ่ม Save จะสว่างขึ้นมาทันที
- ไม่ได้คลิกโฟกัสที่ช่อง Output
หากเคอร์เซอร์ยังวางอยู่ที่หน้าต่าง A หรือ B (ที่เป็น Read-only) โปรแกรมจะปิดเมนูบันทึก ให้คลิกที่หน้าต่างล่างสุดก่อน 1 ครั้ง - ทางลัดกรณีฉุกเฉิน
หากตั้งค่าติดขัดแต่จัดโค้ดในช่อง Output เสร็จแล้ว ให้คลิกในช่อง Output กด Cmd + A / Ctrl + A เพื่อ Select All แล้ว Copy ไปวางบันทึกทับใน Text Editor ตัวอื่นได้ทันที
ข้อจำกัดในทางปฏิบัติ
- ไม่เหมาะกับไฟล์ขนาดยาว
หากต้องทำงานกับโค้ดหรือไฟล์คอนฟิกขนาดยาวที่มีจุดต่างกันหลายสิบจุด การต้องคอยมองสลับ 3 หน้าต่างขึ้น-ลง และต้องแก้ Unsolved Conflict ให้ครบทุกจุดก่อนถึงจะยอมให้เซฟ จะทำให้ทำงานช้าและตาลายได้ง่าย - ไม่มีปุ่ม Push ข้ามฝั่งแบบคลิกเดียว
ไม่สามารถคลิกส่งโค้ดจาก A ไป B ตรงๆ บนหน้าต่างเปรียบเทียบได้ ทุกอย่างต้องดึงลงมาพักที่ช่อง Output เสมอ - ขาดความยืดหยุ่น
ไม่สามารถเลือกแก้ไขและบันทึกเฉพาะบางส่วนที่ทำเสร็จไปก่อนได้ ต้องรอเคลียร์กระบวนการ Merge ทั้งไฟล์ให้สมบูรณ์
หากลักษณะงานเป็นการเปรียบเทียบและ Sync ระหว่าง 2 ไฟล์ทั่วไป การเลือกใช้เครื่องมือที่ออกแบบมาสำหรับ Visual Diff ซ้าย-ขวาโดยตรง (เช่น Meld, VS Code Built-in Diff หรือ Beyond Compare) มักจะให้ความคล่องตัวกว่า เพราะสามารถพิมพ์แก้ได้อิสระ มีปุ่มลูกศรผลักโค้ดข้ามฝั่งได้ทันที และกดบันทึกไฟล์ได้ตลอดเวลาโดยไม่ต้องรอเคลียร์ทั้งเอกสาร
อ่านเพิ่มเติม