Welche Version der Git-Datei wird letztendlich verwendet: LOCAL, BASE oder REMOTE?

Lesezeit: 3 Minuten

Welche Version der Git Datei wird letztendlich verwendet LOCAL BASE oder
Tsusanka

Wenn es währenddessen zu einer Kollision kommt git mergeöffne ich ein Mergetool namens Verschmelzen. Es öffnet drei Dateien LOCAL, BASE und REMOTE. Wie ich gelesen habe, ist LOCAL mein lokaler Zweig, BASE ist ein gemeinsamer Vorfahre und REMOTE ist der Zweig, der zusammengeführt werden soll.

Nun zu meiner Frage: welche Version der Datei wird letztendlich verwendet? Ist es REMOTE? Wenn ja, kann ich es beliebig bearbeiten, unabhängig davon, was sich beispielsweise im BASE-Zweig befindet?

Welche Version der Git Datei wird letztendlich verwendet LOCAL BASE oder
Fabien Quatravaux

Es ist der in der Mitte: BASE.

In der Tat, BASE ist nicht der gemeinsame Vorfahre, sondern die halbfertige Zusammenführung, bei der Konflikte mit gekennzeichnet sind >>>> und <<<<.

Sie können die Dateinamen oben im Meld-Bearbeitungsfenster sehen.

Siehe Screenshot hier

Basis verschmelzen

Sie können die bearbeiten BASE Datei nach Belieben mit oder ohne meld-Befehle.
Sie können meld auch loswerden und die Datei einfach mit Ihrem bevorzugten Texteditor bearbeiten.

  • Der Code dazwischen <<<< HEAD und ===== markers ist die Ihrer lokalen Datei vor dem Zusammenführen.
  • Der Code dazwischen ==== und >>>> <branch name> ist die der Remote-Datei.

  • Einige Leute verstehen besser die widersprüchlichen Chunks in einer Datei, deren automatisches Zusammenführen fehlgeschlagen ist, wenn sie die haben merge.conflictstyle Konfigurationsoption auf eingestellt diff3 statt der Vorgabe merge.

    – Kostix

    21. Juni 2012 um 22:48 Uhr

  • Ich sehe tatsächlich nicht den HEAD, <<< und === singt. In dem von Ihnen angegebenen Fall wäre das mittlere Fenster leer. Aber das ist nur eine Anmerkung für die anderen, thx für deine Antwort.

    – Tsusanka

    22. Juni 2012 um 14:39 Uhr

  • Wenn Sie die nicht sehen HEAD, <<<<< und ===== Zeichen, bedeutet dies, dass es überhaupt keinen Konflikt gibt. In diesem Fall ist das mittlere Fenster nicht leer, es zeigt das Zusammenführungsergebnis, aber es gibt keinen “roten” Teil

    – Fabien Quatravaux

    23. Juni 2012 um 17:03 Uhr

  • Wenn ich Merges mit Meld mache, sehe ich keine <<<<<<, ====== Noch >>>>>> Markierungen im mittleren Bereich (dh die BASE-Version) entweder; und manchmal ist der mittlere Bereich leer, wie aGr berichtete. Vielleicht liegt dieser Unterschied an unterschiedlichen Einstellungen. Wenn ich das Meld-Tool starte, werden die folgenden Dateien vorhanden sein, vorausgesetzt, dass der Name der Datei im Repository lautet X.java: X.java, X.java.orig, X.java.BACKUP.#, X.java.BASE.#, X.java.LOCAL.#, X.java.REMOTE.#wo # ist eine Zahl. Das Aufrufen des Zusammenführungsergebnisses der BASE-Version ist verwirrend; MERGED wäre besser.

    – Teemu Leisti

    24. September 2012 um 15:03 Uhr


  • BASE ist in der Tat der gemeinsame Vorfahre, MERGED ist der Name der Datei mit den darin enthaltenen Teilzusammenführungsinformationen. Bitte lesen Sie meine Frage und Antwort zum Einrichten und Verwenden von Meld als Ihr Git-Difftool und Mergetool, die genau erklärt, wie es funktioniert. HTH.

    – mattst

    6. Dezember 2015 um 20:51 Uhr


1646246892 424 Welche Version der Git Datei wird letztendlich verwendet LOCAL BASE oder
Tomek Bury

Meld hat eine versteckte 3-Wege-Merge-Funktion aktiviert durch Übergabe des 4. Parameters:

meld $LOCAL $BASE $REMOTE $MERGED

