Wie verwende ich das Xcode 4 Mergetool eigenständig?

Manchmal muss ich Git-Merges auf der Konsole machen. Bisher habe ich zum Lösen von Konflikten FileMerge von Xcode 3 verwendet (Sie können es auf der Konsole mit dem Befehl „opendiff“ öffnen). Wenn Konflikte auftreten, verwende ich „git mergetool“, das automatisch opendiff für jede der widersprüchlichen Dateien aufruft.

Xcode 4 bietet jedoch eine viel schönere Mergetool-Komponente zum Lösen von Konflikten. Ich glaube, diese Komponente ist eher Teil der ausführbaren Xcode 4-Datei als eigenständig. Sie können die zusammengeführte Datei in der Vorschau anzeigen und den zusammengeführten Code von Fall zu Fall direkt bearbeiten, wodurch das Zusammenführen komplexer Konflikte unglaublich schnell und zufriedenstellend wird.

Gibt es eine Möglichkeit, das Mergetool von Xcode 4 zu verwenden, wenn „git mergetool“ vom Terminal aus aufgerufen wird?

Ich kann keine ausführbare Datei für dieses Tool im Xcode 4-Bundle finden. Jeder Hack, der dies erreicht, wäre willkommen.

Falls sich noch jemand für dieses Feature interessiert: Es scheint, dass es keine offizielle Möglichkeit gibt, dies zu tun. Ich habe über bugreport eine Funktionsanfrage an Apple gesendet . Hier ist das Radar . Ich denke, es ist ziemlich hoffnungslos, aber man weiß nie. Für alle anderen Interessierten schlage ich vor, Interesse zu zeigen, indem sie einen ähnlichen Fehlerbericht an Apple senden.

Antworten (3)

opendiff nimmt zwei Dateinamen-Argumente und einen --ancestor-Parameter mit einem dritten Dateinamen, um einen Drei-Wege-Diff zu erzeugen, und einen --merge-Parameter, um die Ausgabedatei anzugeben, die für die Konfliktlösung verwendet werden soll.

Also geh:

[mergetool "opendiff"]
    cmd = "opendiff \"$LOCAL\"  \"$REMOTE\" \"$(if test -f \"$BASE\"; then echo \"--ancestor $BASE\"; else echo \"--ancestor $LOCAL\"; fi)\" --merge=\"$MERGED\" "
[merge]
    tool = opendiff

Das sollte git dazu bringen, opendiff als Merge-Tool zu verwenden, wenn Merge-Konflikte auftreten.

Allerdings bevorzuge ich SEHR viel DiffMerge von SourceGear , einem kostenlosen Diff- und Drei-Wege-Merge-Tool, das eine viel bessere, wortorientierte Konfliktlösung bietet. Und in der Dokumentation von DiffMerge gibt es etwas, was man Git mitteilen muss, um es zum Standardwerkzeug zum Vergleichen und Zusammenführen zu machen.

Danke für den Versuch zu helfen, aber Filemerge/opendiff ist nicht das, was ich zu verwenden versuche. Außerdem habe ich DiffMerge (und DeltaWalker für das, was es wert ist) ausprobiert und ich mag seine Benutzeroberfläche nicht sehr. Kaleidoskop ist viel schöner, aber es bietet kein Zusammenführen / Bearbeiten, sondern nur das Anzeigen von Unterschieden.
Ich bin mir ziemlich sicher, dass Xcode 4 nur FileMerge umschließt. Ich entdeckte die gleiche Enttäuschung über Kaleidoskop.
Ich würde sagen, dass Xcode 4 FileMerge nicht umschließt. Bei FileMerge können Sie die zusammengeführte Datei nicht bearbeiten, Sie wählen nur aus, welche Seite der Zusammenführung Sie für jeden Konflikt verwenden möchten. Auf dem Xcode 4-Pull-Conflict-Resolver können Sie die widersprüchlichen Zeilen bearbeiten und einen Pull mit der Datei genau so durchführen, wie Sie es möchten. Außerdem unterscheidet sich die Benutzeroberfläche vollständig von Filemerge.
Kaleidoscope 2 Beta wurde kürzlich veröffentlicht und ermöglicht die Inline-Bearbeitung von zusammengeführten Dateien. Schau es dir an, es ist ziemlich gut. Das einzige, was fehlt, ist eine andere Farbe für Konflikte (es verwendet die gleiche Farbe wie die Code-Ersetzung für diese).
Nach einigen Monaten der Verwendung von Kaleidoscope und obwohl es im Allgemeinen gut ist, muss ich sagen, dass es immer noch irgendwie fehlerhaft und/oder verwirrend ist, insbesondere im Vergleich zu Xcode 4.x-Konfliktlösungskomponente. Ich hoffe immer noch, dass Apple das Unerwartete tut und es als eigenständiges Tool implementiert, das beispielsweise von Tower aus aufgerufen werden kann. ;-)

Sie können im (sehr einfachen) Texteditor in FileMerge bearbeiten, indem Sie das Editorfenster öffnen – das standardmäßig geschlossen ist. Um den Editor in FileMerge zu öffnen, ziehen Sie den Punkt unter der mittleren Diff-Spalte nach oben, um das Editorfenster zu öffnen.

Dies hat am Ende für mich funktioniert

[merge]
  tool = opendiff

[mergetool]
  keepBackup = false

[mergetool "opendiff"]
  cmd = "opendiff \"$LOCAL\" \"$REMOTE\" -merge \"$MERGED\""
Opendiff ist das, was Xcode 3.x für Zusammenführungen verwendet hat. Meine Frage bezog sich auf die Merge-Komponente von Xcode 4.x, die ein völlig anderes Tool ist (es ermöglicht die Inline-Bearbeitung der resultierenden Datei, im Gegensatz zu opendiff/filemerge). Danke trotzdem.