14

我有一个补丁文件。

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

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

但我不能使用 git 来做到这一点。Git 没有应用我的补丁。它抱怨

Patch 没有有效的电子邮件地址。

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

4

4 回答 4

9

Git 创建的补丁旨在与 Git 工具一起应用。利用

git apply <patch>

如果补丁不是用 Git 创建的,那么只需在 Git 的“背后”使用补丁程序。通常这是程序“补丁”:

patch <patch>

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

于 2013-06-27T17:09:09.507 回答
6

这适用于从许多开源项目使用的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 存储库,则可以使用常规命令,

  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 之间的区别

于 2013-10-01T21:36:41.993 回答
1

如果使用图形界面而不是命令行对您更有帮助,那么有很多工具可以使在 Git 中做很多事情变得相对简单,包括应用补丁)。我发现的最有用的是SourceTree,但如果你搜索的话,我相信还有其他不错的。

于 2013-06-27T18:28:31.240 回答
1

如果您的提交消息有一行以From:. 例如,我有一个补丁修复了一个错字,在提交消息的正文中我有:

Fixes a typo.
From: 873524cab1 "Introduced some bug on this commit"

由 format-patch 生成的 .patch 文件有两From:行,其中一行是电子邮件地址,另一行是我的糟糕消息。Git am 拿起第二From:行并试图找到电子邮件地址。

解决方法是将提交消息更改为不在From:行首。

于 2015-07-27T15:52:24.313 回答