【问题标题】:Problem with git + DiffMerge on OS XOS X 上 git + DiffMerge 的问题
【发布时间】:2010-12-14 12:43:07
【问题描述】:

我已使用以下说明将 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 时,我收到以下错误:

此问题的原因可能是什么?

【问题讨论】:

  • 有中间脚本有帮助吗?如stackoverflow.com/questions/3780420/…
  • 除了使用 git 之外,你还能在终端中运行 diffmerge 命令吗?
  • 我看到了同样的事情。本地文件系统上不存在 BASE 文件,但 diffmerge 命令行中引用的其他文件(在您的情况下为 10new.xml.REMOTE.2128.xml 和 10new.xml.LOCAL.2128.xml)确实存在。 DiffMerge 对 Git 行为(可能是 Git 版本行为)的期望存在问题?
  • 我无法重现这个,你有什么版本的 Git 和 Diffmerge?我有 git 版本 1.7.3.4,DiffMerge 3.3.0 (1001)

标签: git macos diffmerge


【解决方案1】:

可能没有$BASE 文件,例如,如果被合并的两个文件没有共同的祖先,或者如果您在应用或重新定位补丁而不是合并分支时碰巧遇到冲突。在这种情况下,虽然$BASE 变量仍将被设置,但那里不会有文件。

在您的 mergetool 命令中,您需要检查 $BASE 是否存在,如果不存在,则在没有共同祖先的情况下进行合并。看起来 DiffMerge 不支持该模式(它支持合并两个没有共同祖先的文件,但它总是将输出写入其中一个文件,而不是结果文件)。相反,如果$BASE 不存在,您需要将$LOCAL 作为$BASE 文件传入:

git config --global mergetool.diffmerge.cmd 'diffmerge --merge --result="$MERGED" "$LOCAL" "$(if test -f "$BASE"; then echo "$BASE"; else echo "$LOCAL"; fi)" "$REMOTE"'

【讨论】:

猜你喜欢
  • 2016-01-29
  • 2011-07-31
  • 2011-04-26
  • 2010-12-31
  • 2012-08-15
  • 2016-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多