วิธีโต้ตอบ (ทางสายตา) แก้ไขความขัดแย้งใน SourceTree / git


119

ฉันใช้ (Windows) SourceTree สำหรับโครงการคอมไพล์ของฉัน ฉันสามารถทำได้ใน command prompt หรือ Linux terminal

แต่ฉันสงสัยว่ามีวิธีที่ดีในการแก้ปัญหาความขัดแย้งในเชิงโต้ตอบและทางสายตาหรือไม่ ตัวอย่างเช่นหากการดึงตรวจพบความขัดแย้งให้เปิดเครื่องมือความขัดแย้งที่ใช้ GUI ขึ้นมา (เช่น P4Merge) เป็นไปได้ไหม?

ฉันมักจะแก้ปัญหาความขัดแย้งด้วยตนเองซึ่งเป็นเรื่องที่เจ็บปวด

ตัวอย่างเช่นpullข้อความคอมไพล์จาก SourceTree

git -c diff.mnemonicprefix=false -c core.quotepath=false pull --no-commit origin master
From W:\repo\
 * branch            master     -> FETCH_HEAD   

Updating 33c07bf..41e0249

error: Your local changes to the following files would be overwritten by merge:
    foo.cpp
    goo.cpp
    goo.hpp
Please, commit your changes or stash them before you can merge.
Aborting    

Completed with errors, see above.

คำตอบ:


135

จาก SourceTree คลิกที่ Tools-> Options จากนั้นบนแท็บ "ทั่วไป" ตรวจสอบให้แน่ใจว่าได้ทำเครื่องหมายในช่องเพื่ออนุญาตให้ SourceTree แก้ไขไฟล์กำหนดค่า Git ของคุณ

จากนั้นเปลี่ยนไปที่แท็บ "ความแตกต่าง" ในครึ่งล่างให้ใช้เมนูแบบเลื่อนลงเพื่อเลือกโปรแกรมภายนอกที่คุณต้องการใช้ในการสร้างความแตกต่างและการผสาน ฉันได้ติดตั้งKDiff3และชอบมันมากพอแล้ว เมื่อคุณทำเสร็จแล้วคลิกตกลง

ตอนนี้เมื่อมีการผสานคุณสามารถไปที่ Actions-> Resolve Conflicts-> Launch External Merge Tool


4
ฉันลองสิ่งนี้แล้ว แต่ในตอนท้ายฉันไม่เห็นการเปิดตัวเกินกว่าที่จะเปรียบเทียบได้ ฉันเห็นเปรียบเทียบไฟล์ที่สร้างขึ้น แต่นั่นแหล่ะ ฉันไม่สามารถแก้ไขความขัดแย้งได้ การเปลี่ยนสิ่งนี้เป็นการเปรียบเทียบมาตรฐาน / ค่าเริ่มต้นดูเหมือนจะไม่ช่วยเช่นกัน
Echiban

1
@echiban คุณอาจมีใบอนุญาตมาตรฐานสำหรับ Beyond Compare ซึ่งไม่ยอมรับการรวม 3 ทาง คุณต้องใช้โปรเพื่อใช้เป็น git mergetool
pierdevara

6
หลังจากทำตามขั้นตอนทั้งหมดเพื่อกำหนดค่า "Launch External Merge Tool" ยังคงเป็นสีจางสำหรับฉันไม่มีวิธีเปิดใช้งาน
pal4life

2
นอกจากนี้ฉันไม่ได้เลือกไฟล์ความขัดแย้งในการผสานเมื่อฉันทำมันก็เป็นไปได้ดี
pal4life

2
ฉันต้องคลิกที่รายการ "Uncommited changes" ในรายการการกระทำก่อนที่มันจะเป็นสีเทา
Micah Zoltu

11

ฉันใช้ SourceTree ร่วมกับ TortoiseMerge / Diff ซึ่งเป็นเครื่องมือ diff / merge ที่ง่ายและสะดวกมาก

หากคุณต้องการใช้ด้วยเช่นกันให้ทำดังนี้

  1. รับ TortoiseMerge / Diff เวอร์ชันสแตนด์อโลน (ค่อนข้างเก่าเนื่องจากไม่ได้จัดส่งแบบสแตนด์อโลนตั้งแต่เวอร์ชัน 1.6.7 ของ TortosieSVN นั่นคือตั้งแต่เดือนกรกฎาคม 2554) ลิงค์และรายละเอียดในคำตอบนี้

  2. คลายซิปTortoiseIDiff.exeและTortoiseMerge.exeไปที่โฟลเดอร์ใด ๆ ( c:\Program Files (x86)\Atlassian\SourceTree\extras\ในกรณีของฉัน)

  3. ใน SourceTree Tools > Options > Diff > External Diff / Mergeเปิด เลือกTortoiseMergeในรายการแบบเลื่อนลงทั้งสองรายการ

  4. ตีOKและจุด SourceTree ไปยังสถานที่ที่คุณและTortoiseIDiff.exeTortoiseMerge.exe

หลังจากนั้นคุณสามารถเลือกResolve Conflicts > Launch External Merge Toolจากเมนูบริบทในแต่ละไฟล์ที่ขัดแย้งกันในที่เก็บในเครื่องของคุณ นี่จะเป็นการเปิด TortoiseMerge ซึ่งคุณสามารถจัดการกับความขัดแย้งทั้งหมดที่คุณมีได้อย่างง่ายดาย เมื่อเสร็จแล้วให้ปิด TortoiseMerge (คุณไม่จำเป็นต้องบันทึกการเปลี่ยนแปลงด้วยซ้ำซึ่งอาจทำได้โดยอัตโนมัติ) และหลังจากนั้นไม่กี่วินาที SourceTree ก็ควรจัดการอย่างสง่างาม

ปัญหาเดียวคือสร้างสำเนาสำรองโดยอัตโนมัติแม้ว่าจะไม่ได้เลือกตัวเลือกที่เหมาะสมก็ตาม


4

เมื่อเมนูแก้ไขข้อขัดแย้ง -> เนื้อหาถูกปิดใช้งานอาจอยู่ในรายการไฟล์ที่รอดำเนินการ เราต้องเลือกตัวเลือก Conflicted files จากเมนูแบบเลื่อนลง (ด้านบน)

หวังว่ามันจะช่วยได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.