git:Patch没有有效的电子邮件地址

时间:2013-06-27 16:26:07

标签: git patch git-patch

我有一个补丁文件。

我想将此补丁应用于我在git repository中的代码。

当我使用subversion时,这个过程非常简单:右键单击 - > tortoise svn - >应用补丁。它总是像我预期的那样工作。

但我不能用git这样做。 Git不适用我的补丁。它抱怨

修补程序没有有效的电子邮件地址。

所以,我的问题是: “在这种情况下如何应用补丁文件?”

4 个答案:

答案 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存储库,则可以使用常规命令

  1. git checkout oldbranch
  2. git format-patch HEAD~4这将生成四个文件,这些文件是最后一次更改的补丁(更改案例的编号)。
  3. git checkout master
  4. git am *.patch
  5. 您获得与远程存储库相同的提交ID,消息等,以后可能会有用。


    gitk kdiff 这样的工具 NOT 会生成与 format-patch 相同的数据而你不会获取提交历史记录。如果您有此类数据,则必须使用git apply或生成上述补丁。

    请参阅:Difference between git format-patch and git diff

答案 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: