多人协作开发代码提交流程

发现有一些人在通过Github的仓库进行多人协作开发时,还不太明白怎么提交代码,这里以我现在实习的公司为例,写了一篇提交代码到所维护项目的仓库的流程。

从源仓库Fork代码到自己的Github 上

源仓库即weibocom/opendcp ,先进入源仓库,点击右上角的Fork按钮

5

回到自己的Github上,进入仓库列表,看到已经Fork到自己Github下的opendcp.

4

Clone代码到本地

从自己的Github 上克隆代码到本地,这里注意不能直接从源仓库克隆,否则自己是没有权限提交代码的

1
2
3
4
5
hui@pc:~$ git clone git@github.com:witchiman/opendcp.git
正克隆到 'opendcp'...
remote: Counting objects: 6953, done.
remote: Compressing objects: 100% (113/113), done.
fatal: The remote end hung up unexpectedly.00 KiB/s 0/6953), 28.01 KiB | 26.00 KiB/s

新建一个本地分支

这里假定我们进行开发维护的是multi-tenancy 这个分支,首先基于multi-tenancy 新建一个本地分支,这里为 jianhui,先checkout到multi-tenancy ,运行下面命令

1
2
3
4
5
hui@pc:~/GoProject/src/weibo.com/opendcp$ git checkout -b jianhui
M db_init/sql/jupiter.sql
A jupiter/dao/account.go
M jupiter/dao/instance.go
切换到一个新分支 'jianhui'

以后就在jianhui 这个分支下进行开发

提交代码到自己Github的仓库

本地开发了一段时间,有一些新的变更需要提交

1
2
3
4
5
6
7
hui@pc:~/GoProject/src/weibo.com/opendcp$ git status
位于分支 jianhui
要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存)
修改: db_init/sql/jupiter.sql
新文件: jupiter/dao/account.go

先提交到本地仓库

1
2
3
4
hui@pc:~/GoProject/src/weibo.com/opendcp$ git commit -am "This is a test"
[jianhui d285716] This is a test
3 files changed, 240 insertions(+), 36 deletions(-)
create mode 100644 jupiter/dao/account.go

push到自己Github 上的仓库里,由于是第一次push,远程仓库并没有对应本地的分支,需要关联并建立与远程仓库的追踪

1
2
3
4
5
6
7
8
9
10
hui@pc:~/GoProject/src/weibo.com/opendcp$ git push -u origin jianhui
对象计数中: 197, 完成.
Delta compression using up to 4 threads.
压缩对象中: 100% (118/118), 完成.
写入对象中: 100% (197/197), 57.16 KiB | 0 bytes/s, 完成.
Total 197 (delta 134), reused 109 (delta 72)
remote: Resolving deltas: 100% (134/134), completed with 64 local objects.
To github.com:witchiman/opendcp.git
* [new branch] jianhui -> jianhui
分支 jianhui 设置为跟踪来自 origin 的远程分支 jianhui。

以后直接 git push 就行了

1

这时看到自己Github 的opendcp仓库里已经有jianhui 这个分支了

提交代码到Weibo的Github仓库

需求已经实现,经本地测试没问题,这时可以请求提交代码到源仓库。我们进入自己Github下的opendcp仓库里,点击上图那个new pull request 按钮。

如果没有问题的话,会弹出一个Create pull request 的按钮。页面下方是发生变更的文件信息。

3

确认无误后,点击Create pull request 。

2

会跳转到一个页面让添加说明信息,填写完,继续点击右下角的Create pull request,等待源仓库的维护人员接受本此提交就行。

更新本地代码

还有一点要说的是,如果源仓库有新的变更,本地需要及时跟进。如果直接 git pull ,拉取的是自己Github 上Fork的的代码,而之前Fork到自己Github的代码是不会与源仓库同步更新的,我们就pull不到最新的代码。

我们需要在本地添加新的远程仓库的追踪,使用git remote add 命令,weibo 是自定义的名称,最后一个参数是仓库地址。

1
hui@pc:~/GoProject/src/weibo.com/opendcp$ git remote add weibo git@github.com:weibocom/opendcp.git

查看已经追踪的远程仓库

1
2
3
4
5
hui@pc:~/GoProject/src/weibo.com/opendcp$ git remote -v
origin git@github.com:witchiman/opendcp.git (fetch)
origin git@github.com:witchiman/opendcp.git (push)
weibo git@github.com:weibocom/opendcp.git (fetch)
weibo git@github.com:weibocom/opendcp.git (push)

拉取要开发的分支最新的代码,这里还假定是multi-tenancy分支

1
2
3
4
5
hui@pc:~/GoProject/src/weibo.com/opendcp$ git pull weibo multi-tenancy
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 5 (delta 3), reused 5 (delta 3), pack-reused 0
展开对象中: 100% (5/5), 完成.

现在,本地的代码就与源仓库保持一致了,这时也可以push到自己Fork的仓库中,使其保持代码同步更新。