【发布时间】:2011-09-11 10:51:53
【问题描述】:
我使用三个提交创建了一个补丁
git format-patch <revision_three_commits_ago>
这会创建三个补丁文件,我从我的笔记本上邮寄并在我的台式计算机上阅读邮件(都是 Windows 机器)。
当我现在做的时候
git am --3way --ignore-space-change *.patch
补丁适用,但我没有为提交获得相同的 SHA1 ID。在补丁文件中搜索了一下,我发现我的台式机上修改后的行以LF结尾,而笔记本(我创建补丁的地方)上修改后的行以CR LF结尾。
所以,我的第一个想法是在没有--ignore-space-change 的情况下调用git am,但这给了我一个错误(补丁不适用)。
我如何告诉git format-patch 或git am 如何处理行尾(msysgit 1.7.4)?
在应用补丁之前,我真的必须使用 VIM 并将文件格式从 UNIX 更改为 DOS 吗?
编辑: 甚至用 VIM 修改补丁文件都没有帮助:我想,set ff=dos 和 :%s/^M//g 会有所帮助,但它没有!
在我看来,应用补丁应该会产生完全相同相同的内容和相同的提交哈希,就像我从创建补丁的其他存储库中提取的一样。我想错了吗?
【问题讨论】:
-
注意:您现在可以选择使用 Git 2.3.0(2015 年 2 月):您现在可以使用
--transfer-encoding指定要使用的传输编码(quoted-printable),而不是依赖--keep-cr,8位,base64)。见my answer below。
标签: git format-patch