Git-Tool zur Konfliktlösung, das Konfliktanmerkungen berücksichtigt

Früher habe ich Konflikte mit P4merge gelöst. Ich fand es OK, aber ich habe nicht darauf geachtet, wie es die Arbeit unter der Haube macht. Bis vor kurzem habe ich festgestellt, dass es versucht, die Zusammenführung von selbst durchzuführen. Infolgedessen zeigt es nicht die gleichen Konflikte wie Git, und das hat meinen Manager frustriert (wie in let's switch back to clearcasefrustriert).

Die Frage ist: Git fügt einer Datei Anmerkungen hinzu, die nicht ähnlich wie diese zusammengeführt werden können

<<<<<<< HEAD
    this code
=======
    the other code
>>>>>>> feature/branch-name

Gibt es ein grafisches Tool, das diese Anmerkungen liest und Ihnen dann die Möglichkeit gibt, die eine oder andere zu behalten und die Anmerkungen dann zu entfernen?

Das Tool sollte für Linux und vorzugsweise kostenlos sein, aber da die Organisation die Kosten übernimmt, kann es auch bezahlt werden.


UPDATE: kdiff3-Testversion

Anmerkungen werden leider kdiff3auch nicht berücksichtigt. Zunächst einmal hat das Setup nicht funktioniert, aber keine große Sache, ich habe das .gitconfigauf geändert

[mergetool "kdiff3"]
     cmd = /path/to/kdiff3 $BASE $REMOTE $LOCAL -o $MERGED

und es hat funktioniert. Habe dann aber kdiff3folgendes gemeldet:

kdiff3-Ausgabe

Nicht genau das, was ich erwartet hatte: Ich hatte 4 Konflikte und das Tool sagt, dass es 2 gibt. Außerdem lässt mich die Nr of automatically solved conflictsNachricht denken, dass kdiff3es einen eigenen Zusammenführungsalgorithmus anwendet, was das Gegenteil von dem ist, was wir wollen.

Standardmäßig kdiff3werden Konflikte automatisch nur auf der Grundlage von Leerzeichen gelöst. Sie haben jedoch viele Optionen zum Konfigurieren in den Einstellungen, wenn Sie das Verhalten ändern möchten. Siehe stackoverflow.com/a/15813064/6368697 : "Wenn Sie wirklich die automatische Auflösung deaktivieren möchten, fügen Sie einfach --qall zur kdiff3-Befehlszeile hinzu". Sie sagten auch, Sie haben 4 Konflikte und das Tool sagt 2, aber ohne zu sehen, was Sie sehen, ist es schwierig, Ihre Situation und den Grund für die Diskrepanz zu verstehen.
@PatrickMevzek Ich möchte kein kdiff3anderes Tool, um Konflikte alleine zu lösen . Ich möchte, dass es die Konflikte respektiert, die git erzeugt, anstatt die Zusammenführung zu wiederholen.
Siehe meinen bearbeiteten Kommentar. hinzufügen --qall. Aus der Hilfe: "Konflikte nicht automatisch lösen.". Ich dachte immer, es ist eine seiner Stärken, damit ich keine Zeit mit trivialen Konflikten verlieren muss, aber Sie haben zumindest die Möglichkeit, es zu deaktivieren. YMMV.

Antworten (2)

kdiff3kann damit umgehen. Es ist ein generisches diffAnzeige- und Zusammenführungstool (das Sie auch außerhalb von VCS verwenden können, um beispielsweise den Inhalt von Verzeichnissen zu vergleichen).

Wenn Sie dies verwenden, gitkönnen Sie dies in Ihrem haben gitconfig:

[mergetool "kdiff3"]
    trustExitCode = false
    keepBackup = false

[merge]
    tool = kdiff3
    conflictstyle = diff3

damit git mergetoolnach einer fehlgeschlagenen Zusammenführung das Tool automatisch für Sie gestartet wird.

kdiff3wird versuchen, die trivialen Dinge für Sie zusammenzuführen, und Ihnen ein 4-Fenster-Fenster präsentieren, um die nicht trivialen Dinge zu lösen, basierend auf gitAnmerkungen zu Zusammenführungsfehlern.

Die obere Reihe ist in 3 Bereiche aufgeteilt, um Ihnen Folgendes zu zeigen:

  • A = LOCAL: Dies ist der Dateiinhalt aus Ihrer lokalen Filiale
  • B = BASE: Dies ist der Dateiinhalt als gemeinsamer Vorfahre, wie er vor irgendwelchen Änderungen in LOCAL oder REMOTE war
  • C = REMOTE: Dies ist der Dateiinhalt aus dem Zweig, aus dem Sie zusammenführen und in Ihren Zweig (wie in LOCAL angezeigt).

Die untere Zeile ist ein bearbeitbarer Text, der das Ergebnis der Zusammenführung ist, basierend auf Ihrer Auswahl.

Sie können entweder die Optionen A, B oder C auswählen, um entweder die Änderungen in A, B oder C in der resultierenden Zusammenführung anzuwenden. Oder Sie können die Dinge im unteren Texteditor selbst bearbeiten.

Siehe diesen Screenshot: http://kdiff3.sourceforge.net/doc/screenshots.html#dirmergebigscreenshot

kdiff3ist freie Software und funktioniert überall dort, wo KDE funktioniert. Die Schnittstelle ist ein wenig veraltet, aber es funktioniert.

Andere Optionen:

  • meld, siehe http://meldmerge.org/ ; Die Benutzeroberfläche ist schöner als, kdiff3aber ich fand sie hinsichtlich der Funktionen für meine Bedürfnisse weniger vollständig
  • git-configWenn Sie unter dem Schlüssel einen Blick darauf werfen, merge.toolsehen Sie eine Liste von Software, die Git kennt, um Zusammenführungen aufzulösen. Dies könnte Ihnen Ideen geben, was Sie testen können, um das Beste für Sie herauszufinden. Auf meiner Installation ist die Liste: araxis, bc, bc3, codecompare, deltawalker, diffmerge, diffuse, ecmerge, emerge, examdiff, gvimdiff, gvimdiff2, , gvimdiff3, kdiff3, meld, opendiff, p4merge, tkdiff, tortoisemerge, vimdiff, vimdiff2, vimdiff3,winmergexxdiff
Danke für die gründliche Antwort. Wir haben es versucht meld, waren aber nicht zufrieden damit. Wir haben auch versucht IntelliJ, mit dem gleichen Ergebnis zu verschmelzen. Ich kann nicht schnell testen, kdiff3da ich auf RHEL bin, mit Gnome und einem lokalen Repository ohne Qt. Es wird einige Zeit dauern, bis ich Feedback gebe.
Wenn Sie können, versuchen Sie es mit einer VM oder einem Container, um zumindest einen Blick darauf zu werfen. Oder starten Sie einen Computer mit einer LiveCD einer Distribution, die diese enthält.
Das habe ich am Ende getan. Ich möchte nicht respektlos sein, aber das ist leider eine -1Antwort - obwohl ich nicht beabsichtige, abzustimmen. kdiff3scheint Anmerkungen nicht zu respektieren, der Screenshot beweist es nicht und meld führt auch seine eigene Zusammenführung durch. Wenn ich also nichts in kdiff3der Konfiguration von übersehen habe, ist das keine richtige Antwort. Obwohl ich erfahren habe, conflictstyle = diff3was ich bis jetzt ignoriert habe.
@SteliosAdamantidis Meine Erfahrungen mit kdiff3stimmen nicht mit deinen überein, tut mir leid. Bei meiner Verwendung hat es mit Git immer korrekt funktioniert, alle möglichen Zusammenführungen von selbst durchgeführt und mich mit denen zurückgelassen, die zu kompliziert sind, um automatisch gelöst zu werden. Beachten Sie auch, dass ich git nicht so konfigurieren musste, wie Sie es tun mussten, also haben Sie vielleicht ein ganz anderes Setup. Tut mir leid, wenn es bei dir nicht funktioniert, ich hoffe, du bekommst dann andere bessere Antworten.

Wenn Sie bereit sind, die Verwendung von Emacs oder Vim zu lernen, bieten sie dank ediff bzw. vimdiff genau das, was Sie wollen:

  • eine grafische Oberfläche mit klarer farblicher Hervorhebung der alternativen Versionen von Konflikten (aber ohne Entfernen einer der Git-Konfliktmarkierungen)
  • Tastenkombinationen, um einfach von einem Konflikt zum nächsten zu springen
  • Tastenkombinationen, um einfach die eine oder andere Version für jeden Konflikt auszuwählen

Sie führen keine Algorithmen aus: Git erledigt die Arbeit. Sie sind einfach Schnittstellen, die es angenehmer machen, den Konflikt zu lösen.

Um ediff zu verwenden, öffnen Sie Ihre Datei in Emacs und führen Sie smerge-ediffEmacs aus oder stellen Sie es so ein, dass es automatisch gestartet wird. In dieser Emacs Stack Exchange-Antwort finden Sie ein Bild der Benutzeroberfläche und Einzelheiten zu den Tastenkombinationen. Eine Alternative ist die Installation des magit - Pakets , das jedoch ediff verwendet magit-ediff.

Um vimdiff zu verwenden, können Sie es als Ihr Merge-Tool in der Git-Konfiguration festlegen. Die Schnittstelle ist ziemlich ähnlich.