前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >杂记[0x01] -- gitblit多人协作冲突解决之道

杂记[0x01] -- gitblit多人协作冲突解决之道

作者头像
江涛学编程
发布2020-06-19 16:37:55
7690
发布2020-06-19 16:37:55
举报
文章被收录于专栏:江涛的博客江涛的博客

侃侃而谈

  • 对应程序员而言,Git是比CVS、SVN好用的去中心化的版本控制工具,常用于代码版本管理
  • 对应大众而言,就我从大学到工作接触的人来看,普及率不是很高,学习Git有助于知识管理吧,最经典的例子就是毕业论文不用一稿,二稿,三稿这样去命名,所有的我们直接一个文件搞定那就是毕业论文.doc

前期工作

在这里,我编写了一个真实的用户案例来跟大家分享一下Git版本冲突时,我们该怎么做?

在一个Git用户组gitStudy中,有三位选手,分别是g1,g2,g3三位同志。对项目gitStudy都具有RW+权限,其中,g1分配给了win10下的ataola账户,g2分配给了ubuntu下的root账户,g3分配给了ubuntu下的python账户。

故事由此开始!

产生冲突的情况分类

这里我把产生冲突的点列出来,并用带圈的阿拉伯数字表示,具体的请看楼下这张图。

g1:win10(ataola)

g2:ubuntu(root)

g3:ubuntu(python)

远程

同步

同步

同步

同步

添加了一个g1.txt

同步,添加g2.txt

不同步 ①

同步

同步

不同步 ②

同步

同步

不同步 ④

同步

不同步 ③

同步

同步

不同步 ⑤

同步

同步

首先是一楼的故事,我这边从远程创建了一个仓库叫gitStudy,之后在window和linux主机的不同用户下分别使用了g1,g2,g3三个账户去把gitStudy克隆了下来,此时,三者应该是同步的如一楼所示,没有问题吧。

其次是二楼的故事,ataola用户登录的win10这台电脑上,用户g1添加了g1.txt并附加内容我是 g1.txt之后提交到远程。紧接着二楼的用户root登录ubuntu后,先执行了git pull进行内容同步,然后创建了一个文件g2.txt并添加内容我是g2.txt,之后提交到远程。

这个时候用户python登录的ubuntu系统中,没有进行git pull,他先创建了一个g3.txt文件,并附加内容我是g3.txt,之后他以g3的身份提交到远程。这个时候产生了冲突①,我们来给它一个特写:

看到这里我期望你记住,在进行代码提交之前你不知道你就先pull! 先pull! 先pull。重要的事情说三遍。

那么我们来git pull一把,看看会发生什么?

可以看到它会叫你git merge对不对,我们把楼上两位合并起来来个特写如下:

之后我们进行git push就可以了,同样的我们来一个特写:

下面,我们把时间交给gitblit,请看其为我们发回来的远程最新画面,同样的我们来个特写:

因为是第一次产生冲突,那么我这边顺便讲下git log,通过这个命令我们可以在本地直观地看到对项目gitStudy的操作记录,同样的我们给它也来个特写。

通过观察远程的和本地的这两张特写,童鞋们有什么发现吗?

欧,不小心暴露了我的企业邮箱,行吧,反正这边也不能收发外界的邮件,看到就看到吧,不改了,佛系一点。

第一点,当git产生冲突时,会以最开始的同步点为起始点,拉出两条主线,并在冲突点之上建立一个同步点。

第二点,每一次git commit产生一串10位的哈希,但是你有没有发现,git merge的时候,只要取前面的7位就好了,这个也是很人性化的,谁喜欢打那么长,能区分提交就好了,这个同样适用于其他命令,例如版本回退的,这里不做展开。

好的,到这里我们巧妙地解决了冲突①带来的版本问题,值得纪念,这个时候我们可以给它打个标签用git tag来记录这一时刻,我们同样给它来个特写:

对应的远程也来一张特写,咔:

可以看到我们刚打的,还热乎的标签。

再次是三楼的故事,这里g1先执行了git pull同步远程代码,然后创建了一个文件gao_git.txt并附加内容搞 git,通过git push提交到了远程。

g2也在本地创建了一个文件gao_git.txt并附加内容g2 在搞git,然后进行git push发现提交不上去,产生了冲突②,我们给它来个特写:

g2这位选手你看到楼上那个#了吗?这可是root账户,脾气大着咧,哼哼,哪来的妖孽在此放肆,敢阻挡本座的提交,看本座怎么收拾你。

