如何向开源Git仓库贡献代码?涉及的工作流程是什么?

3

我必须承认我从未为开源项目做出过贡献,因为我不理解工作流程。我多次查看git文档,但发现它太难了。

我曾经使用像Team Foundation Server (TFS)或者Visual Studio Team Services (曾经的Visual Studio Online)这样的前端,向私有仓库提交pull requests给我的客户。我也可以轻松地使用git命令行在git仓库中单独工作,因为这个工作流程很简单。但我想学习使用git命令行工作流程为开源项目做出贡献。

我阅读了github文档中的以下文章。我想我大致了解了工作流程,但我不确定,而且我害怕在别人的项目上试用它。

  1. Fork a Repo
  2. 同步一个fork
  3. 关于pull requests
  4. 关于协作开发模型
  5. 从fork中创建一个pull request
  6. 创建一个pull request

我真正需要的是有人把步骤简化成几个易于理解的要点。

从目前我的研究来看,这就是我所了解到的。

让我们假设我们想为一个名为Boo Boo的虚构项目做出贡献,其所有者名为Baabaa。让我们假设我,即想要为 Boo Boo 做出贡献的人,拥有Github账户,链接如下 https://www.github.com/Water-Cooler-v2/

以下是我知道工作流程的步骤。在这些步骤之后,我不太清楚该怎么做。

  1. 首先,我将 Boo Boohttps://www.github.com/Baabaa/Boo-Boo fork 到了我的 Github 账户中。现在,我在 https://www.github.com/Water-Cooler-v2/Boo-Boo 上拥有自己的 Boo Boo fork。

  2. 接下来,我将我的 Boo Boo 克隆到电脑上的一个文件夹中:

    MrWaterCooler@WatersComputer MINGW64 /c/WaterCooler/MyFolder/ $ git clone https://www.github.com/Water-Cooler-v2/Boo-Boo.git

    这样就将我本地文件夹中的代码库链接到了名为 origin 的远程仓库,它指向了我的 fork,即 https://www.github.com/Water-Cooler-v2/Boo-Boo.git

  3. 然后,我还要将我的本地仓库(位于 Myfolder/Boo-Boo)与 Baabaa 的远程仓库链接起来。我可以通过复制 Baabaa 仓库的 URL 并输入以下命令来实现:

    MrWaterCooler@WatersComputer MINGW64 /c/WaterCooler/MyFolder/Boo-Boo $ git remote add upstream https://www.github.com/Baabaa/Boo-Boo.git

  4. 接下来,我要验证新的名为 upstream 的远程仓库是否已经链接成功:

    MrWaterCooler@WatersComputer MINGW64 /c/WaterCooler/MyFolder/Boo-Boo $ git remote --v

  5. 然后,我要将远程 upstream 的所有分支都拉到本地仓库中:

    MrWaterCooler@WatersComputer MINGW64 /c/WaterCooler/MyFolder/Boo-Boo $ git fetch upstream/master

  6. 现在,我要 checkout 我本地的 master 分支(默认情况下会自动 checkout),但我还是要执行一下这个命令,以确保它被 checkout 了:

    MrWaterCooler@WatersComputer MINGW64 /c/WaterCooler/MyFolder/Boo-Boo $ git checkout master

  7. 然后,我会对本地仓库中的文件进行修改。在这个例子中,我将编辑一个已经存在的文件(未显示在下面的代码中,因为那不需要使用任何 git 命令),并添加一个名为 MyNewFile.txt 的新文件。

    MrWaterCooler@WatersComputer MINGW64 /c/WaterCooler/MyFolder/Boo-Boo $ touch MyNewFile.txt

  8. 现在,我要将 upstream/master 分支合并到我的 master 分支中:

    MrWaterCooler@WatersComputer MINGW64 /c/WaterCooler/MyFolder/Boo-Boo $ git merge upstream/master

然后,现在我不是很清楚的步骤是什么。 我要推送吗? 推到哪里? 我自己的分支(远程origin master)还是BaabaaBoo-Boo(远程upstream master)?

或者,我要创建一个拉取请求吗?

请您验证上述前8个步骤的工作流程,然后完成它吗?

2个回答

3

你的工作流程是正确的。

  • 始终在你的分支上创建自己的分支并将其推送到 origin。创建分支有助于维护者审查你的分支。

  • 一旦你的更改被推送,前往原始仓库,页面顶部应该有一个按钮提示你创建拉取请求。

通常,贡献开源项目最具挑战性的部分是找到从哪里开始。为了解决这个问题,有两个网站可以帮助你找到带有良好跳转问题的项目。

http://up-for-grabs.net/#/
https://yourfirstpr.github.io/


1
非常感谢。非常有帮助。 - Water Cooler v2
1
注意,提交几个PR后,你很可能会被授予该存储库的写入权限。对于我维护的项目表现出兴趣的任何人,我都会给予他们访问权限。 - Dennis
1
没问题。我喜欢鼓励人们做出贡献。去年我举办了一个黑客马拉松来实现这个目标。 - Dennis
1
@WaterCoolerv2 维护者会审查 PR 并对其中的问题添加评论。好的维护者会设置自动构建,这样你就能知道是否编译失败了。一旦确认无误,维护者会在 PR 上点赞或使用 :+1: 表示同意并合并修改。 - Dennis
“创建分支有助于维护者审查您的分支”,这句话的意思是,当别人没有这样做时,会让我感到很疯狂。 - Kelly Elton
显示剩余5条评论

2
您只需 fork 该仓库,将其克隆到本地电脑上,可以选择创建一个分支并进行更改。您在本地或自己的 repo 中如何工作真的无关紧要。您不必使用 GitFlow。您可以使用基于主干的开发或任何适合您的方法。完成后,您将其推送到自己的 repo。然后,去 GitHub 并针对原始 repo 打开 pull request。这就是全部内容。
关于添加原始远程 repo:将原始 repo 添加为远程的主要原因是当您打算从原始 repo 更新您的 fork 时(合并、变基、精选等)。如果您只想对原始 repo 进行一次性贡献,例如修复某些 bug,则通常不需要远程。尽管长期做出贡献时添加它是有意义的。

谢谢。我想我明白你的意思了。你的意思是:创建一个专门的分支来完成你的工作,因为这比在本地主分支上完成要好。那很好。然后你添加的最后两个步骤是:(1)将你的本地 master 推送到 你的派生 远程 origin master。然后,转到 BaaBaaBooBoo 存储库并创建一个新的拉取请求,让他们从你的派生中拉取。我的总结对吗? - Water Cooler v2
1
@WaterCoolerv2 差不多了。你不必去原始存储库创建 PR。转到你自己的存储库,单击“Pull Requests”,然后单击“New Pull Request”。对话框中的下拉菜单将提供原始存储库。因此,你可以从那里针对原始存储库创建 PR。 - Gordon
我确实同意分支使得PR接收者更容易处理,因为PRs事实上被冻结了(当然,除非你不断地向它们推送)。最终,我认为人们应该使用他们最有效率的工作流程。这就是为什么我说“可选择性地创建分支”。 - Gordon
@Gordon 我更喜欢保持分叉 origin / master 不变,这样我就可以快进合并 upstream / mastergit fetch upstream && git merge upstream/master origin/master --ff-only.Git 的伟大之处在于你可以拥有如此多的工作流程。 - Dennis
你为什么没有使用Gitflow? - Alec von Barnekow
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接