Der rechte und der linke Bereich werden im schreibgeschützten Modus geöffnet, sodass Sie nicht versehentlich falsch herum zusammenführen können. Der mittlere Bereich zeigt das Ergebnis der Zusammenführung. Für die Konflikte zeigt es die Basisversion, sodass Sie alle wichtigen Teile sehen können: Originaltext in der Mitte und widersprüchliche Änderungen auf beiden Seiten. Wenn Sie schließlich auf die Schaltfläche “Speichern” klicken, wird die $MERGED-Datei geschrieben – genau wie von Git erwartet.

Die von mir verwendete Datei ~/.gitconfig enthält die folgenden Einstellungen:

[merge]
tool = mymeld
conflictstyle = diff3
[mergetool "mymeld"]
cmd = meld --diff $BASE $LOCAL --diff $BASE $REMOTE --diff $LOCAL $BASE $REMOTE $MERGED

Dadurch wird meld mit 3 Registerkarten geöffnet, die erste und zweite Registerkarte, die die einfachen Diffs enthalten, die ich zusammenzuführen versuche, und die dritte Registerkarte, die standardmäßig geöffnet ist, zeigt die 3-Wege-Zusammenführungsansicht.

Nun, der Grund, warum das Feature versteckt ist, ist, dass es noch nicht ausgefeilt genug ist. Es ist sehr nützlich, so wie es jetzt ist, aber Kai Willadsen, der Autor der Meldung, wies auf einige Falten hin, die ausgebügelt werden müssten. Zum Beispiel gibt es keine GUI, um den 3-Wege-Zusammenführungsmodus zu starten, die Befehlszeilensyntax ist etwas geheimnisvoll und so weiter. Wenn Sie Python sprechen und etwas Zeit haben, wissen Sie, was zu tun ist.

Bearbeiten: In neueren Versionen von Meld hat sich die Synax leicht geändert. Dies war in den Kommentaren, aber es gehört in die Antwort.

Der meld-Befehl verwendet jetzt die Option –output, also sollte die letzte Zeile aus dem obigen Snippet lauten:

cmd = meld --diff $BASE $LOCAL --diff $BASE $REMOTE --diff $LOCAL $BASE $REMOTE --output $MERGED

  • @Jesse, @lumbric, es scheint, dass neuere Versionen von meld das Flag verwenden --output für das $MERGED-Ergebnis. Ich habe dies entdeckt, als ich mir das Meld-Startskript angesehen habe, das mit meiner Version von Git geliefert wurde: github.com/git/git/blob/master/mergetools/meld

    – Johannes

    11. Februar 2014 um 22:46 Uhr

  • @lumbric Ich glaube schon, für Meld 1.7.x+ mit dem --output option. Siehe diese Zeile im Startskript: "$merge_tool_path" --output "$MERGED" "$LOCAL" "$BASE" "$REMOTE"

    – Johannes

    7. April 2014 um 16:03 Uhr


  • In der neuesten Meldung (Version > 1.8.4) müssen wir die Option –auto-merge verwenden. cmd = meld –diff $BASE $LOCAL –diff $BASE $REMOTE –auto-merge $LOCAL $BASE $REMOTE –output $MERGED

    – RoboAlex

    24. Oktober 2014 um 21:30 Uhr


  • Ich hatte das gleiche Problem wie @pingpongboss mit Meld 1.8.4: Meld öffnete Dinge in einem separaten Bereich, anstatt den dritten Tab zu öffnen. Der Befehl, der endlich funktioniert hat, lautet: cmd = meld $LOCAL $BASE $REMOTE --auto-merge --output $MERGED. Dies öffnet also 3 Registerkarten (gute alte Methode), führt automatisch nicht widersprüchliche Zusammenführungen in der Mitte zusammen, wobei die Mitte $MERGED ist, und wird als Ausgabe zur Konfliktlösung verwendet.

    – Bauer

    25. September 2015 um 18:29 Uhr


  • Die Syntax für die Ausgabe kann sein --output=<file> oder -o <file>sehen meld --help

    – Lewsa

    11. November 2015 um 10:54 Uhr

1646246892 30 Welche Version der Git Datei wird letztendlich verwendet LOCAL BASE oder
Benutzer1284631

Es sind 4 Dateien beteiligt:

  1. $LOCAL Die Datei in dem Zweig, in dem Sie zusammenführen; vom Zusammenführungsprozess unberührt bleiben, wenn sie Ihnen angezeigt werden

  2. $REMOTE Die Datei auf dem Zweig, von dem aus Sie zusammenführen; vom Zusammenführungsprozess unberührt bleiben, wenn sie Ihnen angezeigt werden

  3. $BASE Der gemeinsame Vorfahre von $LOCAL und $REMOTE, dh. der Punkt, an dem die beiden Zweige begonnen haben, die betreffende Datei umzuleiten; vom Zusammenführungsprozess unberührt bleiben, wenn sie Ihnen angezeigt werden

  4. $MERGED Die teilweise zusammengeführte Datei mit Konflikten; Dies ist die einzige Datei, die vom Zusammenführungsprozess berührt und Ihnen tatsächlich nie angezeigt wird meld