g2这位选手,使用了强制提交的必杀技,巧妙地终结了楼上那位的提交。

  • -f: -force, git push origin 分支名 --force 同样的我们给它也来一个特写:

接下来我们把画面交给远程同志,来看一下传回来的最新画面

可以看到,g2同志霸气地提交了add gao_git.txt from g2

好的,到这里我们巧妙地解决了冲突②带来的版本问题。这种方法在这边只做介绍,在你的个人的项目中你可以这么搞,因为很多时候人家也不高兴看你的提交的,只看结果代码就好,你怎么开心怎么来吧。但是要是团队的项目千万别这么搞,遇到比root还猛的同志,有可能会被暴揍一顿。

这里要隆重表扬下g3这位选手,自从上次v0.1.0事件以后,他印象深刻,记牢了我说过的先git pull,那么就让我们来看看在四楼的g3是如何处理冲突③的。

g3先创建了gao_git.txt文件并添加内容为g3 搞git,然后进行了git pullgit merge,如此伟大的时刻,不该给他来个特写吗?

通过楼上我们可以看到,g3选手先进行了git pull一把,发现系统并没有理他,自动合并失败,开启人工模式。通过ls命令查看了该项目的文件,然后通过cat命令查看了冲突文件的内容。从楼上我们可以清晰地看到,同文件下产生冲突是什么样的表现形式,大致是会有> < = 还有一串has。g3棒棒地完成了冲突的修复,

我们把话筒交给远程,看一下他发回来的最新画面吧!

好的,看到这里我们可以看到g3也解决了冲突。

留下一点时间思考,要是数据量非常大,不是单单的一个文件短短的一句冲突,那么这将是一件非常头大的事,所以由此可见有一个良好的团队队友的重要性。

在四楼,有想法的g1从g3选手的口中得知了g2这位选手干的好事后,露出了微微一笑,哼哼。通过分析g2的行为,他果断地认为g2这位同志(root)官大一级压死人,估计也不懂啥是分支,啥是生产线啥是测试线,就一个劲地强制提交master,行吧,随他去吧,g1选手机智地创建了一个分支g1,然后进行了提交,解决了冲突④,我们给他也来个特写:

可以看到g1同志先通过git branch创建了一个分支,然后通过git checkout切换到这个分支,然后在gao_git.txt文件夹下添加内容g1 搞 git,之后进行提交,如下:

这里提交分析可以看到是用git push -u origin 分支名

我们连线一下前方记者远程,看一下他给我们发回来的最新画面

好的到这里四楼的冲突④已经解决,我们从楼上这幅图看到刚才创建的分支g1辣眼睛地出现在我们面前。

我们把目光转向五楼的g2这位同志,g2同志通过远程登录了系统看到楼上这张美丽动人的图后,脸红了起来,意识到自己的错误后,后面的行为就很低调了。

那么,我们来看看g2又是如何解决冲突⑤的呢? 让我们带着期待的目光往下看

  • git fetch --all
  • git reset --hard origin/master

还是把话筒交给远程,看看最新发回的画面,远程你好,我是ataola,最近咋样啊?

远程:我很好,谢谢关系,请看楼下

看到这里,我们已经解决了一楼到五楼的五种场景下的冲突问题,你学会了吗?

最后,我们打一版tag吧。

好的到这里,今天的故事就要和大家说再见了,让我们下期再会!

友情连接

Git客户端工具

开源

Git:http://git-scm.com/

TortoiseGit:http://tortoisegit.googlecode.com/

Eclipse/EGit:http://eclipse.org/egit

Git Extensions :https://code.google.com/p/gitextensions/

GitX-dev:http://rowanj.github.io/gitx/

闭源

SmartGit/Hg:http://www.syntevo.com/smartgithg

SourceTree:http://www.sourcetreeapp.com/

Tower:http://www.git-tower.com/

参考文献

《git pro》: https://book.git-scm.com/book/zh/v2

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 江涛学编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 侃侃而谈
  • 前期工作
  • 产生冲突的情况分类
  • 友情连接
    • Git客户端工具
      • 开源
      • 闭源
  • 参考文献
相关产品与服务
腾讯企业邮
腾讯企业邮(Tencent Exmail)是腾讯基于多年海量用户邮件系统研发和运营经验,为企业量身订造的一套办公用邮箱系统。稳定、简洁和快速,整合了丰富的企业应用,涵盖资源共享、消息发布、组织管理等方面。腾讯企业邮和微信生态深度整合,为您提供便捷高效的移动邮件解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档