如何为GitHub中的其他人的代码做贡献?[关闭]


231

我想为GitHub中的某个项目做贡献。我应该吗?分支吗?推荐什么,怎么做?


61
另一个荒谬的
结局

4
我写了一份更详细的分步指南,介绍如何在Github上为Concrete5做出贡献,但是该过程可以应用于任何项目。检查一下
Joe Meyer

7
我真的看不出这是“没有建设性的”。单凭投票和观点就可以证明这是人们希望回答的一个普遍问题。
2014年


1
也许在有足够的多数票的情况下,先前已经结束的问题应被允许再次提出,并让人们再次对该话题做出贡献。
Peter Teoh

Answers:


180

理想情况下,您:

  1. 分叉项目
  2. 对存储库进行一个或多个注释良好且干净的提交。如果要修改多个零件或特征,则可以在此处建立新分支。
  3. 在github的网络界面中执行拉取请求

如果是新功能请求,请不要先开始编码。请记住发布一个问题来讨论新功能。

如果对该功能进行了很好的讨论并且有+1或项目所有者批准了该功能,则将问题分配给自己,然后执行上述步骤。

一些项目将不使用拉取请求系统。请与作者或邮件列表联系,以获取使代码重新回到项目中的最佳方法。



1
是的,请求请求。合并请求是令人讨厌的术语。
Yann Ramin

2
@MariusKavansky恰恰相反!一旦您知道该做什么,那么只有您贡献一下:)
hashbrown 2014年

在我为某个开源项目做出贡献之后。我认为打开一个问题讨论新功能是一个更好的主意。如果功能或问题经过充分讨论,则应将问题分配给自己,然后执行上述步骤。这是我的2美分。
wizztjh 2015年

@hashbrown,他在问到目前为止所需功能的“清单”在哪里。那些已被请求和+1的功能。
Pacerier '16

31

要添加到Yann的答案中,一旦您分叉了一个项目,就可以在所需的任何分支中进行开发(一个新分支,或原始项目中的一个分支)。

记得:


1
您可以在第二点(重新定支分支)上添加详细信息或链接吗?
JorgeArtware

1
@JorgeArtware我已经用一些说明更新基准的链接更新了答案。
VonC 2014年

@VonC我在这里提出一个问题,但是如果您认为有必要,我将提出一个全新的问题。除了拥有“直接的历史记录”之外,为什么我要重新设置基础而不是合并?换句话说,这就是我对某些项目做出贡献时的工作(在合并了我的功能分支的PR以开发并控制了分支之后): git checkout master; git pull;对于开发(同样地合并了我的功能分支),我可以想到的差异在阅读了“ pull vs pull --rebase”和“ merge vs rebase”之后,这只是历史。还有什么更深的吗?
linuxbandit

@grasshopper在“贡献”(此页面的上下文)一词中,您始终希望在推送之前将本地提交基于更新的分支之上:这将使维护者将所述贡献微不足道地集成到原始项目分支中。在您的问题所在的上下文中,可以肯定的是,您的PR已被接受,您可以合并而不是进行基础调整来更新现有分支。
VonC

(对不起,刚才更改了用户名以反映我的github)-@VonC谢谢,所以我在PR上读到的有关rebase的所有建议都有意义。为了反映我本地仓库中已接受并合并的PR,是否有任何常规做法(用基准代替合并),或者我可以做什么?如果我还要提交另一份公关该怎么办?
linuxbandit


10

这里有一个很棒的Railscast视频可以引导您完成整个过程。它还提供了许多很好的技巧,例如,展示了如何确定在贡献,使用测试,子模块等时可能要在哪个分支上工作。

尽管此截屏视频主要集中在Rails开发人员上,但是大多数信息对于向任何开源项目做出贡献都是有效的。


4

Github有许多与项目合作的方式。大多数项目使用的模型是请求请求模型。我已经启动了一个项目,以帮助人们提出他们的第一个GitHub Pull请求。您可以在这里进行动手教程,以进行首次公关

工作流程很简单

  • 在github中分叉仓库
  • 将仓库克隆到您的机器上
  • 进行分支并进行必要的更改
  • 将更改推送到GitHub上的fork git push origin branch-name
  • 转到GitHub上的fork看到一个Compare and pull request按钮
  • 单击它并提供必要的详细信息


2

技术工作流程

我建议以下工作流程:

  1. 分叉存储库(通过GitHub Web界面:“ Fork”按钮)
  2. 在分支的存储库中,复制URL
  3. 克隆(在命令行中)

    git clone <url-from-your-workspace>

  4. 输入刚刚创建的目录,然后创建一个分支

    cd <directory> git checkout -b <branchname>

  5. 现在进行更改

  6. 您可以在每次更改后创建一个或多个提交:

    commit -a

  7. 完成后,推送您的更改

    git push origin <branch>

  8. 在命令行中,您应该看到一个用于创建PR的URL。访问URL,然后单击按钮创建PR。

  9. 如果不是,请在浏览器中访问存储库,它将为您提供用于创建拉取请求的按钮

而已。

因此,基本上,您将存储库分叉到工作区,创建了一个新分支,然后将该新分支推送了。

如果以后您从相同的克隆存储库中获取更多PR,则应在创建另一个PR的另一个分支之前进行同步(从原始存储库中获取最新更改):

git checkout master
git remote add upstream <url-of-original-repo>
git pull upstream master

其他注意事项:

  • 该项目可能具有贡献准则:查找文件CONTRIBUTING.rst或.md
  • 您可能要遵循该项目的编码准则
  • 您可能首先要概述您的想法
  • 您可能需要查看项目的“拉取请求”选项卡,并检查是否存在打开的PR,合并的PR

这些建议可以帮助您避免将工作放入不会合并的PR中的麻烦。如果项目中有活动并且PR被合并,这是一个好兆头。如果有贡献准则,请遵循它们。

永远保持礼貌。请记住,项目的维护者绝没有义务合并您的PR。您是否有可以添加到项目中的有价值的东西?


1
详细的过程(比我9岁的答案更精确)。已投票。
VonC
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.