Die $MERGED Datei ist diejenige, die die enthält <<<<<<, >>>>>>, ===== (und vielleicht, ||||||) Markierungen (die Konflikte begrenzen). Dies ist die Datei, die Sie bearbeiten manuell Konflikte zu korrigieren.

Die manuelle Konfliktbearbeitung und die visuelle Konfliktbearbeitung werden an unterschiedlichen Dateien durchgeführt und mit unterschiedlichen Informationen dargestellt.

Bei Verwendung des Mergetools (angenommen meld), die Dateien, die darin zu sehen sind: $LOCAL, $BASE, $REMOTE. Beachten Sie, dass Sie die nicht sehen $MERGED Datei, obwohl dies als versteckter Parameter an übergeben wird meld um dort das Ergebnis der Bearbeitung zu schreiben.

Mit anderen Worten, im meldSie bearbeiten die Datei in der Mitte, die $BASE Datei, und Sie wählen alle Änderungen von links oder von rechts aus manuell. Es ist eine saubere Datei, die vom Zusammenführungsprozess nicht berührt wird. Der einzige Fehler ist, dass Sie beim Speichern nicht in speichern $BASE Datei, aber im vierten versteckten Parameter von melddas ist die $MERGED Datei (die Sie nicht einmal sehen). Die $BASE Datei tut nicht enthalten keine Konflikte oder teilweise erfolgreiche Zusammenführungen, weil es ist nicht die $MERGED Datei.

In der visuellen Bearbeitung, wenn Sie Ihnen die präsentieren $BASE Datei (statt der $MERGED Datei) git verwirft im Grunde alle seine Versuche, das Zusammenführen durchzuführen (diese Versuche sind sichtbar, wenn Sie wollen, in der $MERGED-Datei) und lässt Sie es tun vollständig die Zusammenführung durchführen von Grund auf neu.

Die Quintessenz ist, dass Sie bei manuellen und visuellen Zusammenführungskonflikten nicht dieselben Dateien betrachten, sondern das Endergebnis in dieselbe Datei geschrieben wird (d. h. die $MERGED Datei).

Die manuelle Korrektur der Konflikte erfolgt weiter $MERGED da git hat keine mittel um Ihnen drei Dateien zu präsentieren, also komprimiert es die Informationen aus den drei Dateien ($LOCAL, $BASE, $REMOTE) darin $MERGED Datei.

Aber die visuellen Werkzeuge die Mittel haben um Ihnen drei Dateien zu zeigen: Sie zeigen Ihnen die $LOCAL, $BASE, $REMOTE Dateien. Sie wählen Änderungen aus der aus $LOCAL und $REMOTE Dateien und Sie bringen diese in die $BASE Datei, komplett neu erstellen und sogar den gescheiterten Versuch des Zusammenführens überschreiben, das ist die $MERGED Datei.

  • Ich wollte nur, dass es Tools gibt (z. B. unvergleichlich), die alle 4 Dateien anzeigen

    – yoniLavi

    30. Dezember 2013 um 15:14 Uhr

  • @yoniYalovitsky: ja, oder p4merge

    – Benutzer1284631

    31. Dezember 2013 um 7:42 Uhr

  • Früher habe ich das Merge-Tool aus dem ClearCase-Paket verwendet

    – Mischmaschru

    20. März 2015 um 20:28 Uhr

  • @yoniLavi – nun, diese Tools zeigen 4 Scheiben, aber nicht unbedingt alle vier Dateien, wie in dieser Antwort beschrieben. Insbesondere können Sie diese 4-Fenster-Tools so einrichten, dass sie Ihnen angezeigt werden $LOCAL, $REMOTE, $BASE und die Ausgabe zunächst gleich $BASEwas sich aber von unterscheidet $MERGED darin, dass es nicht den Versuch von git hat, die Dateien und die Konfliktmarkierungen und so weiter zusammenzuführen. Tatsächlich wäre dies die Art und Weise, diese Tools zu verwenden, die dem 3-Fenster-Ansatz von LOCAL/REMOTE/BASE+OUTPUT am ähnlichsten ist, der nicht zusammengeführt angezeigt wird. Im vierten Bereich können Sie nur die Basis von der Ausgabe trennen.

    – BeeOnRope

    16. August 2018 um 1:02 Uhr


