在您自己的Github fork中有选择地导入其他人的pull请求

时间:2013-07-31 10:14:52

标签: git github pull-request git-fork

好的,我没有找到更好的方法来标题我的问题。解释方案更容易。但请记住这是一个Github问题不是一个Prototype-JS问题(请不要为我添加标签)

场景

我正在研究基于Prototype的Web应用程序。我发现1.7.1(对作者没有责备)有一些令我们讨厌的错误。幸运的是,对于我们来说,所有这些错误确实通过已经被主分支接受的拉取请求进行了公开修复。

我的老板和我讨论了为我们发现的每个不兼容性修补Prototype 1.7.1之间的选择,我们同意在即将生产的应用程序中使用“开发”版本不是最好的选择,所以我们的想法是为了修补我们的Prototype版本。

我对此负责。由于我想跟踪我的公司应用于Prototype的更改(即使我是唯一一个触摸JS文件的人),我想以一种有效的方式来做这件事,可以留给后人。

Github允许您将任何项目分成您自己的工作区,以便您可以随意使用它。我想通过实际将它们链接到对原始项目的现有拉取请求来跟踪我导入Prototype的补丁。

一般性问题

鉴于Github上的一个通用开源项目,我已经分叉了,有没有什么方法可以找到提交给原始分支的pull请求,并选择在我自己的fork中“导入”它(假设文件应该是差异兼容的),以便它将应用于我的分支?

当然,随着时间的推移,这让我可以跟踪记录(包括评论和讨论)关于我选择在我的分支中导入的 PR以及我没有的PR。

3 个答案:

答案 0 :(得分:2)

  

鉴于Github上的一个通用开源项目,我已经分叉了,有没有什么方法可以找到提交给原始分支的pull请求,并选择在我自己的fork中“导入”它(假设文件应该是差异兼容的),以便它将应用于我的分支?

是。我就是这样做的:

  1. 将存储库分叉到myaccount / project
  2. 在本地克隆myaccount /项目
  3. 对每个有您要修复的修补程序使用git remote add [remote name]
  4. 运行git fetch --all下载所有内容
  5. 使用git merge --no-ff -m [remote-name]/[branch-name]合并您希望包含在fork中的每个Pull Request的更改。 --no-ff为审计能力创建合并提交,-m让您在编辑器中指定消息(因此您可以在合并提交中包含指向Pull请求的链接)。
  6. 完成合并后,您可以使用git push使用已合并的各种Pull请求更新GitHub上的fork。

答案 1 :(得分:1)

我有选择地添加拉取请求的工作流程如下:

  1. 先叉。

  2. 然后在本地克隆fork。

  3. 应用来自请求请求的补丁。

    • 例如,如果您的拉取请求位于类似的网址上:

    https://github.com/mafintosh/peerflix/pull/188

    • 您可以像这样从url创建和下载手动补丁文件:

    https://github.com/mafintosh/peerflix/pull/188.patch

    在网址中添加.patch会在上创建一个补丁文件 GitHub。

因此工作流程如下:

$ wget https://github.com/mafintosh/peerflix/pull/188.patch

$ git am 188.patch

如果要在申请母版之前在分支上进行测试

那么适用于它的规则与应用任何其他补丁程序相同。

1. Create a Branch.
2. Apply the patch 
3. Test the Patch.
4. Merge to master.

答案 2 :(得分:0)

我发现了另外两种方式。

由于PR来自fork中的分支,我可以从任何作者的源分支开始在我的本地clone / branch上创建自己的Pull Request。对于通过Github Web UI进行的编辑,这通常更容易,因为每次从UI编辑文件时,Github都会自动创建patch-x分支。这基本上是我可以通过@johndbritton建议从控制台做的,但是从更简单的用户界面完成。

最好的方法是使用git cherry-pick手动提交提交。如果提交被搁置,我可以幸运地选择一个提交。

例如,如果我选择我喜欢的PR,我可以使用git cherry-pick [commit]进行PR中的每次提交,修复可能出现的冲突