Окончательный mergetool, чтобы заменить vimdiff
Это что-то вроде насмешки, но это то, к чему я в конечном итоге присоединился как к vimmer после попытки vimdiff.
Чтобы разрешить конфликт слияния, мне почти всегда нужно видеть:
- УДАЛЕННЫЙ
- МЕСТНЫЙ
- две разницы:
- diff BASE REMOTE
- diff BASE LOCAL
затем попытаться соединить их обоих.
В то время как vimdiff показывает BASE, LOCAL и REMOTE на экране:
+--------------------------------+
| LOCAL | BASE | REMOTE |
+--------------------------------+
| MERGED |
+--------------------------------+
Я не знаю, как сделать так, чтобы это четко показывало те две разницы, которые мне нужны, кроме того, что я смотрел направо, налево, направо, налево, несколько раз.
Более того, LOCAL и REMOTE уже видны в маркерах конфликтов git merge, поэтому я не так уж выиграл от инструмента, который их показывает снова.
Поэтому я вместо этого создал свой собственный крошечный «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
против RealView_LOCAL_15560.py
RealView_BASE_15560.py
против 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 merge, какие файлы 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>
который находит конфликты напрямую.
мерзавец
Возможно, лучшим вариантом будет просто отказаться от использования vimdiff и положиться на обычный vim + git imerge, о котором говорилось в разделе : Как я могу узнать, какие коммиты Git вызывают конфликты? поскольку кривая обучения vimdiff раздражает, и она не выполняет те функции, которые нам нужны больше всего.