Cosmins Lösung funktioniert, aber die $BASIS Datei wird aktualisiert – nicht $MERGED. Dadurch wird die aktualisiert $MERGED Datei:

Melden: v1.8.4

[merge]
  conflictstyle = diff3
  tool = mymeld
[mergetool "mymeld"]
  cmd = meld --auto-merge --output $MERGED $LOCAL $BASE $REMOTE --diff $BASE $LOCAL --diff $BASE $REMOTE

1646246893 126 Welche Version der Git Datei wird letztendlich verwendet LOCAL BASE oder
lumbrisch

Mit Melden 1.7 die Lösung von Tomek Bury funktioniert nicht mehr.

Die Standardeinstellungen hat mich nicht überzeugt:

Standardeinstellungen

Anstatt von Verschmelzen >=1,7 Ich schlage eine von zwei anderen Lösungen vor.

Erste Lösung:

 meld $LOCAL $BASE $REMOTE --auto-merge

erste Lösung

Zweite Lösung:

 meld $LOCAL $MERGED $REMOTE

zweite Lösung

.gitconfig

Kopieren Sie dies und fügen Sie es in Ihre ein .gitconfig Datei, um die Lösungen wie oben beschrieben zu erhalten:

[merge]
    tool = meld16
[mergetool "meld17"]
    # use this for Meld >=1.7
    # see http://stackoverflow.com/a/22911793/859591
    # second solution:
    cmd = meld $LOCAL $MERGED $REMOTE
    # first solution:
    #cmd = meld $LOCAL $BASE $REMOTE --auto-merge
[mergetool "meld16"]
    cmd = meld --diff $BASE $LOCAL --diff $BASE $REMOTE --diff $LOCAL $BASE $REMOTE --output $MERGED

[include]
    # requires git v1.7.10+
    path = .gitconfig.local

Kopieren Sie dies und fügen Sie es in a ein .gitconfig.local Datei, um meld17 oder meld16 nur für diesen Computer festzulegen, falls Sie Ihre .gitconfig auf mehreren Computern verwenden:

# This is a host specific config file!
# Note that git 1.7.10+ is needed
# http://stackoverflow.com/a/9733277/859591
[merge]
    tool = meld17

  • Dies funktioniert nicht auf Meld 1.8.4. Wenn du läufst cmd = meld $LOCAL $BASE $REMOTE --auto-mergeist der mittlere Bereich $BASE und nicht $MERGE, der tatsächlich als Ausgabe der Konfliktlösung verwendet wird.

    – Bauer

    25. September 2015 um 18:34 Uhr

  • @farmir Sie haben $BASE als zweite Registerkarte ausgewählt.

    – Alex78191

    6. Mai 2017 um 7:43 Uhr


1646246895 630 Welche Version der Git Datei wird letztendlich verwendet LOCAL BASE oder
Thomas Leonhard

Ich habe festgestellt, dass keine der angezeigten Standarddateien gespeichert wurde. meld wurde angezeigt $LOCAL, $REMOTE und $BASE standardmäßig. Damit es funktionierte, musste ich eine Meldeshow erstellen $MERGED anstatt $BASE. Setzen Sie dies in meine ~/.gitconfig hat es bei mir behoben:

[merge]
        tool = mymeld
[mergetool "mymeld"]
        cmd = meld "$LOCAL" "$MERGED" "$REMOTE"

Ich verwende Arch mit:

$ git --version
git version 1.8.2
$ meld --version
meld 1.7.1

  • Dies funktioniert nicht auf Meld 1.8.4. Wenn du läufst cmd = meld $LOCAL $BASE $REMOTE --auto-mergeist der mittlere Bereich $BASE und nicht $MERGE, der tatsächlich als Ausgabe der Konfliktlösung verwendet wird.

    – Bauer

    25. September 2015 um 18:34 Uhr

  • @farmir Sie haben $BASE als zweite Registerkarte ausgewählt.

    – Alex78191

    6. Mai 2017 um 7:43 Uhr


1646246895 846 Welche Version der Git Datei wird letztendlich verwendet LOCAL BASE oder
wnasich

Aus irgendeinem Grund zeigen die neuesten Versionen von meld keine Markierungslinien an, die für Konflikte hinzugefügt wurden (<<<<<<<, =======, >>>>>>>) . Wenn Sie diese Zeilen sehen möchten, sollten Sie meld v 1.3.3 oder früher installieren.

  • Ich fand die Antwort von @lumbric stackoverflow.com/a/22911793/641892 nützlich

    – wnasich

    27. Juli 2017 um 15:37 Uhr


915050cookie-checkWelche Version der Git-Datei wird letztendlich verwendet: LOCAL, BASE oder REMOTE?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy