我有一个详尽的逐步说明,我想在此分享它,以便开发人员可以从中受益(我会回答我自己的问题)。
由于对开源项目做出的更改必须进行同行评审,因此通常会看到依赖git pull请求的工作流。不允许从直接克隆的存储库中提取请求(您需要自己的fork)。因此,以下是我维护健康分支并定期为开源做出贡献的步骤:
注意:步骤1,步骤2和步骤3仅在一个开发机器上为每个项目完成一次,以设置所有内容。
注意2:如果您要贡献的开源项目未将master用作默认的工作分支,则必须将以下步骤4)和7)的命令中所有对'master'的引用替换为该分支。
1)确保您在本地项目的“分支”上工作,而不是在指向项目源的克隆存储库上工作。为了创建一个Github项目,请访问https://github.com/entity/project,单击“ Fork”,然后为该分支选择一个合适的GitHub帐户。您的个人Github帐户。请注意,您分叉的项目“来源”将不再是原始项目存储库,而是您自己在Github上的分支。如果您要分叉私人项目,请谨慎对待隐私,因为您可能不希望您的分叉公开。
2)将您自己的项目fork克隆到开发计算机中,并将cd克隆到该目录中。
git clone [email protected]:yourgithubuser/project.git
3)将原始项目存储库添加为分支项目中的上游存储库。
git remote add upstream [email protected]:entity/project.git
现在,原始的主项目存储库是“上游”,而不是“原始”
现在出现了工作循环,在您处理分叉的项目时将重复此循环:
4)开始工作之前,请始终确保叉式仓库的主分支与原始项目仓库的主分支同步:
git checkout master
git fetch upstream
git merge upstream/master
git push origin master
5)在项目分支中创建一个新分支,以添加您想要提供的特定修补程序(以错误修正,跟踪器问题,文档部分等命名),然后切换到该分支。
git checkout -b myfixes
这将自动创建分支并切换到该分支。确保分支尚不存在。您可能还希望摆脱已经合并到文档中的旧修订分支(否则,项目中将有大量无用的分支)。您可以通过发出a查看本地分支git branch
,如果在该列表中找到已经与上游项目合并的分支,则可以执行以下操作:
git branch -D myoldfixes
git push origin --delete myoldfixes
重要说明:如果您已经在另一台计算机上的分支上工作,并且想要在新计算机上继续进行该工作,则需要在新计算机上以及在步骤5中重新执行步骤2、3和4,而不是执行git checkout -b myfixes您应该进行git checkout myfixes(删除-b)。否则,您可能会遇到不好的“分离头”状态(一种匿名分支)
6)在该分支上工作(例如,myfixes)并提交您的更改:
git commit -a -m "My fixes"
(或者,您可以暂存特定文件,而无需使用-a进行提交。您可以根据需要进行多次提交,但不要在分支中保留未提交的更改)
7)在进行修补时,原始上游项目存储库可能已更改(由于其他贡献者在进行处理)。因此,首先,您必须从上游目标分支重新建立当前分支(myfix)。换句话说,您需要在上游repo master分支的最新工作之上重播您的修复程序,以确保您的提交仍与上游的最新提交兼容。这将导致请求请求的快速合并,这就是我们想要的:
git checkout myfixes
git pull --rebase upstream master
注意3:这可能会导致冲突,但这是正常现象,解决问题是过程的一部分(这种情况在非常活跃的项目中经常发生)
注释4:如果分支中有许多提交,并且您是一个体贴的人,则可能希望将提交压缩为一个,以利于原始项目的维护者
8)解决了上一步中的冲突(如果有)后,您已在最新版本的上游主服务器上应用了这些修复程序。由于拉取请求是从您在Github上的分叉存储库发起的,因此您也希望保持同步:
git checkout myfixes
git push origin myfixes -f
9)最后,您可以转到Github https://github.com/entity/project(原始项目不是您的fork),然后单击“ Pull Request”。确保您选择上游仓库“ master”作为目标分支,并选择分支仓库“ myfixes”作为源分支(接受拉取请求后,该分支将自动为您删除)
请享用!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句