7

如何从 github 应用补丁?

我尝试编译minisat,但在使用 clang 编译时遇到了两个问题。

第一个问题在这个 github 提交中得到解决,它是从原始 github 分叉的。由于变化很小,我可以轻松地修补代码以手动工作。

第二个问题在这个 github ( https://github.com/niklasso/minisat/pull/17 ) 中解决了,但是补丁没有应用于原始源。我可以通过复制修改后的文件来手动更新代码,但如果我能把这个补丁拉到我的本地目录中会更好。可以用 github 做到这一点吗?如果是这样,该怎么做?

4

3 回答 3

16

github 为单个提交和拉取请求提供补丁(尽管我找不到这方面的文档)。

.patch您可以通过简单地附加到原始 url 的末尾来生成补丁url。

因此,第一个使用https://github.com/JWalker1995/minisat/commit/a8cef9d932552b2ec155d5e0d44d8fe0efa3a235.patch ,第二个使用https://github.com/niklasso/minisat/pull/17.patch

通用 urlgithub.com/original/url/id将成为github.com/original/url/id.patch生成补丁。

就要运行的命令而言,这变成

  1. 将补丁下载到您的 git 存储库

    wget --output-document=issue1.patch https://github.com/JWalker1995/minisat/commit/a8cef9d932552b2ec155d5e0d44d8fe0efa3a235.patch
    wget --output-document=issue2.patch https://github.com/niklasso/minisat/pull/17.patch
    
  2. 应用补丁

    git apply issue1.patch
    

    检查更改,添加并提交。对补丁 2 重复相同的操作。

您可以查看这篇博文,了解有关创建和应用补丁的精彩教程。

于 2015-02-12T18:02:16.283 回答
0

您可以分叉项目并将第二个添加为第二个远程,然后您可以将所需的分支合并到您的项目中。

git remote add remote2 git@github.com:niklasso/minisat.git git fetch remote2 git merge remote2 master

然后更新的代码将合并到您的项目中。一旦拉取请求将应用于原始存储库(合并的拉取请求),您将看不到任何更改,因为您的副本中已经有了提交 ID。

于 2015-02-12T18:01:16.663 回答
0

除了git apply 1.patch另一个答案中提到的命令之外,您还可以使用patch命令:patch -p1 < 1.patch

还有gh来自 GitHub CLI 的命令,可以像gh pr checkout 1.

于 2021-09-16T12:39:01.570 回答