การแก้ไขความขัดแย้ง: จะยอมรับการเปลี่ยนแปลงโดยอัตโนมัติได้อย่างไร?


97

เมื่อรวมการเปลี่ยนแปลงที่ขัดแย้งกันโดยใช้hg mergeMercurial จะแทรกชุดของเครื่องหมายลงในไฟล์ที่จะรวมในสำเนาการทำงานของฉันดังนี้:

<<<<<<< local
  version = 0.2
=======
  version = 0.1
>>>>>>> other

จากนั้นฉันแก้ไขไฟล์ทั้งหมดที่ทำเครื่องหมายเป็น U ด้วยตนเองจากรายการที่สร้างขึ้นจากhg resolve --all -lนั้นฉันก็บอก mercurial ว่าฉันได้แก้ไขแล้วโดยhg resolve -m file1 file2 file3 ...

อย่างไรก็ตามในหลาย ๆ สถานการณ์ฉันต้องการยอมรับการเปลี่ยนแปลงเฉพาะของฉันหรืออย่างเดียวในไฟล์ที่ขัดแย้งกัน ฉันกำลังคิดที่จะสร้างสคริปต์ sed / awk / อะไรก็ตามที่มีชื่อว่าง่าย ๆ สองตัวaccept-theirs.shและaccept-my.shหรือมีวิธีใดที่ "เหมาะสม" ในการทำ

คำตอบ:


167

ใช้

hg resolve -t internal:other --all

ที่จะยอมรับtheirsและ

hg resolve -t internal:local --all

ที่จะยอมรับ yours


ขอบคุณมาก! ฉันไม่เข้าใจว่า @djc หมายถึงอะไร แต่วิธีแก้ปัญหาของคุณทำงานได้อย่างมีเสน่ห์
psihodelia

@psihodelia djc พูดเหมือนกันมากลองดูhg help merge-tools(mergetools เป็นนามแฝงในรุ่นหลัง ๆ )
MGP

6
ตามหมายเหตุด้านข้างฉันใช้นามแฝงนี้:[alias] mine = resolve -t internal:local theirs = resolve -t internal:other
Melvyn

1
เหล่านี้เป็นสามบรรทัดจะเพิ่มให้กับตัวเองหนึ่ง.hgrcสำหรับมือใหม่: [alias]แล้วแล้วmine = resolve -t internal:local theirs = resolve -t internal:otherหลังจากนั้นคุณสามารถใช้hg mine some_file.pyหรือhg theirs -a(สำหรับทุกคน)
Tobia

1
ในขณะที่phab.mercurial-scm.org/D4379คุณอาจต้องใส่--re-mergeธง (เช่นhg resolve -t internal:other --re-merge --all)
Ethan Koenig

23

ลองสิ่งนี้:

hg merge --tool 'internal:other'

ดูhg help merge-toolsข้อมูลเพิ่มเติม


1
หรือresolveสำหรับไฟล์เดียว / ทำซ้ำ (นอกจากนี้คำพูดรอบ ๆinternal:otherก็ไม่จำเป็น)
Chris Morgan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.