vimdiff und verschmelzen Konflikte

14

Beim Zusammenführen von Zweigen unter Quellcodeverwaltung tritt häufig ein Zusammenführungskonflikt mit anderen Entwicklern auf.

Ich weiß, dass wir vimdiff verwenden können, um Codeänderungen mit der Quellcodeverwaltung zu vergleichen , aber es gibt auch eine Möglichkeit, mit vimdiff Zusammenführungskonflikte zu lösen.

Persönlich interessiere ich mich mehr für Git, aber es wäre nützlich zu verstehen, ob es Plugins / Techniken für andere Tools / Systeme zur Quellcodeverwaltung gibt.

Martin York
quelle
Hast du Meld jemals ausprobiert?
Eric Sabelhaus
1
@EricSabelhaus: Ist es besser als vimdiff, Konflikte zu lösen? Auf dieser Seite geht es darum, Fragen zu vim zu stellen / zu beantworten.
Martin York,
Es kommt auf den Anwendungsfall an. Wenn ich an Code arbeite, der aus der Ferne ausgeführt wird, verwende ich mit Sicherheit vimdiff. Wenn ich lokal auf meinem Entwicklungscomputer arbeite, verwende ich Meld, da es eine funktionsreiche Benutzeroberfläche bietet, die dem Entwickler bei der Durchführung komplexer 3-Wege-Zusammenführungen hilft.
Eric Sabelhaus
1
@EricSabelhaus: Für mich ist der Begriff feature rich UIirreführend; vimdiff hat möglicherweise keine schöne Benutzeroberfläche, es ist definitiv funktionsreich. Ich finde auch vim eine viel produktivere Umgebung, als alle GUI-Editoren, die ich verwendet habe (aber ich habe es für eine lange Zeit verwendet und es war eine steile Lernkurve). Ich bin eher neugierig, ob Meld irgendetwas tut, was vim nicht tut, und es sich lohnt, es sich einmal anzuschauen.
Martin York
Ich kann nicht speziell sagen, ob es eine robustere Ausstattung hat, aber es ist definitiv im gleichen Bereich wie Vimdiff.
Eric Sabelhaus

Antworten:

18

Normalerweise benutze ich git in der Kommandozeile.

Aber wenn es einen Zusammenführungskonflikt gibt, benutze ich Vim, um sie zu lösen (persönlich mache ich das mit dem flüchtigen Plugin). Hinweis: Flüchtig ist gut für viele Git-Manipulationen in Vim. Mein Lieblingsfeature ist der 3-Wege-Unterschied eines Zusammenführungskonflikts.

git unterstützt dies in vimdiff über git mergetool. Ich habe fugitive installiert, aber Sie können es manuell einrichten (Dank an Jay Thompson).

Manuelle Einrichtung:

git config --global merge.tool vimdiff
git mergetool <file with conflicts>

Die Ausgabe unterscheidet sich geringfügig von der unten beschriebenen (ich habe dies nicht persönlich verwendet). Das Prinzip ist jedoch dasselbe, aber Sie haben unten ein viertes Fenster mit dem Ergebnis.

Bildbeschreibung hier eingeben

Mit Fugitive einrichten

vim-fugitive ist ein Git-Wrapper / Integrations-Plugin für Vim; Es kann viele Dinge bewirken, und die Lösung von Konflikten ist eine davon.

<Install the Fugitive Plugin>
vim <file with conflicts>
:Gdiff
  1. Ansicht 2 (links): Der Code, der sich in Ihrer Filiale befand.
  2. Ansicht 1 (Mitte): Der zusammengeführte Code (mit Konflikten)
  3. Ansicht 3 (rechts): Der Code, der mit Ihrem Code zusammengeführt wurde.

Sie können jetzt Text aus den beiden anderen Ansichten in die zentrale Ansicht ziehen und abrufen (die alle manuellen Korrekturen enthalten wird). Wenn Sie alle Konflikte manuell gelöst haben, beenden Sie einfach vimdiff

Bildbeschreibung hier eingeben

Sie können jedoch :diffget <view number>und verwenden :diffput <view number>, um Dinge zwischen Ansichten zu ziehen und zu verschieben. Ich persönlich finde das nicht sehr nützlich. Der gesamte Code befindet sich bereits in der mittleren Ansicht. Daher bearbeite ich diese Ansicht einfach gerne manuell, bis der Konflikt behoben ist. Es ist jedoch äußerst nützlich, beide Versionen des Codes auf beiden Seiten meines Editorfensters anzeigen zu können.

Auch eine sehr gute Demo seiner Verwendung hier

Martin York
quelle
1
Wenn Sie Fugitive aus irgendeinem Grund nicht verwenden oder installieren möchten, können Sie es auch einfach einstellen git config --global merge.tool vimdiffund dann ausführen git mergetool, um vim im Diff-Modus zu starten.
Jay Thompson
Unterstützt dies den "diff3" -Stil von Zusammenführungskonflikten, in dem die "zusammengeführten gemeinsamen Vorfahren" angezeigt werden?
Alxndr
@alxndr: Ich hatte noch nie von diff3 gehört. Aber nach einer kurzen google. Die Ausgabe eines Zusammenführungskonflikts in git (und einer anderen von mir verwendeten Quellcodeverwaltung) ist dieselbe wie in a diff3 -E. Die obigen Bilder werden also aus Dateien generiert, in denen diese Markierungen enthalten sind.
Martin York,
Nun, da ich genau hinschaue, zeigt der erste Screenshot den diff3-Stil der Zusammenführung. Das mittlere obere Fenster "BASE" ist der gemeinsame Vorfahr, von dem das linke und das rechte Fenster abweichen.
Alxndr
1
Es ist wichtig, sich daran zu erinnern, dass jede dieser 4 Ansichten nur ein Puffer ist. Dies bedeutet, dass Sie eine andere Registerkarte öffnen (oder sogar im selben Fenster bleiben) und nur die Puffer auswählen können, die Sie zu einem bestimmten Zeitpunkt anzeigen möchten. Es gibt keinen Grund, alle 4 Fenster gleichzeitig geöffnet zu lassen, wenn Sie nicht alle verwenden.
Cody Poll