Sourcetree не может открыть Diffmerge для конфликтов слияния - PullRequest
0 голосов
/ 11 ноября 2018

Недавно у меня была свежая установка macOS.Я установил Sourctree и diffmerge и установил diffmerge в качестве инструмента слияния по умолчанию.По какой-то причине каждый раз, когда я выбираю «Разрешить конфликты -> Открыть инструмент внешнего слияния», исходное дерево открывает свое окно ожидания и сразу закрывает его.

Моя страница настроек в исходном дереве:

enter image description here

Вот так выглядит мой корневой .gitconfig, когда sourcetree настраивает для меня diff merge:

[core]
    excludesfile = /Users/[username]/.gitignore_global
[user] 
    name = ---- -----
    email = -----@-----.--
[commit]
    template = /Users/[username]/.stCommitMsg
[credential]
    helper =  !/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/bin/java -Ddebug=false -Djava.net.useSystemProxies=true -jar /usr/local/Cellar/git-credential-manager/2.0.4/libexec/git-credential-manager-2.0.4.jar

[difftool "DiffMerge"]
[mergetool "DiffMerge"]
[diff]
    tool = diffmerge
[difftool "diffmerge"]
    cmd = /usr/local/bin/diffmerge \"$LOCAL\" \"$REMOTE\"
[merge]
    tool = diffmerge
[mergetool "diffmerge"]
    trustExitCode = true
    cmd = /usr/local/bin/diffmerge --merge --result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"
[difftool "sourcetree"]
    cmd = /Applications/DiffMerge.app/Contents/MacOS/DiffMerge/Contents/MacOS/DiffMerge --nosplash \"$LOCAL\" \"$REMOTE\"
path = 
[mergetool "sourcetree"]
    cmd = /Applications/DiffMerge.app/Contents/MacOS/DiffMerge/Contents/MacOS/DiffMerge --merge --result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"
    trustExitCode = true

Ответы [ 2 ]

0 голосов
/ 13 августа 2019

Я решил эту проблему, следуя инструкциям на DiffMerge Настройки для страницы документации OS X , которая была:

Сначала подтвердите, что /usr/local/bin/diffmerge присутствует. Если вы использовали установщик PKG, он был установлен при установке /Applications/DiffMerge.app. Если вы использовали файл DMG, обратитесь к инструкции по установке Extras .

Следующие команды обновят ваш .gitconfig, чтобы позволить GIT использовать DiffMerge:

$ git config --global diff.tool diffmerge
$ git config --global difftool.diffmerge.cmd
    "/usr/local/bin/diffmerge \"\$LOCAL\" \"\$REMOTE\""

$ git config --global merge.tool diffmerge
$ git config --global mergetool.diffmerge.trustExitCode true
$ git config --global mergetool.diffmerge.cmd 
    "/usr/local/bin/diffmerge --merge --result=\"\$MERGED\"
        \"\$LOCAL\" \"\$BASE\" \"\$REMOTE\""

Затем я смог использовать DiffMerge, выбрав пункт меню в Sourcetree

Sourcetree preference pane, showing the Diff tab, with DiffMerge selected for the Visual Diff Tool and Merge Tool options

( Необязательно ) Возможно, вы захотите добавить --nosplash к обеим командам перед другими параметрами, чтобы избежать заставки (как также рекомендуется @ saren-inden ). то есть;. * 1 026 *

$ git config --global diff.tool diffmerge
$ git config --global difftool.diffmerge.cmd
    "/usr/local/bin/diffmerge --nosplash \"\$LOCAL\" \"\$REMOTE\""

$ git config --global merge.tool diffmerge
$ git config --global mergetool.diffmerge.trustExitCode true
$ git config --global mergetool.diffmerge.cmd 
    "/usr/local/bin/diffmerge --nosplash --merge --result=\"\$MERGED\"
        \"\$LOCAL\" \"\$BASE\" \"\$REMOTE\""
0 голосов
/ 11 ноября 2018

Это случилось со мной, когда diffmerge был установлен через pkg install вместо установщика. Это явно не настраивает ваш bash на то, чтобы знать команду diffmerge, поэтому вы должны указать путь к diffmerge (или обновить конфигурацию вашего бина).

Чтобы решить эту проблему, я вручную сконфигурировал Visual Diff Tool и Merge Tool (с той выгодой, что вы можете отключать этот надоедливый экран-заставку при запуске каждый раз).

Страница настроек в исходном дереве

enter image description here

Diff

Команда: /usr/local/bin/diffmerge Аргументы --nosplash "$LOCAL" "$REMOTE"

Слияние

Команда: /usr/local/bin/diffmerge Аргументы --nosplash --merge --result="$MERGED" "$LOCAL" "$BASE" "$REMOTE"

Аргумент --nosplash является необязательным, но предотвращает (на мой взгляд, бесполезный) всплывающее окно, которое вам всегда нужно закрывать, прежде чем вы сможете начать работу.

Git config file:

[core]
    excludesfile = /Users/[username]/.gitignore_global
[user]
    name = ---------
    email = ---------@------.--
[commit]
    template = /Users/[username]/.stCommitMsg
[credential]
    helper = !/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/bin/java -Ddebug=false -Djava.net.useSystemProxies=true -jar /usr/local/Cellar/git-credential-manager/2.0.4/libexec/git-credential-manager-2.0.4.jar

[difftool "DiffMerge"]
[mergetool "DiffMerge"]
[diff]
    tool = diffmerge
[difftool "diffmerge"]
    cmd = /usr/local/bin/diffmerge \"$LOCAL\" \"$REMOTE\"
[merge]
    tool = diffmerge
[mergetool "diffmerge"]
    trustExitCode = true
    cmd = /usr/local/bin/diffmerge --merge --result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"
[difftool "sourcetree"]
    cmd = /usr/local/bin/diffmerge --nosplash \"$LOCAL\" \"$REMOTE\"
    path = 
[mergetool "sourcetree"]
    cmd = /usr/local/bin/diffmerge --nosplash --merge --result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"
    trustExitCode = true

Дополнительная информация об аргументах командной строки diffmerge:

Разница: https://sourcegear.com/diffmerge/webhelp/sec__clargs__diff.html

Слияние: https://sourcegear.com/diffmerge/webhelp/sec__clargs__merge.html

...