GIT补丁错误 - 基本补丁失败

时间:2015-03-10 10:55:16

标签: git msysgit mingw32

我正在从克隆的GitHub仓库创建一些补丁,我已经添加了一系列小型提交,因为我希望forked repos能够进行补丁。 我使用msysgit.github.io(版本1.9.5)中最新的基于MinGW的Windows版本的GIT。

第一个补丁只是将一系列HTML文件中的脚本标记更改为指向更高版本的jQuery,因此它只是简单的行替换。

我使用git log -3获取提交guid,然后使用eg。

创建补丁
git diff e004912b5ce29ac0d0cb04df50fe66db5e3af9ea 574391effbdfcb187cf5695e28558d5ace5bdefd > ../patches/test.patch

奇怪的是,当我用

应用补丁时
 git apply ../patches/test.patch

在提交e004912b5ce29ac0d0cb04df50fe66db5e3af9ea的原始仓库中,它失败并且补丁失败'和'补丁不适用消息。

它在一个文件中出错,但是如果删除差异的那一部分,则补丁可以正常工作。我使用Notepad ++,所以我可以看到标签/空格和行结尾为CR / CRLF,而不是那样。

甚至更奇怪,当我应用编辑过的补丁,然后手动将失败的更改应用于那个文件,提交并创建一个新补丁时,它不仅与第一个补丁字节相同,而且也失败相同。

所以我100%确定这是一个错误。文件或补丁没有问题。它阻止我发布这些补丁。

可能导致这种情况的原因是什么?我正在复制克隆仓库的本地版本,该版本位于e004912b5ce29ac0d0cb04df50fe66db5e3af9ea,因此我不知道索引是如何被破坏的或类似的东西。这是Windows GIT的已知问题吗?

编辑:

好的,它是行结尾。看看这个(显示在Notepad ++中),AutoToolTips.html是问题孩子:

enter image description here

因此,使用\r\n查找/替换\n修复了此问题。 道歉,我确信我早些时候已经检查过了。

为什么这个特定文件的处理方式与补丁中的其他文件不同,仍然存在一个谜。 在GitHub存储库中,所有文件都设置为LF(unix行终止)。 Git for windows设置为将所有文件转换为CRLF格式,然后在提交时再次返回LF。这是一致的 - 我所有的本地文件都有CRLF终止。

这可能是特定于该文件的Git元属性中隐藏的内容吗?如果是这样,我将如何找到该物业?

0 个答案:

没有答案