Иногда мне приходится делать слияния git на консоли. До сих пор для разрешения конфликтов я использовал FileMerge Xcode 3 (вы можете открыть его на консоли с помощью команды «opendiff»). Если возникают конфликты, я использую 'git mergetool', который автоматически вызывает opendiff для каждого конфликтующего файла.
Однако Xcode 4 имеет гораздо более удобный компонент средства слияния для разрешения конфликтов. Я считаю, что этот компонент является частью исполняемого файла Xcode 4, а не автономным. Это позволяет вам просматривать объединенный файл и напрямую редактировать объединенный код в каждом конкретном случае, что делает слияние сложных конфликтов невероятно быстрым и удовлетворительным.
Есть ли способ использовать инструмент слияния Xcode 4 при вызове «git mergetool» из терминала?
Я не могу найти исполняемый файл для этого инструмента в комплекте Xcode 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, открыв панель редактора, которая по умолчанию закрыта. Чтобы открыть редактор в FileMerge, перетащите точку под центральным столбцом различий вверх, чтобы открыть панель редактора.
В итоге это сработало для меня
[merge]
tool = opendiff
[mergetool]
keepBackup = false
[mergetool "opendiff"]
cmd = "opendiff \"$LOCAL\" \"$REMOTE\" -merge \"$MERGED\""
Рикардо Санчес-Саес