1. 准备工作
⽬前,我们所完成的⼯作如下
•
基本完成 Git 的所有本地库的相关操作,git基本操作,分⽀理解,版本回退,冲突解决等等。
•
申请码云账号,将远端信息clone到本地,以及推送和拉取。
这时候要⼲最重要的⼀件事情了,实现多⼈协作开发!为了做这件事情,我们需要先做⼀些准备⼯作。我们之前已经将项⽬ clone 到了指定⽬录,如
![](https://i-blog.csdnimg.cn/direct/ea6c7d4b1e934bb6828c4dbe9a33ef66.png)
我们在 windows 环境下,再 clone 同⼀个项⽬仓库,来模拟和你⼀起协作开发的另⼀名⼩伙伴
![](https://i-blog.csdnimg.cn/direct/1cf505bbdf3a4247910b8e58565f2ff3.png)
clone 成功
![](https://i-blog.csdnimg.cn/direct/544cc55e918949a58811b9e62ecefada.png)
本次是模拟了两个⽤⼾,实际开发中,每个⽤⼾都有⾃⼰的gitee/github账号,如果要多⼈进⾏协 同开发,必须要将⽤⼾添加进开发者,⽤⼾才有权限进⾏代码提交。
![](https://i-blog.csdnimg.cn/direct/e4d30fed5bd74e038271ba9d33858983.png)
邀请⽤⼾:
![](https://i-blog.csdnimg.cn/direct/6fcbee39db2644dca7a7bdeda526112d.png)
到此,相当于有了两个⽤⼾,分别在 linux 和 windows 上针对于同项⽬进⾏协作开发,我们的准备⼯作到此结束。
2. 同⼀分⽀下协作
⽬前,我们的仓库中只有⼀个 master 主分⽀,但在实际的项⽬开发中,在任何情况下其实都是不允许直接在 master 分⽀上修改代码的,这是为了保证主分⽀的稳定。所以在开发新功能时,常常会新建其他分⽀,供开发时进⾏迭代使⽤。那么接下来,就让我们在 gitee 上新建 dev 远程分⽀供我们使⽤:
![](https://i-blog.csdnimg.cn/direct/0f7595ebecb142298ce51d8dc0a5af1a.png)
![](https://i-blog.csdnimg.cn/direct/cbe661d0b41644149f55d0475c849d8d.png)
![](https://i-blog.csdnimg.cn/direct/022ec8af88b14f00b799ac0a18e4050d.png)
创建成功:
![](https://i-blog.csdnimg.cn/direct/63c5131e4817421abc218bc3e22f0f40.png)
创建成功的远程分⽀是可以通过 Git 拉取到本地来,以实现完成本地开发⼯作。接下来让我们和另⼀名开发的⼩伙伴都将远程仓库进⾏⼀次拉取操作,并观察结果
•
对于我们要操作的是:
git branch 只能查看本地分⽀,要查看远程分⽀需要加上 -r 选项,若同时查看本地分⽀和远程分⽀则需要加上 -a 选项,但前提是要pull
⼀下拉取最新的远端仓库,才能看到最新的内容。
![](https://i-blog.csdnimg.cn/direct/ad9e6bc278e74ed19220cd9550544cfc.png)
拉取后便可以看到远程的 dev 分⽀,接着切换到本地的 dev 分⽀供我们进⾏本地开发。
•
对于⼩伙伴要操作的是:
![](https://i-blog.csdnimg.cn/direct/d33342f8fcb5474dbcf2fddc191be4c2.png)
现在,你和你的⼩伙伴就可以在
dev
上完成开发。
⾸先,让我们在
dev
分⽀上进⾏⼀次开发,并
push
到远程。例如:
![](https://i-blog.csdnimg.cn/direct/89f632fe7d2c4f2c9d05eb58e6664069.png)
让我们来看看码云上⽬前仓库的状态:
![](https://i-blog.csdnimg.cn/direct/e0e683e71f804b26b6dfb9b353d64c0a.png)
⾄此,我们已经将代码成功推送⾄码云,接下来假如你的⼩伙伴要和你协同开发,碰巧也要对 file.txt ⽂件作修改,并试图推送,例如:
![](https://i-blog.csdnimg.cn/direct/4afbcb00032348e3950742c7a1e95a2d.png)
这时推送失败,因为⼩伙伴的最新提交和你推送的提交有冲突,解决办法也很简单,Git已经提⽰我们,先⽤ git pull
把最新的提交从
origin/dev
抓下来,然后,在本地进⾏合并,并解决冲突,再推送。操作如下:
![](https://i-blog.csdnimg.cn/direct/075181f38540481ebf6f9a046f82c76e.png)
解决冲突,重新推送:
![](https://i-blog.csdnimg.cn/direct/2be10596102646f8875e3bc2174916b1.png)
此时,我们看到远端的码云已经能看到我们的新提交了!
![](https://i-blog.csdnimg.cn/direct/2dd29971927d4e3a9d6acaa07051b5a6.png)
由此,两名开发者已经开始可以进⾏协同开发了,不断的
git pull/add/commit/push
,遇到了冲突,就使⽤我们之前讲的冲突处理解决掉冲突。对于你来说,要想看到⼩伙伴的代码,只需要 pull
⼀下即可。
最后不要忘记,虽然我们是在分⽀上进⾏多⼈协作开发,但最终的⽬的是要将开发后的代码合并到
master上去,让我们的项⽬运⾏最新的代码。接下来我们就需要做这件事情了:
先切换⾄
master
分⽀
, pull
⼀下,保证本地的
master
是最新内容。
![](https://i-blog.csdnimg.cn/direct/5605bb2ae2ee46c2bc4cf4fca0b72848.png)
再切换⾄
dev
分⽀
,
合并
master
分⽀,这么做是因为如果有冲突,可以在dev
分⽀上进⾏处理,⽽不是在在
master
上解决冲突。
![](https://i-blog.csdnimg.cn/direct/8d0ec569cb854fb6890c08c2ee717f08.png)
最后切换⾄
master
分⽀,合并
dev
分⽀,并推送到远端。
![](https://i-blog.csdnimg.cn/direct/e4813657647d4b5bb6c50a0467417ed2.png)
此时,查看远端仓库,master已经是最新代码了:
![](https://i-blog.csdnimg.cn/direct/e086ba35394749e4ba45518977656d55.png)
此时,dev 分⽀对于我们来说就没⽤了, 那么 dev 分⽀就可以被删除掉。我们可以直接在远程仓库中将dev分⽀删除掉:
![](https://i-blog.csdnimg.cn/direct/90bf01f6b2e84a04b021a8e400ff5ea2.png)
总结⼀下,在同⼀分⽀下进⾏多⼈协作的⼯作模式通常是这样:
•
⾸先,可以试图⽤ git push origin branch-name 推送⾃⼰的修改;
•
如果推送失败,则因为远程分⽀⽐你的本地更新,需要先⽤ git pull 试图合并;
•
如果合并有冲突,则解决冲突,并在本地提交;
•
没有冲突或者解决掉冲突后,再⽤git push origin branch-name推送就能成功!
•
功能开发完毕,将分⽀ merge 进 master,最后删除分⽀。
3. 不同分⽀下协作
⼀般情况下,如果有多需求需要多⼈同时进⾏开发,是不会在⼀个分⽀上进⾏多⼈开发,⽽是⼀个需求或⼀个功能点就要创建⼀个 feature
分⽀。
现在同时有两个需求需要你和你的⼩伙伴进⾏开发,那么你们俩便可以各⾃创建⼀个分⽀来完成⾃⼰的⼯作。在上个部分我们已经了解了可以从码云上直接创建远程分⽀,其实在本地创建的分⽀也可以通过推送的⽅式发送到远端。在这个部分我们就来⽤⼀下这种⽅式。
•
对于你来说,可以进⾏以下操作:
![](https://i-blog.csdnimg.cn/direct/8bc3fbcc53064735aa3aa3f7ec7de386.png)
•
对于⼩伙伴来说,可以进⾏以下操作:
![](https://i-blog.csdnimg.cn/direct/ab67ede597a844f2a5ce7c3cd9ba3c0d.png)
![](https://i-blog.csdnimg.cn/direct/ba3ebf7f1bb9457b9089b7f64a9b92ce.png)
此时,在本地,你看不⻅他新建的⽂档,他看不⻅你新建的⽂档。并且推送各⾃的分⽀时,并没有任何冲突,你俩互不影响,⽤起来很舒服,再来看下远端码云上此时的状态:
![](https://i-blog.csdnimg.cn/direct/7e502ba439a0423ca8addde5a410c2a8.png)
对于你的 feature-1 分⽀:
![](https://i-blog.csdnimg.cn/direct/70665985598845c7b08ebb58ca9cf343.png)
对于⼩伙伴的 feature-2 分⽀:
![](https://i-blog.csdnimg.cn/direct/65b9ae29d05444428ed5e73c735c4e9e.png)
正常情况下,你俩就可以在⾃⼰的分⽀上进⾏专业的开发了!但天有不测⻛云,你的⼩伙伴突然⽣病了,但需求还没开发完,需要你帮他继续开发,于是他便把 feature-2 分⽀名告诉你了。这时你就需要在⾃⼰的机器上切换到 feature-2 分⽀帮忙继续开发,要做的操作如下:
必须先拉取远端仓库内容
![](https://i-blog.csdnimg.cn/direct/5dced29bcd144bceb1d6b6826d490cb6.png)
切换到
feature-2
分⽀上,可以和远程的
feature-2
分⽀关联起来,否则将来只使⽤ git push
推送内容会失败:
![](https://i-blog.csdnimg.cn/direct/1512dd05241e470084d16e2e733e09cc.png)
切换成功后,便可以看⻅ feature-2 分⽀中的 function2 ⽂件了,接着就可以帮⼩伙伴进⾏开发:
![](https://i-blog.csdnimg.cn/direct/56345f129a4244038751129148dac982.png)
查看远程状态,推送成功了:
![](https://i-blog.csdnimg.cn/direct/e4d521abdb2f41f09371ab9c4d638822.png)
这时,你的⼩伙伴已经修养的差不多,可以继续进⾏⾃⼰的开发⼯作,那么他⾸先要获取到你帮他开发的内容,然后接着你的代码继续开发。或者你已经帮他开发完了,那他也需要在⾃⼰的电脑上看看你帮他写的代码:
![](https://i-blog.csdnimg.cn/direct/3a5fcbd2d3ac4aeabe6b5991c93019cc.png)
Pull ⽆效的原因是⼩伙伴没有指定本地 feature-2 分⽀与远程 origin/feature-2 分⽀的链接,根据提
⽰,设置feature-2和origin/feature-2的链接即可:
![](https://i-blog.csdnimg.cn/direct/76f64a0e331a4991b8da189a5d78d7d9.png)
⽬前,⼩伙伴的本地代码和远端保持严格⼀致。你和你的⼩伙伴可以继续在不同的分⽀下进⾏协同开发了。各⾃功能开发完毕后,不要忘记我们需要将代码合并到master中才算真正意义上的开发完毕。