mergetool ที่ดีที่สุดเพื่อแทนที่ vimdiff
นี่เป็นลิ้นแบบแก้ม แต่มันก็เป็นสิ่งที่ฉันจบลงด้วยการมารวมตัวกันเป็นกลุ่มหลังจากลอง vimdiff
เมื่อต้องการแก้ไขข้อขัดแย้งในการผสานสิ่งที่ฉันต้องได้รับคือ:
- REMOTE
- ท้องถิ่น
- สอง diffs:
- diff BASE REMOTE
- diff BASE LOCAL
เพื่อลองใส่ทั้งคู่เข้าด้วยกัน
ในขณะที่ vimdiff แสดง BASE, LOCAL และ REMOTE ในหน้าจอ:
+--------------------------------+
| LOCAL | BASE | REMOTE |
+--------------------------------+
| MERGED |
+--------------------------------+
ฉันไม่รู้ว่าจะทำให้มันแสดงให้เห็นอย่างชัดเจนถึงสองสิ่งที่ฉันต้องการได้อย่างไรโดยดูจากซ้ายขวาไปทางซ้ายหลายครั้ง
นอกจากนี้ LOCAL และ REMOTE จะปรากฏอยู่ในเครื่องหมายความขัดแย้งผสานแล้วดังนั้นฉันจึงไม่ได้รับมากจากเครื่องมือที่แสดงให้เห็นอีกครั้ง
ดังนั้นฉันจึงสร้าง "difftool" ตัวเล็ก ๆ ของฉันที่แสดงให้เห็นถึงความแตกต่างที่ฉันหายไป:
~ / bin / cirosantilli-mergetool
#!/usr/bin/env bash
BASE="$1"
LOCAL="$2"
REMOTE="$3"
diff --color -u "$BASE" "$LOCAL"
diff --color -u "$BASE" "$REMOTE"
exit 1
GitHub ต้นน้ำ
และติดตั้งด้วย:
git config --global mergetool.cirosantilli-mergetool.cmd 'cirosantilli-mergetool $BASE $LOCAL $REMOTE'
git config --global mergetool.cirosantilli-mergetool.trustExitCode true
# If you want this to become your default mergetool.
#git config --global merge.tool 'cirosantilli-mergetool'
ตอนนี้เมื่อคุณ:
git mergetool -t cirosantilli-mergetool
มันแสดงให้เห็นถึงความแตกต่างสองอย่างที่ฉันต้องการบนเครื่องเทอร์มินัลเช่นบางอย่างพร้อม:
--- ./src/dev/arm/RealView_BASE_15560.py 2019-12-27 13:46:41.967021591 +0000
+++ ./src/dev/arm/RealView_LOCAL_15560.py 2019-12-27 13:46:41.979021479 +0000
@@ -994,7 +994,7 @@
def setupBootLoader(self, cur_sys, loc):
if not cur_sys.boot_loader:
- cur_sys.boot_loader = [ loc('boot_emm.arm64'), loc('boot_emm.arm') ]
+ cur_sys.boot_loader = [ loc('boot.arm64'), loc('boot.arm') ]
cur_sys.atags_addr = 0x8000000
cur_sys.load_offset = 0x80000000
@@ -1054,7 +1054,7 @@
]
def setupBootLoader(self, cur_sys, loc):
- cur_sys.boot_loader = [ loc('boot_emm_v2.arm64') ]
+ cur_sys.boot_loader = [ loc('boot_v2.arm64') ]
super(VExpress_GEM5_V2_Base,self).setupBootLoader(
cur_sys, loc)
--- ./src/dev/arm/RealView_BASE_15560.py 2019-12-27 13:46:41.967021591 +0000
+++ ./src/dev/arm/RealView_REMOTE_15560.py 2019-12-27 13:46:41.991021366 +0000
@@ -610,10 +610,10 @@
def attachIO(self, *args, **kwargs):
self._attach_io(self._off_chip_devices(), *args, **kwargs)
- def setupBootLoader(self, cur_sys, loc):
- cur_sys.boot_loader = loc('boot.arm')
- cur_sys.atags_addr = 0x100
- cur_sys.load_offset = 0
+ def setupBootLoader(self, cur_sys, boot_loader, atags_addr, load_offset):
+ cur_sys.boot_loader = boot_loader
+ cur_sys.atags_addr = atags_addr
+ cur_sys.load_offset = load_offset
ดังนั้นคุณสามารถดูที่นี่ทั้งสองแตกต่างทิ้งลงในสถานี:
RealView_BASE_15560.py
VS RealView_LOCAL_15560.py
RealView_BASE_15560.py
VS RealView_REMOTE_15560.py
ถ้าดิฟแตกต่างกันมากฉันจะค้นหาด้วยพลังพิเศษของ tmux
ใช่คุณทำทางลัดบางอย่างที่ vimdiff ให้ไว้ แต่โดยทั่วไปแล้วการแก้ปัญหาต้องใช้การคัดลอกอย่างระมัดระวังจากทั้งสองเวอร์ชันซึ่งฉันสามารถทำได้ดีในเซสชัน vim ปกติด้วยเครื่องหมายความขัดแย้ง git
การสังเกตและการกระจายไฟล์ในขณะที่vimdiff
กำลังทำงาน
ก่อนที่ฉันจะนั่งลงและตั้งค่าที่สมบูรณ์แบบอัตโนมัติด้วยcirosantilli-mergetool
นี่คือสิ่งที่ฉันกำลังทำเพื่อให้ได้ทั้งสองอย่างที่ฉันต้องการ
ในขณะที่git mergetool
กำลังทำงานvimdiff
หากมีข้อขัดแย้งในไฟล์ชื่อ, พูดmain.py
,, git สร้างไฟล์สำหรับแต่ละรุ่นชื่อเป็น:
main_BASE_1367.py
main_LOCAL_1367.py
main_REMOTE_1367.py
ในไดเรกทอรีเดียวกันกับmain.py
ที่1367
เป็น PID ของ git mergetool และดังนั้นจึงเป็นจำนวนเต็ม "สุ่ม" ตามที่กล่าวไว้ที่: ในความขัดแย้งผสาน git ไฟล์ BACKUP, BASE, LOCAL และ REMOTE ที่ถูกสร้างขึ้นคืออะไร
ดังนั้นเมื่อต้องการดูความแตกต่างที่ฉันต้องการฉันต้องหาไฟล์ที่สร้างขึ้นgit status
ก่อนแล้วจึงเปิดเทอร์มินัลใหม่และทำ vimdiff ระหว่างคู่ของไฟล์ที่ฉันสนใจ:
vim -d main_BASE_1367.py main_LOCAL_1367.py
vim -d main_BASE_1367.py main_REMOTE_1367.py
ร่วมกับgit mergetool
ข้อมูลนี้ช่วยให้มากที่จะคิดออกสิ่งที่เกิดขึ้นได้อย่างรวดเร็ว!
นอกจากนี้แม้ว่า mergetool จะทำงานอยู่คุณก็สามารถเปิดไฟล์ได้:
vim main.py
โดยตรงและแก้ไขที่นั่นถ้าคุณรู้สึกว่ามันจะง่ายขึ้นด้วยหน้าต่างตัวแก้ไขขนาดใหญ่
ข้ามโดยตรงเพื่อรวมความขัดแย้ง
ในขณะที่]c
กระโดดไปยังจุดต่างถัดไปภายใน vimdiff มันจะไม่ขัดแย้งกับการรวม
เพื่อช่วยในเรื่องนี้ฉันมีใน~/.vimrc
:
# Git Merge conflict
nnoremap <leader>gm /\v^\<\<\<\<\<\<\< \|\=\=\=\=\=\=\=$\|\>\>\>\>\>\>\> /<cr>
ซึ่งพบข้อขัดแย้งโดยตรง
ger imerge
บางทีตัวเลือกที่ดีที่สุดคือเพียงแค่ยอมแพ้ในการใช้ vimdiff และพึ่งพา vim + git imergeซึ่งถูกกล่าวถึงที่: ฉันจะทราบได้อย่างไรว่า Git ที่ก่อให้เกิดความขัดแย้งกันอย่างไร เนื่องจากช่วงการเรียนรู้ของ vimdiff นั้นน่ารำคาญและมันไม่ได้ทำหน้าที่ที่เราต้องการมากที่สุด