Warum öffnet Git Mergetool 4 Fenster in Vimdiff?(Ich würde 3 erwarten)
Frage
Als ich auf einen Konflikt stieß, versuchte ich ihn zu nutzen git-mergetool
um es zu lösen.Ich tippte:
>git mergetool -t vimdiff
Es öffnete vimdiff
in 4-Wege, nicht in 3-Wege.Meine geteilten Fenster in vimdiff sehen so aus:
:ls
1 #a "Gemfile.lock" line 1
2 %a "Gemfile.lock.LOCAL.4828.lock" line 1
3 a "Gemfile.lock.BASE.4828.lock" line 0
4 a "Gemfile.lock.REMOTE.4828.lock" line 0
Was sind Sie?Ich möchte einen 3-Wege-Diff:Zieldatei, Zusammenführungsdatei und Arbeitsdatei.Wie soll ich mein Git oder Vimdiff konfigurieren?
Lösung
Haben Sie als Alternative über die Verwendung nachgedacht Flüchtling?
Ich werde dich nicht anlügen. Fugitive.VIM kann sehr gut der beste Git -Wrapper aller Zeiten sein.
Es gibt einen ausgezeichneten Vimcast, Flüchtling.VIM - Lösung von Zusammenführungskonflikten mit Vimdiff, von Drew Neil. Dies ist Teil einer Serie über Flüchtling.
Das Vimcasts Die Website ist ein guter Ort, um mehr über Vim zu erfahren.
Um Fugitive zu verwenden, können Sie Folgendes verwenden.
git config --global mergetool.fugitive.cmd 'vim -f -c "Gdiff" "$MERGED"'
git config --global merge.tool fugitive
Hinweis: Möglicherweise möchten Sie sich ändern vim
zu mvim
oder gvim
.
Fugitive hat viel mehr zu bieten, als nur ein Merge -Tool -Skript zu sein. Stellen Sie also sicher, dass Sie die Dokumentation lesen und/oder die Vimcasts lesen.
Andere Tipps
Nach vielen Nachforschungen über die Ausgabe von Mergetool mit Vimdiff und nur 3 Fenstern habe ich diese Konfiguration entwickelt, mit der ich mich entscheiden kann, wenn ich 3 Fenster oder die Standardfenster 4 Windows möchte:
git config --global merge.tool vimdiff
git config --global alias.mt mergetool
git config --global mergetool.merge3.cmd 'vim -d -c "wincmd l" "$LOCAL" "$MERGED" "$REMOTE"'
git config --global alias.m3 'mergetool -t merge3'
Jetzt können Sie 3 Windows starten, die nur eingeben:
git m3
Und die Standardeinstellung (4 Windows) funktioniert weiterhin wie erwartet mit:
git mt
Außerdem möchten Sie diese Zeilen wahrscheinlich dem Ende Ihres Fügens hinzufügen ~/.vimrc
oder /etc/vim/vimrc
" shortcuts to vimdiff
let mapleader=','
let g:mapleader=','
if &diff
map <leader>1 :diffget LOCAL<CR>
map <leader>2 :diffget BASE<CR>
map <leader>3 :diffget REMOTE<CR>
endif
Dies erzeugt Verknüpfungen wie ,1
von links greifen, ,3
von rechts (in beiden Modi) und auch von rechts zu greifen und auch ,2
So greifen Sie aus der Basis (Mittelfenster) im 4 -Windows -Modus.
Das hilft sehr!
Mein ~/.gitconfig
Datei sieht so aus:
[user]
name = Dr Beco
email = my@email
[merge]
tool = vimdiff
[mergetool "merge3"]
cmd = vim -d -c \"wincmd l\" \"$LOCAL\" \"$MERGED\" \"$REMOTE\"
[alias]
lo = log --pretty=format:\"%h %ce %cd %s\" --graph
co = checkout
ci = commit
cm = commit -a -m
st = status
br = branch
m3 = mergetool -t merge3
mt = mergetool
[diff]
tool = vimdiff
Ich hoffe, das hilft dir (und denen, die hierher kommen).
Ändern ein wenig die Befehle von diese Seite:
git config --global mergetool.vimdiff3.cmd 'vim -f -d "$LOCAL" "$MERGED" "$REMOTE"'
git config --global merge.tool vimdiff3
- "Fusions" wäre Ihr Arbeitskopie.
- "Lokal" Die Datei, die sich in der Filiale befindet, versuchen Sie, die Änderungen vorzunehmen
- 'Remote' die Datei aus der Filiale, mit der Sie sich zusammenschließen möchten.
Und dann führen Sie den Befehl aus: git mergetool
.
Notiz: Ich benutze Flüchtling Auch und sehr empfehlen es.
Notiz:Sie können jedoch nur 3 Windows verwenden, wie in beschrieben Dr. Beco'S Antwort
(vim -d -c "wincmd l" "$LOCAL" "$MERGED" "$REMOTE"'
),
Der 4-Fenster-Modus wurde mit Git 2.8 erweitert (März 2016)
Sehen Commit 2300328 (29. Januar 2016) von Dickson Wong (diwo
).
(Zusammengeführt von Junio C Hamano -- gitster
-- In Commit 82c17b7, 17. Februar 2016)
Der
vimdiff
Backend für „git mergetool
" wurde optimiert, um und Nummernpuffer in der Reihenfolge, die der Erwartung von Mehrheit der Menschen, die von links nach rechts lesen, dann von oben nach unten Puffer 1 2 3 4 "mental" zur lokalen Basis Remote-Merge-Fenster basierend in diesem Auftrag.
Intern verwendet Git jetzt:
"$merge_tool_path" -f -d -c '4wincmd w | wincmd J' \
"$LOCAL" "$BASE" "$REMOTE" "$MERGED"
anstatt:
"$merge_tool_path" -f -d -c 'wincmd J' \
"$MERGED" "$LOCAL" "$BASE" "$REMOTE"
mergetool
:Vim/Gvim-Puffer in Drei-Wege-Diffs neu anordnenBeim Aufruf von default (g)
vimdiff
Drei-Wege-Zusammenführung wird die zusammengeführte Datei als erster Puffer geladen, aber als viertes Fenster nach unten verschoben.
Dies führt zu einer Trennung zwischenvim
Befehle, die auf das Fenster angewendet werden Positionen (z. STRG-W_w) und solche, die mit dem Pufferindex arbeiten (z. B. Tun/dp).Durch diese Änderung werden die Puffer neu angeordnet, sodass sie den gleichen Index wie Fenster haben, während Der Cursor wird standardmäßig auf das zusammengeführte Ergebnis als unteres Fenster gesetzt.
Ich werde die Flüchtlingsempfehlung zweiten.
Sie könnten auch ausprobieren Splice.vim. Es ist ein VIM-Plugin, das als Git- oder Mercurial Mergetool-Drop-In-Austausch fungiert. Es ermöglicht Ihnen, verschiedene Ansichten des Konflikts leicht zu mischen. Es ist auch sehr schnell, unkompliziert und leistet gute Arbeit darin, intuitiver zu verschmelzen. Hier ist ein Screencast.
Die von Ihnen aufgeführten Dateien sind:
- Die lokale Datei mit dem Konflikt.
- Die Datei in der Filiale, in die Sie zusammenarbeiten.
- Die Datei in der Filiale, aus der Sie verschmelzen.
- Die Datei wie im Zweig -Ancesestor -Knoten. Diese Datei ist sehr nützlich, um herauszufinden, was los ist!
Hoffe das hilft.