8

次の手順を使用して、Sourcegear DiffMerge をデフォルトの git マージ ツールとして構成しました。

git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd "diffmerge \"\$LOCAL\" \"\$REMOTE\""

git config --global merge.tool diffmerge
git config --global mergetool.diffmerge.cmd "diffmerge --merge --result=\"\$MERGED\"
\"\$LOCAL\" \"\$BASE\" \"\$REMOTE\""
git config --global mergetool.diffmerge.trustexitcode false

ソース: http://www.andrejkoelewijn.com/wp/2010/01/08/configure-diffmerge-with-git/

ただし、実行するgit mergetoolと次のエラーが発生します。

差分マージ エラー

この問題の原因は何ですか?

4

1 に答える 1

8

$BASEたとえば、マージされる 2 つのファイルに共通の祖先がない場合、またはブランチをマージするのではなく、パッチを適用またはリベースするときに競合が発生した場合、ファイルが存在しない可能性があります。この場合、$BASE変数は設定されたままですが、ファイルはありません。

mergetool コマンドでは、存在するかどうかを確認$BASEし、存在しない場合は共通の祖先なしでマージを実行する必要があります。DiffMerge がそのモードをサポートしているようには見えません (共通の祖先を持たない 2 つのファイルのマージをサポートしていますが、結果ファイルではなく、常にファイルの 1 つに出力を書き込みます)。代わりに、存在しない場合はファイル$LOCALとして渡す必要があります。$BASE$BASE

git config --global mergetool.diffmerge.cmd 'diffmerge --merge --result="$MERGED" "$LOCAL" "$(if test -f "$BASE"; then echo "$BASE"; else echo "$LOCAL"; fi)" "$REMOTE"'
于 2011-04-18T17:53:13.287 に答える