我有一个补丁文件。
我想将此补丁应用于我在git repository中的代码。
当我使用subversion时,这个过程非常简单:右键单击 - > tortoise svn - >应用补丁。它总是像我预期的那样工作。
但我不能用git这样做。 Git不适用我的补丁。它抱怨
修补程序没有有效的电子邮件地址。
所以,我的问题是: “在这种情况下如何应用补丁文件?”
答案 0 :(得分:9)
Git创建的补丁适用于Git工具。使用
git apply <patch>
如果补丁不是用Git创建的,那么只需使用Git后面的补丁程序。通常这是程序'补丁':
patch <patch>
应用补丁后,像往常一样在Git中添加和提交。
答案 1 :(得分:6)
这适用于从许多开源项目使用的 pipermail 下载的 mbox 文件。这可能在OP的情况下不起作用,但在使用{em} pipermail 提取的消息/补丁时使用git am
会产生相同的症状/问题。
备份文件并对其进行编辑以添加一行
From: name@domain.com (Proper Name)
该行通常已存在,但反垃圾邮件功能可能已将@
符号转换为处的文本。您可以使用gnu sed
命令修补一堆文件,例如
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 这样的工具 NOT 会生成与 format-patch 相同的数据而你不会获取提交历史记录。如果您有此类数据,则必须使用git apply
或生成上述补丁。
答案 2 :(得分:1)
如果你使用图形界面而不是命令行更有帮助,那么有很多工具可以让你在Git中做很多事情变得相对简单,包括应用补丁。我找到的最有帮助的是SourceTree,但我确信如果你搜索,还有其他好的。
答案 3 :(得分:1)
如果您的提交消息的行以From:
开头,则可能会出现此错误。例如,我有一个补丁,我修正了一个拼写错误,并在我提交的消息的正文中:
Fixes a typo.
From: 873524cab1 "Introduced some bug on this commit"
由format-patch生成的.patch文件有两条From:
行,其中一行是电子邮件地址,另一行是我糟糕的消息。 Git am正在拿起第二条From:
行并尝试查找电子邮件地址。
修复方法是将提交消息更改为在行的开头没有From:
。