Gitextensions: Fensterbeschriftungen zur Konfliktlösung sind während der normalen Zusammenführung lokal wie ihre und entfernt wie unsere.

Erstellt am 29. Nov. 2011  ·  13Kommentare  ·  Quelle: gitextensions/gitextensions

Beschreibung

Wenn während einer regulären lokalen Zusammenführung ein Konflikt auftritt, werden im Kontextmenü der im Konfliktlösungsfenster aufgelisteten Dateien die folgenden Einträge angezeigt:

Choose local (theirs)
Choose remote (ours)

Nach dem, was ich über Git verstehe, sollte es heißen:

Choose local (ours)
Choose remote (theirs)

Dies kann ziemlich verwirrend sein, da sich die beiden Namen widersprechen.

Wie zu reproduzieren

  1. Starten Sie eine lokale Zusammenführung, die zu einem Zusammenführungskonflikt führt.
  2. Wenn Sie gefragt werden, ob Sie Konflikte lösen möchten, klicken Sie auf "Ja".
  3. Wählen Sie eine Datei aus dem Konfliktfenster und drücken Sie die rechte Maustaste darauf.

    Erwartetes Ergebnis

Es öffnet sich ein Menü, das unter anderem folgende Einträge enthält:

Choose local (ours)
Choose remote (theirs)

Tatsächliche Ergebnis

Es öffnet sich ein Menü, das unter anderem folgende Einträge enthält:

Choose local (theirs)
Choose remote (ours)
bug

Hilfreichster Kommentar

Ich stimme dleinhaeuser zu, diese Namen sind wirklich vage.

Anfänger sind bei der Auswahl der zu wählenden Version immer verwirrt. Ich helfe meinen Freunden mit Git und die meisten fragten mich, welche Wahl in diesem Fenster richtig ist.

Ich bin mir nicht sicher, ob Git einen typischen Workflow hat, da jeder ihn mit seinen eigenen Vorlieben verwendet. Wenn ich beispielsweise einige Tage oder Wochen an einem Themenzweig arbeite, ziehe ich es vor, von Zeit zu Zeit den Master in meinen Themenzweig zusammenzuführen, um das Zusammenführen der Hölle zu verhindern und Konflikte so schnell wie möglich zu lösen. Es hilft dabei, die kompatible, zusammenführbare Codebasis beizubehalten, und ist sehr hilfreich für lange Feature-Zweige.

Meine Vorschläge sind, nur tatsächliche Zweigstellennamen zu schreiben und sich darauf zu verlassen, dass der Benutzer weiß, welcher Zweig tatsächlichen Code enthält.
Zum Beispiel sind "Wählen Sie unseren (Master)" und "Wählen Sie ihren (Feature-Zweig-42)" viel klarere Namen.

Alle 13 Kommentare

GitExtensions ist tatsächlich korrekt. Siehe den Abschnitt zum Zusammenführen in diesem Link: http://stackoverflow.com/questions/3051461/git-rebase-keeping-track-of-local-and-remote

"Unser" ist der aktuelle Zweig, während "Ihr" der Zweig ist, in dem wir zusammenführen. Ein typischer Git-Workflow besteht darin, einen lokalen Themenzweig zu erstellen, ihn festzuschreiben und dann in den "Master" -Zweig zusammenzuführen. Daher wird "ihre" auch als "lokal" und "unsere" als "remote" bezeichnet, da sie normalerweise dem Status des Remote-Repositorys folgt.

Ich stimme dleinhaeuser zu, diese Namen sind wirklich vage.

Anfänger sind bei der Auswahl der zu wählenden Version immer verwirrt. Ich helfe meinen Freunden mit Git und die meisten fragten mich, welche Wahl in diesem Fenster richtig ist.

Ich bin mir nicht sicher, ob Git einen typischen Workflow hat, da jeder ihn mit seinen eigenen Vorlieben verwendet. Wenn ich beispielsweise einige Tage oder Wochen an einem Themenzweig arbeite, ziehe ich es vor, von Zeit zu Zeit den Master in meinen Themenzweig zusammenzuführen, um das Zusammenführen der Hölle zu verhindern und Konflikte so schnell wie möglich zu lösen. Es hilft dabei, die kompatible, zusammenführbare Codebasis beizubehalten, und ist sehr hilfreich für lange Feature-Zweige.

Meine Vorschläge sind, nur tatsächliche Zweigstellennamen zu schreiben und sich darauf zu verlassen, dass der Benutzer weiß, welcher Zweig tatsächlichen Code enthält.
Zum Beispiel sind "Wählen Sie unseren (Master)" und "Wählen Sie ihren (Feature-Zweig-42)" viel klarere Namen.

Ja, es ist sehr verwirrend. Unsere und ihre haben im Git-Land eine tatsächliche Bedeutung: Sie können sie verwenden, um die Zusammenführungsstrategie zu ändern. Sie sollten sie daher genauso verwenden, wie Git sie verwendet. Und ja, es wäre am besten, den tatsächlichen Filialnamen zu erwähnen, aber ich bin mir nicht sicher, ob kdiff dies unterstützt.

Betrachten Sie die folgende Befehlsfolge:

> mkdir test && cd test
> git init
> touch test.txt
> git add test.txt
> git commit -m "..."
> git branch test
> git checkout test
> echo "test" >test.txt
> git commit -a -m "..."
> git checkout master
> echo "master" >test.txt
> git add -a -m "..."
> git merge test

