平常都是自己一个人在开发,一直都没有机会接触协同开发,平常使用 Github 时也就是简单的 add, commit, push,并由体会到 Git 带给我们
更多的好处,那么如何借助 Github 进行协同开发,现在来简单的尝试一下
准备工作
如果你想只是想简单的尝试下协同开发,而不像基于参与真正的开发,那么创建一个测试项目来实验一下是最合适不过的了
首先打开 Github ,接着点击 New repository,创建一个空项目,简便起见,我们在创建新项目时顺便勾选 Initialize this repository with a README
这个选项,这样我们的项目至少还有一个 README 文件,而不至于什么也没有
为了便于后文进行描述,这里约定
- 把拥有原始仓库的操作者称为 master
- 把 fork 了原始项目的操作者称为 follower
那么现在 master 已经创建好仓库了,接着 follower 也想和 master 一起开发这个项目,那么 follower 要做的就是在 Github 上 fork master 的这个项目
那么 follower 的 Github 上也有了一份这个项目的副本
接下来 follower 把项目 clone 到本地,复制项目的 ssh
打开 Git Bash,输入下面的命令 (请用复制的 ssh 替换掉
1 | $ git clone <follower ssh> |
稍等片刻,即可进行项目的开发了
对本地项目进行更新
follower 已经把项目 clone 到本地了,这里要注意的就是,每次进行开发时要保持跟 master 项目一样的进度,也就是把 master 的代码更新到本地
那么在更新之前, follower 要做的就是添加 master 的远端连接,这里需要 master 远端的 ssh,操作参考上一节,命令如下
1 | $ git remote add upstream <master ssh> |
添加成功过后就可以更新本地代码
1 | $ git remote update |
接着合并 master 的分支,(这里的 master 是指 upstream 的 master, 即远端的 master,而不是本地的)
1 | $ git merge upstream/master |
现在 follower 本地的代码已经更新完了,接下来就是进行项目的开发
对项目进行开发
因为 follower 是作为 master 合作者的,所以 follower 在开发时最好能建立一个分支,然后在分支上进行开发
1 | $ git banch dev |
上面两个命令分别是创建一个 dev 分支,并且把本地分支切换至 dev 分支
也可以使用下面的命令,创建加切换一起完成
1 | $ git checkout -b dev |
现在就已经到 dev 分支上了,那么我们就在这个分支上进行开发,因为项目很简单,所以简单修改下 README 即可,接着就可以 add、commit、push 三部曲更新 follower 的代码了
1 | $ git add . |
这时候 follower 进入 Github 就会发现在该项目下多了一行下面的东西
点击 Compare & pull request
,然后填写一些必要信息再点击 Create pull request
即可
至此, follower 的代码编写与提交就算完成,接下来就是 master 的任务了
合并分支
此时 master 在 Github 就可以看到在项目顶部栏上多了一个 pull request
那么点击去找到这个 pull request 请求就可以看到下面的信息
点击 Merge pull request
然后 confirm 就可以把 follower 更新的代码合并到自己的项目里。
此时 master 再在本地使用下面的命令就可以把远端的代码更新到本地了
1 | $ git pull |
同步本地代码
这里要注意的就是,如果 master 更新了代码,就会导致 follower 的本地与 master 的远端不一致,那么 follower 就没办法提交 pull request 了,所以 follower 在开发前最好进行代码的更新
1 | $ git remote update |
同之前的更新操作是一样的。或者使用下面的命令进行更新也是可以的
1 | $ git fetch upstream |
尽量减少冲突
用 Github 进行协同开发我觉得实在所难免,但要尽量的减少冲突,那么就需要在进行开发的时候做好一个约定,大家在进行开发的时候就按照这个约定进行开发。
其次,在 Github 上开发的项目最好不要上传一些不必要的文件,比如 IDE 的配置文件( Intellij IDEA 的 .idea、*.iml) 等,那么如何忽略这些文件,或者如果你已经开始了一些项目,怎么把 Github 上的不必要的文件去掉而不影响本地,可以参考我的另一篇文章 如何管理你Github上的开源项目
多说一句
因为平常都是一个人在写代码,所以还没有机会尝试如何去进行真正的协同开发,但是这又是一个必备的技能,所以在简单的实践过后,分享了一下自己的经验。因为没有实际合作经验,难免有疏漏和不足,所以在实际开发中遇到了问题还需要自己去查阅,具体情况具体分析,这样协同合作才能游刃有余。