Кінцевий mergetool замінити vimdiff
Це свого роду язик у щоці, але це те, що я, нарешті, сходився як вімер після спроби vimdiff.
Щоб вирішити конфлікт злиття, мені майже завжди потрібно це бачити:
- ВИДАЛЕНО
- МІСЦЕВО
- два відмінності:
- різний ОСНОВНИЙ ПОДАМ
- відмінна ОСНОВНА МІСЦЕ
щоб потім спробувати скласти їх обох.
У той час як vimdiff на екрані відображає ОСНОВНЕ, МІСЬКЕ та ВІДМОВНЕ:
+--------------------------------+
| LOCAL | BASE | REMOTE |
+--------------------------------+
| MERGED |
+--------------------------------+
Я не знаю, як чітко показати ті два розбіжності, які мені потрібні, окрім того, дивлячись праворуч ліворуч ліворуч.
Крім того, LOCAL і REMOTE вже видно в маркерах конфлікту git merge конфлікту, тому я не заробляю стільки з інструменту, який знову їх показує.
Тому я натомість створив власний крихітний "дифтоул", який насправді показує розбіжності, які мені не вистачало:
~ / 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, що створюються файли 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>
яка безпосередньо знаходить конфлікти.
git imerge
Можливо, найкращим варіантом є просто відмовитися від використання vimdiff та покластися на регулярний imerge vim + git, про який згадувалось у: Як я можу дізнатись, які Git чини викликають конфлікти? оскільки крива навчання vimdiff дратує, і вона не виконує потрібні нам функції.