Как использовать XCode 4 Mergetool в автономном режиме?

8

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

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

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

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

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

Ответы:

4

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 за то, что он стоит), и мне не очень нравится его пользовательский интерфейс. Калейдоскоп приятнее, но в нем нет функции слияния / редактирования, только отображение различий.
Рикардо Санчес-Саез
Я уверен, что Xcode 4 просто упаковывает FileMerge. Я обнаружил то же разочарование по поводу калейдоскопа.
Дэн Рэй
Я бы сказал, что Xcode 4 не является упаковкой FileMerge. В FileMerge вы не можете редактировать объединенный файл, вы просто выбираете, какую сторону объединения вы хотите использовать для каждого конфликта. В Xcode 4 средство разрешения конфликтов извлечения вы можете редактировать конфликтующие строки и выполнять извлечение файла точно так, как вы хотите. Кроме того, пользовательский интерфейс полностью отличается от Filemerge.
Рикардо Санчес-Саез
1
Недавно была выпущена бета-версия Kaleidoscope 2, которая позволяет выполнять встроенное редактирование объединенных файлов. Проверьте это, это довольно хорошо. Единственное, чего не хватает, - это другого цвета для конфликтов (он использует тот же цвет, что и для замены кода).
Рикардо Санчес-Саез
После нескольких месяцев использования Kaleidoscope, и, несмотря на то, что он в целом хорош, я должен сказать, что он по-прежнему не совсем понятен и не совсем понятен, особенно по сравнению с компонентом разрешения конфликтов Xcode 4.x. Все еще надеясь, что Apple сделает неожиданное и воплотит его в жизнь как самостоятельный инструмент, вызываемый, скажем, из Tower. ;-)
Рикардо Санчес-Саез
0

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

Austin-Soft.com
источник
-1

Это в конечном итоге работает на меня

[merge]
  tool = opendiff

[mergetool]
  keepBackup = false

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