使用git pull请求为开源项目做出贡献的工作流程是什么?(例如,通过Github)

Ger*_*man 25 git open-source github pull-request

我有一个全面的逐步描述我如何做到这一点,我想在这里分享,以便开发人员可以从中受益(我将回答我自己的问题).

Ger*_*man 56

由于对开源项目的贡献必须经过同行评审,因此通常会看到依赖于git pull请求的工作流.直接克隆的repos不允许提取请求(您需要自己的fork).所以这些是我遵循的步骤,以保持健康的分叉并定期为开源做出贡献:

注意:步骤1,2和3仅在单个开发计算机上执行一次以设置所有内容:

1)确保您在项目的"分支"上本地工作,而不是在指向项目的克隆存储库作为原点.要分叉Github项目,请转到https://github.com/entity/project,单击"Fork"并为fork选择合适的GitHub帐户.您的个人Github帐户.请注意,您的分叉项目"origin"将不再是原始项目仓库,而是您自己在Github上的分支.如果你要私人项目,请小心隐私,因为你可能不希望你的分叉是公开的.

2)将您自己的项目分支克隆到您的开发机器并进入该目录.

git clone git@github.com:yourgithubuser/project.git
Run Code Online (Sandbox Code Playgroud)

3)将原始项目仓库添加为分叉项目中的上游存储库.

git remote add upstream git@github.com:entity/project.git
Run Code Online (Sandbox Code Playgroud)

最初的主要项目回购现在是"上游"但不是"原产地"

现在来到您使用分叉项目时将重复的工作循环:

4)在开始工作之前,请务必确保forked repo的master分支与原始项目repo的master分支同步:

git checkout master
git fetch upstream
git merge upstream/master
git push origin master
Run Code Online (Sandbox Code Playgroud)

5)在项目fork中创建一个新分支,用于您想要贡献的特定修补程序(在错误修正,跟踪器问题,文档部分等之后命名)并切换到它.

git checkout -b myfixes
Run Code Online (Sandbox Code Playgroud)

这会自动创建分支并切换到它.确保分支不存在.您可能还想删除已经合并到文档中的旧修复分支(否则您的项目中将有大量无用的分支).您可以通过git branch在该列表中发出一个并且如果在该列表中找到已经与上游项目合并的分支来查看您的本地分支,那么您可以执行以下操作:

git branch -D myoldfixes
git push origin --delete myoldfixes
Run Code Online (Sandbox Code Playgroud)

重要提示:如果您已经在另一台机器上的分支机构上工作并希望在新机器上继续工作,则需要在新机器上重做步骤2,3和4,在步骤5中重做git checkout -b myfixes你应该做git checkout myfixes(删除-b).否则你最终会得到一个"超级头"状态,这是一个不好的(一种匿名分支)

6)在该分支上工作(例如myfixes)并提交您的更改:

git commit -a -m "My fixes"
Run Code Online (Sandbox Code Playgroud)

(或者,您可以在不使用-a的情况下暂存特定文件并提交.您可以根据需要提交多次,但不要在分支中保留未经修改的更改)

7)当您正在处理修复时,原始上游项目仓库可能已更改(由于其他贡献者正在处理它).首先,您必须从上游目标分支重新定义当前分支(myfixes).换句话说,您需要在上游repo master分支的最新工作之上重放您的修复程序,以确保您的提交仍然与上游的最新提交兼容.这将导致拉取请求的快进合并,这是我们想要的:

git checkout myfixes
git pull --rebase upstream master
Run Code Online (Sandbox Code Playgroud)

注意:这可能会导致冲突,但这是正常的,修复它们是过程的一部分(这种情况在非常活跃的项目中更常发生)

8)修复上一步的冲突(如果有)后,您已将修复程序应用于最新版本的上游主程序.由于拉取请求是从Github上的分叉存储库启动的,因此您希望保持同步:

git checkout myfixes
git push origin myfixes -f
Run Code Online (Sandbox Code Playgroud)

9)最后,您可以访问Github https://github.com/entity/project(原始项目而非您的分支)并单击"Pull Request".确保选择上游repo"master"作为目标分支,并选择forked repo"myfixes"作为源分支(在接受pull请求后,将自动删除分支)

请享用!

  • 您可以在4)中更新origin master.您可能在该合并中发生冲突,但如果您在开始处理仓库之前总是这样做,那么合并就没那么明白了 (2认同)