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?

War es hilfreich?

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 anordnen

Beim 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 zwischen vim 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:

  1. Die lokale Datei mit dem Konflikt.
  2. Die Datei in der Filiale, in die Sie zusammenarbeiten.
  3. Die Datei in der Filiale, aus der Sie verschmelzen.
  4. Die Datei wie im Zweig -Ancesestor -Knoten. Diese Datei ist sehr nützlich, um herauszufinden, was los ist!

Hoffe das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top