Раньше я разрешал конфликты с помощью P4merge. Я нашел его в порядке, но я не обращал внимания на то, как он работает под капотом. До недавнего времени я понял, что он пытается сделать слияние сам по себе. В результате он не показывает те же конфликты, что и git, и это расстроило моего менеджера (например, в let's switch back to clearcase
разочаровании).
Вопрос в следующем: git добавляет аннотации к файлу, который не может слиться, как эти
<<<<<<< HEAD
this code
=======
the other code
>>>>>>> feature/branch-name
Есть ли графический инструмент, который читает эти аннотации, а затем дает вам возможность сохранить одно или другое, а затем удалить аннотации?
Инструмент должен быть для Linux и желательно бесплатным, но, поскольку организация позаботится о стоимости, его также можно оплатить.
К сожалению, kdiff3
также не уважает аннотации. Прежде всего, установка не сработала, но ничего страшного, я изменил .gitconfig
на
[mergetool "kdiff3"]
cmd = /path/to/kdiff3 $BASE $REMOTE $LOCAL -o $MERGED
и это сработало. Но потом kdiff3
сообщил следующее:
Не совсем то, что я ожидал: у меня было 4 конфликта, а инструмент говорит, что их 2. Также сообщение Nr of automatically solved conflicts
заставляет меня думать, что kdiff3
применяется собственный алгоритм слияния, который противоположен тому, что нам нужно.
kdiff3
может справиться с этим. Это универсальный diff
инструмент для просмотра и слияния (вы также можете использовать его вне любой системы контроля версий, например, для сравнения содержимого каталогов).
Если вы используете это, git
вы можете иметь это в своем gitconfig
:
[mergetool "kdiff3"]
trustExitCode = false
keepBackup = false
[merge]
tool = kdiff3
conflictstyle = diff3
так что git mergetool
после неудачного слияния инструмент автоматически запустится для вас.
kdiff3
попытается объединить для вас тривиальные вещи и представит вам окно с 4 панелями для решения нетривиальных вещей на основе git
аннотаций сбоев слияния.
Верхняя строка разделена на 3 области, чтобы показать вам:
Нижняя строка представляет собой редактируемый текст, являющийся результатом слияния в зависимости от вашего выбора.
Вы можете выбрать варианты A, B или C, чтобы применить изменения в A, B или C в результирующем слиянии. Или вы можете редактировать вещи самостоятельно в нижнем текстовом редакторе.
Посмотрите на этот скриншот: http://kdiff3.sourceforge.net/doc/screenshots.html#dirmergebigscreenshot
kdiff3
является бесплатным программным обеспечением и будет работать везде, где работает KDE. Интерфейс немного устарел, но работает.
Другие варианты:
meld
, см. http://meldmerge.org/ ; пользовательский интерфейс красивее, kdiff3
но я нашел его менее полным для моих нуждgit-config
под merge.tool
ключом, вы увидите список программ, которые git знает о разрешении слияний. Это может дать вам идеи о том, что нужно проверить, чтобы найти лучший для вас. На моей установке список такой: araxis
, bc
, bc3
, codecompare
, deltawalker
, diffmerge
, diffuse
, ecmerge
, emerge
, examdiff
, gvimdiff
, gvimdiff2
, gvimdiff3
, kdiff3
, meld
, opendiff
, p4merge
, , , ,tkdiff
tortoisemerge
vimdiff
vimdiff2
vimdiff3
winmerge
xxdiff
meld
, но нас это не устраивало. Мы также пробовали IntelliJ
слияние с тем же результатом. Я не могу быстро протестировать, kdiff3
так как я на RHEL, с Gnome и локальным репозиторием без Qt
. Прежде чем я оставлю отзыв, пройдет некоторое время.-1
ответ, хотя я не собираюсь минусовать. kdiff3
похоже, не уважает аннотации, скриншот этого не доказывает, и meld также выполняет собственное слияние. Так что, если я что-то не пропустил в kdiff3
конфигурации , это неправильный ответ. Хотя я узнал о conflictstyle = diff3
том, что я игнорировал до сих пор.kdiff3
не совпадает с вашим, извините. Из моего использования он всегда правильно работал с git, выполняя все возможные слияния сам по себе и оставляя мне те, которые слишком сложны для автоматического решения. Также обратите внимание, что мне не нужно было настраивать git так, как вам нужно, поэтому, возможно, у вас совсем другие настройки. Извините, если это не сработает для вас, я надеюсь, что вы получите другие лучшие ответы.Если вы готовы научиться использовать Emacs или Vim, они предлагают именно то, что вам нужно, благодаря ediff и vimdiff соответственно:
Они не используют никаких алгоритмов: Git делает свою работу. Они просто являются интерфейсами, делающими решение конфликта более приятным.
Чтобы использовать ediff, откройте файл в Emacs и запустите smerge-ediff
или настройте Emacs на автоматический запуск. См. этот ответ Emacs Stack Exchange для изображения интерфейса и подробностей о сочетаниях клавиш. Альтернативой является установка пакета magit , который использует ediff magit-ediff
.
Чтобы использовать vimdiff, вы можете установить его в качестве инструментов слияния в конфигурации Git. Интерфейс очень похож.
Патрик Мевзек
kdiff3
автоматически разрешает конфликты, основанные только на проблемах с пробелами. Но у вас есть много вариантов для настройки в его настройках, если вы хотите изменить его поведение. См. Stackoverflow.com/a/15813064/6368697 : «если вы действительно хотите отключить автоматическое разрешение, просто добавьте --qall в командную строку kdiff3». Также вы сказали, что у вас есть 4 конфликта, а инструмент говорит о 2, но, не видя того, что вы видите, трудно понять вашу ситуацию и причину несоответствия.Стелиос Адамантидис
kdiff3
какой-либо другой инструмент разрешал конфликты самостоятельно . Я хочу, чтобы он учитывал конфликты, которые создает git, а не повторял слияние.Патрик Мевзек
--qall
. Из справки: "Не разрешать конфликты автоматически.". Я всегда думал, что это одна из его сильных сторон, поэтому мне не нужно терять время на тривиальные конфликты, но, по крайней мере, у вас есть возможность отключить его. YMMV.