The mergetool utama untuk menggantikan vimdiff
Ini semacam lidah-di-pipi, tetapi akhirnya saya bertemu sebagai seorang vimmer setelah mencoba vimdiff.
Untuk menyelesaikan konflik gabungan, yang hampir selalu saya butuhkan adalah melihat:
- TERPENCIL
- LOKAL
- dua perbedaan:
- beda BASE REMOTE
- berbeda BASE LOCAL
untuk kemudian mencoba menyatukan keduanya.
Sementara vimdiff menampilkan BASE, LOCAL dan REMOTE di layar:
+--------------------------------+
| LOCAL | BASE | REMOTE |
+--------------------------------+
| MERGED |
+--------------------------------+
Saya tidak tahu bagaimana membuatnya dengan jelas menunjukkan dua perbedaan yang saya butuhkan selain dengan melihat ke kiri kanan ke kiri beberapa kali.
Selain itu, LOCAL dan REMOTE sudah terlihat di penanda konflik git merge, jadi saya tidak mendapatkan banyak dari alat yang menunjukkan mereka lagi.
Karena itu, saya malah membuat "difftool" kecil saya sendiri yang sebenarnya menunjukkan diffs yang saya lewatkan:
~ / 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 hulu .
Dan instal dengan:
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'
Sekarang, ketika Anda melakukannya:
git mergetool -t cirosantilli-mergetool
ini menunjukkan dua perbedaan yang saya inginkan di terminal, mis. sesuatu bersama:
--- ./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
Jadi Anda bisa lihat di sini dua diff yang dibuang ke terminal:
RealView_BASE_15560.py
vs. RealView_LOCAL_15560.py
RealView_BASE_15560.py
vs. RealView_REMOTE_15560.py
Jika perbedaannya besar, saya hanya akan mencari dengan kekuatan super tmux saya .
Ya, Anda kehilangan beberapa pintasan yang disediakan vimdiff, tetapi secara umum penyelesaian konflik memerlukan penyalinan yang hati-hati dari kedua versi, yang dapat saya lakukan dengan baik di dalam sesi vim normal dengan spidol git.
Mengamati dan membedakan file saat vimdiff
sedang berjalan
Sebelum saya duduk dan otomatis setup sempurna saya dengan cirosantilli-mergetool
, inilah yang saya lakukan untuk mendapatkan dua perbedaan yang saya butuhkan.
Ketika git mergetool
sedang berjalan vimdiff
, jika ada konflik pada file bernama, katakan main.py
,, git menghasilkan file untuk setiap versi, dinamai sebagai:
main_BASE_1367.py
main_LOCAL_1367.py
main_REMOTE_1367.py
di direktori yang sama seperti main.py
di mana 1367
adalah PID dari mergetool git, dan karena itu "acak" integer, seperti yang disebutkan di: Dalam gabungan konflik git, apa CADANGAN, BASE, LOKAL, dan file REMOTE yang dihasilkan?
Jadi, untuk melihat perbedaan yang saya inginkan, saya pertama-tama menemukan file yang dihasilkan git status
, dan kemudian membuka terminal baru dan melakukan vimdiff antara pasangan file yang saya pedulikan:
vim -d main_BASE_1367.py main_LOCAL_1367.py
vim -d main_BASE_1367.py main_REMOTE_1367.py
Bersama dengan git mergetool
, informasi ini membantu BANYAK untuk mencari tahu apa yang sedang terjadi dengan cepat!
Juga, bahkan ketika mergetool sedang berjalan, Anda bisa membuka file:
vim main.py
langsung dan edit di sana jika Anda merasa akan lebih mudah dengan jendela editor yang lebih besar.
Langsung langsung untuk menggabungkan konflik
Sementara ]c
melompat ke titik diff berikutnya di dalam vimdiff, tidak selalu ada konflik gabungan di sana.
Untuk membantu ini, saya miliki di ~/.vimrc
:
# Git Merge conflict
nnoremap <leader>gm /\v^\<\<\<\<\<\<\< \|\=\=\=\=\=\=\=$\|\>\>\>\>\>\>\> /<cr>
yang menemukan konflik secara langsung.
git imerge
Mungkin pilihan terbaik adalah menyerah menggunakan vimdiff dan mengandalkan vim + git imerge reguler yang disebutkan di: Bagaimana cara mengetahui Git yang melakukan konflik? karena kurva belajar vimdiff mengganggu, dan itu tidak melakukan fungsi yang paling kita butuhkan.