【问题标题】:Why is BeyondCompare 4 / Git trying to perform a text diff on binary files?为什么 BeyondCompare 4 / Git 试图对二进制文件执行文本差异?
【发布时间】:2015-07-16 05:32:44
【问题描述】:

我正在尝试合并具有不同 .NET .dll 和 .pdb 的分支,而 git/BC4 正在尝试对文件进行文本合并,而不是让我选择本地与远程。

我从来没有遇到过这种情况,大概是我改变了一些设置或者BC4与BC3有一些不同。

我的相关@​​987654323@

[merge]
    tool = bec3
    renamelimit = 2000
[mergetool]
    prompt = false
    keepBackup = false
[mergetool "bec3"]
    cmd = \"C:/Program Files (x86)/Beyond Compare 4/bcomp.exe\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"
    trustExitCode = true

我正在使用 msysgit 1.9.5 和 Beyond 比较 4.0.3

编辑:我不想二进制合并,git 用来简单地让我选择本地或远程文件来解决冲突。我的问题是“这是 git 设置(如果是,是什么?)还是 BC 设置?”

【问题讨论】:

    标签: git msysgit beyondcompare4


    【解决方案1】:

    这在 6 年后效果更好:使用 Git 2.34(2021 年第四季度),xxdiffdifftool(在您的情况下为“BeyondCompare”)后端可以以状态 128 退出,启动后端的 difftool-helper 需要当它根本不重要时,作为重大失败。
    这不再阻塞。

    这里,'xxdiff' 是您选择的 diff 工具(同样,这里是 BeyondCompare)

    参见David Aguilar (davvid) 的commit 571f434(2021 年 10 月 12 日)。
    (由 Junio C Hamano -- gitster -- 合并到 commit 6a1bb08,2021 年 10 月 25 日)

    mergetools/xxdiff: 防止段错误停止 difftool

    签字人:大卫·阿吉拉尔

    用户经常使用“git difftool”(man) HEAD^”来查看他们的工作,并将“mergetool.prompt”设置为false,这样difftool就不会在比较每个文件之前提示它们。

    这非常方便,因为用户可以通过一次查看一个 xxdiff 窗口来查看他们的所有差异。

    xxdiff遇到一些二进制文件时出现问题。
    它可以进行段错误并返回退出代码 128,这是 git-difftool-helper 的特殊情况,是异常情况,会中止进程。

    当我们看到退出代码 128 时,在其 diff_cmd() 实现中抑制来自 xxdiff 的退出代码,以便 GIT_EXTERNAL_DIFF 循环不间断地继续到下一个文件,而不是在遇到第一个二进制文件时中止。

    【讨论】:

      【解决方案2】:

      Beyond Compare 不支持合并二进制文件。一些版本控制系统允许您根据文件扩展名定义不同的合并工具,为二进制和文本文件调用不同的合并工具。我不认为 Git 提供了这样做的方法。

      您必须在 Beyond Compare 之外合并二进制文件。

      要解决与 .dll 文件的存储库版本的冲突:

          git checkout --theirs -- file.dll
          git add file.dll
          git commit
      

      要解决与您的 .dll 文件版本的冲突:

          git checkout --ours -- file.dll
          git add file.dll
          git commit
      

      我会将二进制文件的合并添加到我们的功能愿望清单中,以用于 Beyond Compare 的未来版本。

      【讨论】:

      • 谢谢,我不想想要进行二进制合并。 Git曾经问我“你想使用本地文件还是远程文件?”不确定我是否更改了 git 设置,或者它是否在 BC3 和 4 之间有所不同。听起来像 Git...
      • Beyond Compare 在合并时从未提示选择本地或远程文件,因此如果您最近更新了 Git 版本或 Git 设置,这一定是 Git 行为的变化。
      猜你喜欢
      • 2011-10-14
      • 1970-01-01
      • 2015-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 2012-04-18
      相关资源
      最近更新 更多