PlusMagi's Blog By Pitt Phunsanit automation,Backend,CI/CD KDiff3: วิธีใช้งาน ปัญหาที่พบบ่อย และข้อจำกัดจริง

KDiff3: วิธีใช้งาน ปัญหาที่พบบ่อย และข้อจำกัดจริง

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 (เช่น งานของทีม)
  • หน้าต่างด้านล่างสุด (Output Window)
    เป็น หน้าต่างผลลัพธ์จริง ที่จะถูกนำไปเขียนบันทึกลงดิสก์ การเลือกหรือรวมโค้ดทั้งหมดจะต้องส่งผลลัพธ์ลงมาที่กล่องนี้เท่านั้น

ขั้นตอนการ Merge ไฟล์

  1. เปิดไฟล์และกำหนดปลายทาง
    • ไปที่ File > Open
    • ระบุไฟล์ในช่อง A, B (และ C หากมี)
    • สำคัญ: ในช่อง Output ต้องระบุไฟล์ปลายทางที่ต้องการให้บันทึกทับ (เช่น ใส่ path เดียวกับไฟล์ B หากต้องการ Sync ค่าไปทับ B) หากไม่ได้ใส่ตั้งแต่แรก โปรแกรมอาจไม่เปิดระบบบันทึกให้
  2. เปิดโหมดผสานไฟล์
    • หากยังไม่มีหน้าต่างด้านล่าง ให้เลือกเมนู File > Merge Current File หรือ Merge > Show Merge Editor เพื่อเปิดหน้าต่าง Output
  3. เลือกข้อความเข้าสู่ Output
    • เมื่อเลื่อนไปยังจุดที่ขัดแย้ง โปรแกรมจะขึ้นแถบสีพร้อมข้อความสีแดงเตือนว่า <??? Merge Conflict>
    • คลิกเมาส์ไปที่บรรทัดดังกล่าวใน หน้าต่าง Output ด้านล่างสุด
    • กดปุ่มตัวอักษร A, B หรือ C บน Toolbar ด้านบน (หรือคลิกขวาที่บรรทัดแล้วเลือก) เพื่อดึงข้อความจากหน้านั้นลงมา
    • สามารถเลือกผสมกันได้ เช่น กด B แล้วกด C ตาม โปรแกรมจะนำโค้ดทั้งสองฝั่งมาต่อกัน หรือจะพิมพ์แก้ไขข้อความในกล่อง Output โดยตรงก็ได้เช่นกัน
  4. บันทึกผลลัพธ์ (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) มักจะให้ความคล่องตัวกว่า เพราะสามารถพิมพ์แก้ได้อิสระ มีปุ่มลูกศรผลักโค้ดข้ามฝั่งได้ทันที และกดบันทึกไฟล์ได้ตลอดเวลาโดยไม่ต้องรอเคลียร์ทั้งเอกสาร



อ่านเพิ่มเติม

Tags: , ,
Exit mobile version