Zu diesem Zeitpunkt tritt in test.txt ein Zusammenführungskonflikt auf.
Wenn ich jetzt git gui öffne, wird der Konflikt im Commit-Fenster angezeigt.
Wenn Sie mit der rechten Maustaste auf das Diff-Fenster klicken, werden "Remote-Version verwenden" und "Lokale Version verwenden" angezeigt.

  • Wenn ich "Lokale Version verwenden" wähle, wird der Inhalt von test.txt nach dem Zusammenführen "master" sein.
  • Wenn ich "Remote-Version verwenden" wähle, lautet der Inhalt von test.txt nach dem Zusammenführen "test".

Nach der Logik von git gui ist der aktuelle Zweig "lokal" und der Zweig, in den ich ihn einfüge, "remote".

Wenn ich weiterhin die Befehlszeile anstelle von git gui verwende, um den Konflikt zu lösen, kann ich die folgenden Befehle ausführen:

> git checkout --ours test.txt
> cat test.txt
master
> git checkout --theirs test.txt
> cat test.txt
test

In der CLI bezieht sich "unsere" auf den aktuellen Zweig und "ihre" auf den Zweig, in dem ich zusammenfasse.
Aus diesem Grund denke ich, dass das Menü in Git Extensions widersprüchliche Informationen enthält.

Vielleicht wechseln unsere und ihre Plätze, wenn Zusammenführungen anders durchgeführt werden. Wenn ja, dann bin ich mir dessen nicht bewusst.

Danke, das macht Sinn. Wenn Sie kdiff starten, um einen Konflikt zu lösen, wird der aktuelle Zweig (--ours) als .LOCAL bezeichnet. Ja, es sieht so aus, als ob es ein Problem mit dem Menü gibt.

Okay. Anscheinend wechseln "unsere" und "ihre" während einer Rebase die Plätze.

Könnte es sein, dass git gui so eingerichtet ist, dass "local" und "remote" für Zusammenführungskonflikte während einer Pull-Operation sinnvoll sind?

Auf jeden Fall verwirrt dies die Leute, die von Git Gui wechseln (wie ich).
Vielleicht würde es ausreichen, in der Dokumentation darauf hinzuweisen.

Hmmmmmm, ich denke, wenn Sie eine "Pull-Rebase" machen (die ich standardmäßig verwende), ist das Menü möglicherweise korrekt, da wir und ihre wechseln. Aber ja, das ist äußerst verwirrend und sollte irgendwo dokumentiert werden. Auch die lokale und Remote
Die Terminologie ist sehr verwirrend, da wir bereits lokale Zweigstellen und Remote-Repositorys haben.

Übrigens können Sie dies etwas effizienter tun:

mkdir test && cd test
git init
Berühren Sie test.txt
git add test.txt
git commit -m "..."
Git Checkout -b Test *echo "test"> test.txtgit commit -am "..."
Git Checkout Master
echo "master"> test.txt
git commit -am "..." **
Git Merge Test

Die ursprüngliche Erklärung von dleinhaeuser zu diesem Thema ist korrekt.
Die richtigen Wörter sollten sein

 Wählen Sie lokale (unsere)
 Wählen Sie Remote (ihre)

Sie können dies sehen, indem Sie "Lokal öffnen mit" und "Remote öffnen mit" auswählen und "Lokal" Ihre Datei mit Ihren neuen Änderungen öffnet und Remote ihre Version öffnet.

Rebase ist schwieriger (ich schaue mir immer das Bild an, um sicherzugehen, dass ich es richtig mache, haha). "Unsere" und "ihre" sind meiner Meinung nach falsch.
Angenommen, Sie möchten "Zweig A" auf "Master" umstellen.
Obwohl Sie in "Zweig A" ausgecheckt sein müssen, um Zweig A wieder auf Master zu setzen, werden Sie im Zusammenführungskonflikt als im Master-Zweig befindlich betrachtet (tragen Sie mich hier mit ...). Sie werden als im Master befindlich angesehen, weil Sie versuchen, das Commit von Zweig A NACH den Commits des Masters zu "spielen". Es ist also ähnlich, im Master-Zweig zu sein und einen Pull auszuführen.

richtig. Dieser Beitrag erklärt die Dinge ziemlich gut:

http://stackoverflow.com/questions/3051461/git-rebase-keeping-track-of-local-and-remote

Daher sollte local / remote für die Zusammenführung bei uns und für Rebase bei uns sein.

Dies ist besonders verwirrend für Post-Pull-Konflikte, bei denen ihre eindeutig weit entfernt sind. Plant jemand, das Problem zu beheben?

Ok, die Beschriftungen sollten im obigen Commit korrigiert werden.
Normale Zusammenführung sagt

 Wählen Sie lokale (unsere)
 Wählen Sie Remote (ihre)

und Rebase Merge bleibt unverändert, dh.

 Wählen Sie lokale (ihre)
 Wählen Sie Remote (unsere)

Das wäre viel einfacher zu verstehen, was los ist, wenn anstelle von LOCAL / REMOTE oder OURS / THEIRS einfach die Filialnamen angezeigt werden sollten.

Siehe # 6582 für eine neuere Diskussion

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen