Najlepsze narzędzie do łączenia, które zastępuje vimdiff
To trochę żartobliwy żart, ale właśnie do tego doszedłem jako vimmer po wypróbowaniu vimdiff.
Aby rozwiązać konflikt scalania, prawie zawsze potrzebuję zobaczyć:
- ZDALNY
- LOKALNY
- dwie różnice:
- diff BASE REMOTE
- diff BASE LOCAL
a następnie spróbować połączyć je razem.
Podczas gdy vimdiff pokazuje BASE, LOCAL i REMOTE na ekranie:
+--------------------------------+
| LOCAL | BASE | REMOTE |
+--------------------------------+
| MERGED |
+--------------------------------+
Nie wiem, jak sprawić, by wyraźnie pokazywał te dwa różnice, których potrzebuję poza tym, patrząc kilka razy w prawo, lewo, prawo, lewo.
Co więcej, LOKALNE i ZDALNE są już widoczne w znacznikach konfliktów git merge, więc nie zyskuję zbyt wiele na narzędziu, które je ponownie pokazuje.
Dlatego zamiast tego stworzyłem własne małe "difftool", które faktycznie pokazuje różnice, których mi brakowało:
~ / bin / cirosantilli-connectetool
#!/usr/bin/env bash
BASE="$1"
LOCAL="$2"
REMOTE="$3"
diff --color -u "$BASE" "$LOCAL"
diff --color -u "$BASE" "$REMOTE"
exit 1
GitHub upstream .
I zainstaluj go za pomocą:
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'
Teraz, kiedy to zrobisz:
git mergetool -t cirosantilli-mergetool
pokazuje dwa różnice, które chcę na terminalu, np. coś razem:
--- ./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
Możesz więc zobaczyć tutaj dwa różnice wrzucone do terminala:
RealView_BASE_15560.py
vs RealView_LOCAL_15560.py
RealView_BASE_15560.py
vs RealView_REMOTE_15560.py
Jeśli różnice są duże, po prostu wyszukam moje supermoce tmux .
Tak, tracisz pewne skróty, które zapewnia vimdiff, ale ogólnie rozwiązywanie konfliktów wymaga starannego kopiowania wklejania z obu wersji, co mogę zrobić dobrze w normalnej sesji vim z markerami konfliktów git.
Obserwowanie i porównywanie plików podczas vimdiff
działania
Zanim usiadłem i zautomatyzowałem moją idealną konfigurację cirosantilli-mergetool
, właśnie to robiłem, aby uzyskać dwa różnice, których potrzebowałem.
Podczas git mergetool
działania vimdiff
, jeśli wystąpi konflikt w pliku o nazwie, powiedzmy main.py
, git generuje pliki dla każdej z wersji, nazwane jako:
main_BASE_1367.py
main_LOCAL_1367.py
main_REMOTE_1367.py
w tym samym katalogu, w main.py
którym 1367
znajduje się identyfikator PID git connectetool, a zatem „losowa” liczba całkowita, jak wspomniano w: W przypadku konfliktu git merge, jakie są generowane pliki BACKUP, BASE, LOCAL i REMOTE?
Aby zobaczyć różnice, które chcę, najpierw znajduję wygenerowane pliki git status
, a następnie otwieram nowe terminale i robię vimdiff między parami plików, na których mi zależy:
vim -d main_BASE_1367.py main_LOCAL_1367.py
vim -d main_BASE_1367.py main_REMOTE_1367.py
Razem z git mergetool
tymi informacjami pomaga WIELU szybko dowiedzieć się, co się dzieje!
Ponadto, nawet gdy uruchomiony jest program Mergetool, możesz po prostu otworzyć plik:
vim main.py
bezpośrednio i edytuj go tam, jeśli uważasz, że będzie to łatwiejsze z większym oknem edytora.
Przejdź bezpośrednio, aby scalić konflikty
Podczas ]c
przeskakiwania do następnego punktu diff wewnątrz vimdiff, nie zawsze występuje tam konflikt scalania.
Aby w tym pomóc, mam w swoim ~/.vimrc
:
# Git Merge conflict
nnoremap <leader>gm /\v^\<\<\<\<\<\<\< \|\=\=\=\=\=\=\=$\|\>\>\>\>\>\>\> /<cr>
która bezpośrednio wyszukuje konflikty.
git imerge
Może najlepszą opcją jest po prostu zrezygnowanie z używania vimdiff i poleganie na zwykłym vim + git imerge, o którym wspomniano w: Jak mogę się dowiedzieć, które zmiany Git powodują konflikty? ponieważ krzywa uczenia się vimdiff jest denerwująca i nie wykonuje funkcji, których potrzebujemy najbardziej.