ฉันได้อ่านเกี่ยวกับ diff และ patch แต่ฉันไม่สามารถหาวิธีใช้สิ่งที่ฉันต้องการ ฉันเดาว่ามันค่อนข้างง่ายดังนั้นเพื่อแสดงปัญหาของฉันให้ใช้สองไฟล์นี้:
a.xml
<resources>
<color name="same_in_b">#AAABBB</color>
<color name="not_in_b">#AAAAAA</color>
<color name="in_b_but_different_val">#AAAAAA</color>
<color name="not_in_b_too">#AAAAAA</color>
</resources>
b.xml
<resources>
<color name="same_in_b">#AAABBB</color>
<color name="in_b_but_different_val">#BBBBBB</color>
<color name="not_in_a">#AAAAAA</color>
</resources>
ฉันต้องการมีเอาต์พุตซึ่งมีลักษณะเช่นนี้ (ลำดับไม่สำคัญ):
<resources>
<color name="same_in_b">#AAABBB</color>
<color name="not_in_b">#AAAAAA</color>
<color name="in_b_but_different_val">#BBBBBB</color>
<color name="not_in_b_too">#AAAAAA</color>
<color name="not_in_a">#AAAAAA</color>
</resources>
การผสานควรมีบรรทัดทั้งหมดตามกฎง่าย ๆ นี้:
- บรรทัดใด ๆ ที่อยู่ในไฟล์เดียวเท่านั้น
- หากบรรทัดมีแท็กชื่อเดียวกัน แต่มีค่าต่างกันให้นำค่าจากวินาที
ฉันต้องการใช้งานนี้ในสคริปต์ทุบตีดังนั้นจึงไม่จำเป็นต้องทำโดยใช้ diff และ patch ถ้าโปรแกรมอื่นเหมาะสมกว่า
diff
สามารถบอกคุณได้ว่าบรรทัดใดอยู่ในไฟล์เดียว แต่ไม่สามารถบอกได้ว่าเป็นไฟล์ใด แต่จะอยู่ในกลุ่มย่อยของทั้งบรรทัดpatch
เหมาะสำหรับการเปลี่ยนแปลงไฟล์เดียวกันในลักษณะเดียวกัน (อาจเป็นไฟล์รุ่นเดียวกันหรือเป็นไฟล์ที่แตกต่างกันโดยสิ้นเชิงซึ่งอย่างไรก็ตามหมายเลขบรรทัดและบรรทัดโดยรอบสำหรับการเปลี่ยนแปลงแต่ละไฟล์จะเหมือนกับไฟล์ต้นฉบับของคุณ) ไม่เลยพวกมันไม่เหมาะกับงานนี้เป็นพิเศษ คุณอาจต้องการดูwdiff
แต่วิธีแก้ไขอาจต้องใช้สคริปต์ที่กำหนดเอง เนื่องจากข้อมูลของคุณดูเหมือน XML คุณอาจต้องการค้นหาเครื่องมือ XSL บางตัว