在XSKY的第一个项目Pluto中,我们的git开发模式是这样的
- 所有人将Overload(源代码库)中的Pluto fork到自己的代码库中,并从自己的代码库拉取代码到本地
- 在本地项目中关联源代码库的Pluto项目地址
git remote add upstream [源Pluto项目地址]
- 在本地修改代码,暂存,提交,并推送到自己的远程代码库
- 修改代码前需要同步源代码库的Pluto并切换一个新的分支进行开发(切忌在master上开发)
- 开发结束后可能需要再次同步代码库并处理冲突
git fetch upstream git rebase upstream/master
- 通过PR的方式提交到源代码库
- 通过组员,组长的code review,以及CI的检查
- 采用Squash Merge的方式将所有的commit的合并成一个commit再提交给源代码库
- 删除用于开发的分支,同步源代码,回到步骤3
错误的方式
- 所有的提交全在一个master上进行操作,写完之后直接提交到远程分支并向原仓库发起PR
- 这种方式当你需要从原仓库拉取到本地master时,可能会因为PR过程中采用的squash merge,导致upstream/master和本地master的commit并不会完全一致,rebase 过程中会要求所有的commit重新组织,导致问题
正确的方式
- 本地的master不动,只用于与原仓库进行代码更新
- 所有的开发需要创建新的分支进行开发,开发完成后提交到远程分支并PR到原仓库,原仓库接受后,删除用于开发的分支,并使用fetch和rebase同步upstream/master和本地的master