我有一个补丁文件。
我想将此补丁应用于我在 git 存储库中的代码。
当我使用 subversion 时,这个过程非常简单:右键单击 -> tortoise svn -> 应用补丁。它总是按我的预期工作。
但我不能使用 git 来做到这一点。Git 没有应用我的补丁。它抱怨
Patch 没有有效的电子邮件地址。
所以,我的问题是:“在这种情况下如何应用补丁文件?”
Git 创建的补丁旨在与 Git 工具一起应用。利用
git apply <patch>
如果补丁不是用 Git 创建的,那么只需在 Git 的“背后”使用补丁程序。通常这是程序“补丁”:
patch <patch>
应用补丁后,像往常一样在 Git 中添加和提交。
这适用于从许多开源项目使用的pipermail下载的mbox文件。这在 OP 的情况下可能不起作用,但与pipermail提取的消息/补丁一起使用时会产生相同的症状/问题。git am
备份文件并编辑它以添加一行,
From: name@domain.com (Proper Name)
通常该行已经存在,但反垃圾邮件功能可能已将@
符号转换为. sed
您可以使用 gnu命令修补一堆文件,例如,
sed -ie 's/\(From:.*\) at /\1@/' *.patch
@
这只是用符号替换'at' 。在这之后,git am
应该接受它。
如果您有权访问 git 存储库,则可以使用常规命令,
git checkout oldbranch
git format-patch HEAD~4
这将生成四个文件,它们是最后一次更改的补丁(更改您的案例的编号)。git checkout master
git am *.patch
您会获得与远程存储库相同的提交 ID、消息等,这些在以后会很有用。
像gitk和kdiff这样的工具不会生成与format-patch相同的数据,并且您不会获得提交历史记录。如果您有此类数据,则必须使用git apply
或生成上述补丁。
如果使用图形界面而不是命令行对您更有帮助,那么有很多工具可以使在 Git 中做很多事情变得相对简单,包括应用补丁)。我发现的最有用的是SourceTree,但如果你搜索的话,我相信还有其他不错的。
如果您的提交消息有一行以From:
. 例如,我有一个补丁修复了一个错字,在提交消息的正文中我有:
Fixes a typo.
From: 873524cab1 "Introduced some bug on this commit"
由 format-patch 生成的 .patch 文件有两From:
行,其中一行是电子邮件地址,另一行是我的糟糕消息。Git am 拿起第二From:
行并试图找到电子邮件地址。
解决方法是将提交消息更改为不在From:
行首。