设为首页 收藏本站
查看: 689|回复: 0

[经验分享] 分布式版本控制工具:git与Mercurial

[复制链接]

尚未签到

发表于 2018-1-16 09:22:20 | 显示全部楼层 |阅读模式
说到版本控制工具,很多人可能都会马上想到CVS和Subversion,但自从开始使用git以后,我在自己的开发过程中都会优先选择git而非前者。  最早从今年初就已经开始用git。刚开始的时候的确会感到git比较复杂。一个原因是它不同于Subversion这样的集中式版本控制系统,在Subversion中只有一个仓库(repository),许多个工作目录(workingcopy),而像git这样的分布式版本控制系统中,每一个工作目录都包含一个完整仓库,仓库之间内容可能不相同,可以进行仓库之间的同步。另一个原因是git的命令非常之多,而它本身的概念也比较复杂(虽然 Linus说git是“stupid contenctracker”,但其实这个东西不适合傻瓜使用),还分repository、index、workingtree等,直接使用也会比较麻烦,所以实际上我一直都是使用cogito,只有必要时才直接使用git。
  为什么要使用分布式的版本控制系统?Subversion有什么不好?
  我最开始使用Subversion时一直觉得有一点很不爽,如果我想把某个已有的项目使用Subversion来进行管理,首先要建立一个仓库,然后把文件import到仓库,最后再check out,然后在checkout的工作目录中进行修改。为什么要那么麻烦?我只是自己一个人进行开发而已,为什么非要有一个仓库?此其一,只是不爽而已。
  第二点使我没有办法使用Subversion、不得不寻找其他的工具的原因是,我需要在几台电脑上同时进行开发,我希望在每一台电脑上都能使用版本控制工具。所以,我需要有一个放在优盘上的仓库,这个时候使用Subversion就有问题了。一来当你提交时你必须得把优盘插上电脑,每次提交都得插上;二来仓库在优盘上的位置不能改变,否则路径改变的话使用file协议拷贝出来的工作目录就废了。我查过svnpropset的帮助,似乎可以改变仓库地址,但我不会,网上也没有搜到。
  这两个问题git都可以很好的解决(严格来说我使用的是cogito)。要把已有的文件加入版本控制的话使用cginit一条命令即可。而分布式的版本控制系统解决第二个问题实在是再适合不过了。在优盘上建立一个仓库,不同机器上的仓库在开发时就尽管commit到本地的仓库好了,在要换机器之前先把修改push到优盘上的仓库,到其他机器上时pull出来,然后merge一下就好了。cogito可以直接使用update完成这两步操作。而优盘上仓库路径如果有改变的话可以使用cg-branch-chg很方便地修改远程仓库的地址。实际上可以认为优盘上的仓库就是一个中央仓库,所以有许多个仓库其实并不是一件可怕的事情,完全可以像使用集中式的版本控制系统那样自定一个为中央仓库即可。但分布式的版本控制系统不强制你这么做,给你更多的灵活性。
  更加让我喜欢git的是它的branch概念。我在使用Subversion的时候从来没有用过,因为它的branch概念是通过copy来实现的(当然不是实际的拷贝),不够直观。目前我只用branch来进行实验性的开发。而Linus使用git管理内核开发时通过branch整合多人所做的修改,内核有那么多的branch,Linus通过git可以很轻松的merge这些不同的branch所做的修改,最后从他自己的仓库中发布新版本的Linux内核。
  此外,git对磁盘空间的利用也更高效(不过需要定期对仓库使用git repack -d命令),其他方面性能也都很出色。想想它要管理Linux内核那么大的项目就可以知道了。
  Linus在Google TechTalk上做过git的介绍,以及他是如何使用git来管理内核开发的。他的演讲里面对分布式版本控制系统的好处有更好的说明。不过Linus自己也承认自己是个“strong opinionperson”,他在演讲的时候多次说集中式的版本控制系统没有前途,因此,Subversion的开发者想要开发一个更好的CVS其实是脑子出了毛病,实在是太“offensive”了。好在他是Linus,大家都知道他的个性。
  但是,但是……git很好,可它不跨平台,至少在非Linux平台上运行得没有那么好,在非Linux文件系统上会有麻烦。虽然我不在Windows上做开发,但是最近要在Solaris上做开发,我不想花时间在Solaris上把git装起来,而且如果以后要和其他使用Windows的人合作,我可不想再使用Subversion。所以,我需要一个替代git的工具。
  这篇文章介绍了Mozilla“移向”新版本控制工具时是如何做出选择。(原文强调是“move”而不是“pick”,因为最后的候选者都很好。)首先肯定要用分布式的,然后在4个分布式的版本控制工具中筛选,git和Monotone因为支持平台问题而被排除,剩下Bazaar和Mercurial。前者有Canonicol在支持。而后者已经是OpenSolaris等著名项目的版本控制工具,而且有着非常完善的文档,可以很方便地使用Python的WebServer发布项目。在Mozilla的版本控制工具选择中,Mercurial最终因为性能而胜出。所以,我也决定转到Mercurial,看了看文档,感觉和cogito很像,比git更简单,迁移过程应该会比较顺利。
  另外提一下,分布式的版本控制工具还有darcs,arch。前者是用Haskell编写,后者据说很复杂。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-435590-1-1.html 上篇帖子: git(创建,提交,回退) 下篇帖子: windows下安装git并创建一个仓库,git常用命令
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表