Как использовать инструмент слияния Xcode 4 в автономном режиме?

Иногда мне приходится делать слияния git на консоли. До сих пор для разрешения конфликтов я использовал FileMerge Xcode 3 (вы можете открыть его на консоли с помощью команды «opendiff»). Если возникают конфликты, я использую 'git mergetool', который автоматически вызывает opendiff для каждого конфликтующего файла.

Однако Xcode 4 имеет гораздо более удобный компонент средства слияния для разрешения конфликтов. Я считаю, что этот компонент является частью исполняемого файла Xcode 4, а не автономным. Это позволяет вам просматривать объединенный файл и напрямую редактировать объединенный код в каждом конкретном случае, что делает слияние сложных конфликтов невероятно быстрым и удовлетворительным.

Есть ли способ использовать инструмент слияния Xcode 4 при вызове «git mergetool» из терминала?

Я не могу найти исполняемый файл для этого инструмента в комплекте Xcode 4. Любой взлом, который достигает этого, будет приветствоваться.

В случае, если кто-то еще заинтересован в этой функции: похоже, официального способа сделать это нет. Я отправил запрос функции в Apple через отчет об ошибке . Вот радар . Я предполагаю, что это довольно безнадежно, но вы никогда не знаете. Для всех, кто заинтересован, я предлагаю проявить интерес, отправив аналогичный отчет об ошибке в Apple.

Ответы (3)

opendiff принимает два аргумента имени файла и параметр --ancestor с третьим именем файла для создания трехстороннего сравнения, и параметр --merge для указания выходного файла, используемого для разрешения конфликта.

Итак, вперед:

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

Это должно заставить git использовать opendiff в качестве инструмента слияния, когда возникают конфликты слияния.

Тем не менее, я ОЧЕНЬ предпочитаю DiffMerge от SourceGear , который представляет собой бесплатный инструмент сравнения и трехстороннего слияния, который намного лучше, ориентирован на слова, разрешает конфликты. И в документации DiffMerge есть что сказать git, чтобы сделать его инструментом сравнения и слияния по умолчанию.

Спасибо за попытку помочь, но Filemerge/opendiff — это не то, что я пытаюсь использовать. Кроме того, я попробовал DiffMerge (и DeltaWalker, если он того стоит), и мне не очень нравится его пользовательский интерфейс. Kaleidoscope намного приятнее, но в нем нет функции слияния/редактирования, а только отображение различий.
Я почти уверен, что Xcode 4 просто обертывает FileMerge. Я обнаружил такое же разочарование в Калейдоскопе.
Я бы сказал, что Xcode 4 не обертывает FileMerge. В FileMerge вы не можете редактировать объединенный файл, вы просто выбираете, какую сторону слияния вы хотите использовать для каждого конфликта. В распознавателе конфликтов вытягивания Xcode 4 вы можете редактировать конфликтующие строки и выполнять извлечение файла именно так, как вы хотите. Кроме того, пользовательский интерфейс полностью отличается от Filemerge.
Недавно была выпущена бета-версия Kaleidoscope 2, которая позволяет редактировать объединенные файлы в процессе работы. Проверьте это, это довольно хорошо. Единственное, чего ему не хватает, — это другого цвета для конфликтов (он использует тот же цвет, что и подстановка кода для них).
После нескольких месяцев использования Kaleidoscope и, несмотря на то, что он в целом хорош, я должен сказать, что он все еще содержит ошибки и / или сбивает с толку, особенно по сравнению с компонентом разрешения конфликтов Xcode 4.x. Все еще надеюсь, что Apple сделает что-то неожиданное и реализует его как отдельный инструмент, который можно вызвать, скажем, из Tower. ;-)

Вы можете редактировать в (очень простом) текстовом редакторе в FileMerge, открыв панель редактора, которая по умолчанию закрыта. Чтобы открыть редактор в FileMerge, перетащите точку под центральным столбцом различий вверх, чтобы открыть панель редактора.

В итоге это сработало для меня

[merge]
  tool = opendiff

[mergetool]
  keepBackup = false

[mergetool "opendiff"]
  cmd = "opendiff \"$LOCAL\" \"$REMOTE\" -merge \"$MERGED\""
Opendiff - это то, что Xcode 3.x использовал для слияний. Мой вопрос касался компонента слияния Xcode 4.x, который представляет собой совершенно другой инструмент (он позволяет редактировать результирующий файл на лету, в отличие от opendiff/filemerge). Спасибо, в любом случае.