Як використовувати mergetool Xcode 4 в самостійний спосіб?


8

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

Однак Xcode 4 має набагато приємніший компонент mergetool для вирішення конфліктів. Я вважаю, що цей компонент є частиною виконуваного файлу Xcode 4, а не окремим. Це дозволяє попередньо переглянути об'єднаний файл та безпосередньо редагувати об'єднаний код у кожному конкретному випадку, що робить об’єднання складних конфліктів неймовірно швидким та задовільним.

Чи є спосіб використовувати mergetool Xcode 4, коли викликає "git mergetool" з терміналу?

Я не можу знайти виконуваний інструмент для цього інструменту всередині пакета Xcode 4. Будь-який хак, який цього досягає, буде вітатися.


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

Відповіді:


4

opendiff приймає два аргументи імені файлу та параметр --ancestor з третім іменем файлу, щоб створити тристоронній diff, а --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, перетягніть крапку під центральний стовпець розкриття вгору, щоб відкрити область редактора.


-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). Все одно, дякую.
Рікардо Санчес-Саес
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.