Vimdiff'in yerini alacak nihai birleştirme aracı
Bu bir tür yanak dilidir, ama vimdiff'i denedikten sonra bir vimmer olarak dönüştüm.
Birleştirme çatışmasını çözmek için, neredeyse her zaman ihtiyacım olan şey:
- UZAKTAN
- YEREL
- iki fark:
- diff BAZ UZAKTAN
- diff BAZ YEREL
sonra ikisini de bir araya getirmeye çalışın.
Vimdiff ekranda BASE, LOCAL ve REMOTE gösterirken:
+--------------------------------+
| LOCAL | BASE | REMOTE |
+--------------------------------+
| MERGED |
+--------------------------------+
İhtiyaç duyduğum bu iki farkı açıkça göstermeyi bilmiyorum, ayrıca sağ sola sağ sola birkaç kez bakarak.
Ayrıca, LOCAL ve REMOTE zaten git birleştirme çakışma belirteçlerinde görünür, bu yüzden onları tekrar gösteren bir araçtan bu kadar çok kazanamıyorum.
Bu nedenle, aslında eksik olduğumu farkları gösteren kendi küçük "difftool" oluşturdum:
~ / 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 akış yukarı .
Ve şu şekilde yükleyin:
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'
Şimdi, yaptığınız zaman:
git mergetool -t cirosantilli-mergetool
Terminalde istediğim iki farkı gösterir, örn.
--- ./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
Burada terminalin içine atılan iki farkı görebilirsiniz:
RealView_BASE_15560.py
vs RealView_LOCAL_15560.py
RealView_BASE_15560.py
vs RealView_REMOTE_15560.py
Farklar büyükse, sadece tmux süper güçlerimi arayacağım .
Evet, vimdiff'in sağladığı bazı kısayolları kaybedersiniz, ancak genel olarak çakışmaları çözmek, her iki sürümden de dikkatli bir şekilde kopyala yapıştır gerektirir, bu da git çakışma işaretçileriyle normal bir vim oturumunda iyi yapabilirim.
İken Gözlem ve dosyaları diffing vimdiff
çalıştıran
Oturup mükemmel kurulumumu otomatikleştirmeden önce cirosantilli-mergetool
, ihtiyacım olan iki farkı almak için yapıyordum.
İken git mergetool
çalışıyor vimdiff
adlı bir dosya üzerinde bir çelişki varsa, diyelim ki, main.py
, git olarak adlandırılan versiyonları, her biri için dosyaları oluşturur:
main_BASE_1367.py
main_LOCAL_1367.py
main_REMOTE_1367.py
git mergetool'un PID'si ve bu nedenle "rastgele" bir tamsayı main.py
nerede 1367
olduğu ile aynı dizinde : Git birleştirme çakışmasında, oluşturulan BACKUP, BASE, LOCAL ve REMOTE dosyaları nelerdir?
Yani, istediğim diffs görmek için, önce oluşturulan dosyaları bulmak git status
ve sonra yeni terminaller açmak ve umurumda dosyaları çiftleri arasında bir vimdiff yapmak:
vim -d main_BASE_1367.py main_LOCAL_1367.py
vim -d main_BASE_1367.py main_REMOTE_1367.py
Birlikte git mergetool
, bu bilgi bir LOT hızlı bir şekilde neler olduğunu anlamak için yardımcı olur!
Ayrıca, birleştirme aracı çalışırken bile dosyayı açabilirsiniz:
vim main.py
daha büyük bir düzenleyici penceresiyle daha kolay olacağını düşünüyorsanız doğrudan orada düzenleyin.
Çatışmaları birleştirmek için doğrudan atla
Süre ]c
vimdiff içeride sonraki fark noktasına atlar, bir birleştirme ihtilâf söz yoktur.
Bu konuda yardımcı olmak için, benim var ~/.vimrc
:
# Git Merge conflict
nnoremap <leader>gm /\v^\<\<\<\<\<\<\< \|\=\=\=\=\=\=\=$\|\>\>\>\>\>\>\> /<cr>
bu da çatışmaları doğrudan bulur.
git imerge
Belki de en iyi seçenek sadece vimdiff'i kullanmaktan vazgeçmek ve şu adreste belirtilen düzenli vim + git imerge'ye güvenmektir : Hangi Git'in çakışmaya neden olduğunu nasıl öğrenebilirim? çünkü vimdiff'in öğrenme eğrisi can sıkıcıdır ve en çok ihtiyaç duyduğumuz işlevleri yapmaz.