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

tmp*_*ies 14 git patch git-patch

我有一个补丁文件.

我想将此补丁应用于我在git存储库中的代码.

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

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

补丁没有有效的电子邮件地址.

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

GoZ*_*ner 9

Git创建的补丁适用于Git工具.使用

git apply <patch>
Run Code Online (Sandbox Code Playgroud)

如果补丁不是用Git创建的,那么只需使用Git后面的补丁程序.通常这是程序'补丁':

patch <patch>
Run Code Online (Sandbox Code Playgroud)

应用补丁后,像往常一样在Git中添加和提交.


art*_*ise 6

这适用于从许多开源项目使用的pipermail下载的mbox文件.这可能不会在OP的情况下工作,但在使用相同的症状/问题的结果与pipermail提取的邮件/补丁.git am


备份文件并编辑它以添加一行,

From: name@domain.com (Proper Name)
Run Code Online (Sandbox Code Playgroud)

通常情况下,行已经存在,但反垃圾邮件功能可能已经转换的@标志文本.你可以用gnu sed命令修补一堆文件,比如

sed -ie 's/\(From:.*\) at /\1@/' *.patch
Run Code Online (Sandbox Code Playgroud)

这只是用@符号替换'at' .在此之后,git am应该接受它.


如果您可以访问git存储库,则可以使用常规命令,

  1. git checkout oldbranch
  2. git format-patch HEAD~4 这将使四个文件成为最后一次更改的补丁(更改您的案例的数量).
  3. git checkout master
  4. git am *.patch

您将获得与远程存储库相同的提交ID,消息等,以后可能会有用.


gitkkdiff这样的工具不会生成与format-patch相同的数据,也不会获得提交历史记录.如果您有此类数据,则必须使用git apply或生成上述补丁.

请参阅:git format-patch和git diff之间的区别.