Skip to content


为什么选择git作为版本管理工具

团队组建已经半年有余,也该写一些东西了。

团队最初搭建的时候,有很多的东西是必须确定的,比如版本管理工具等。这些东西一旦定下来,要么以后就完全改不了,要么就是变更的代价非常大,所以必须慎重。这里就说一下为什么我们选择git。

选择一个好的版本管理工具是可以达到事半功倍的作用的。因为自信团队成员的能力不弱,所以在学习门槛的高度上就没有做太多的思考,不会自学好了。结合团队情况,考虑的角度有

  • 熟悉程度
  • 操作系统支持程度
  • 客户端支持程度
  • 离线操作能力
  • 并行开发能力
  • 对运维的支持能力
  • 扩展能力
备选的工具有

  • svn
  • mercurial (hg)
  • git
请注意:这里结合我团队的情况,例如我们的主力开发机全部是Mac,辅助的测试机器为WinXP,Win7,我们的Server是Linux(Ubuntu/CentOS);我们的生产环境需要一个跳板机器才能登陆上去,我们的开发、测试环境无法直接联通;我们的开发能力也一般。

SVN

  • 熟悉程度:★★★★☆
    SVN在IT界至少有将近十年的历史了吧,所以大家都比较熟悉
  • 操作系统支持程度:★★★★★
    老牌劲旅,各个系统的支持程度非常没问题
  • 客户端支持程度:★★★
    在Mac上没有看到非常好用的,Versions 貌似很好用,但是收费,所以也没用。至于乌龟SVN,那就更别说了。
  • 离线操作能力:☆
    鉴于我对SVN的理解,这就别提了,一个矬字了得。
  • 并行开发能力: ★★★
    团队上八成的功能都是可以分开进行的,所以相互之间干扰不会太大。但是SVN的合并功能啊,能让武大郎蹦起来打飞机。
  • 对运维的支持能力:★
    因为团队中是通过跳板机到生产环节,所以SVN是无法直接把代码输送到线上的,只能通过打包等方式。
  • 扩展能力:☆
    我完全不会嘛
  • 综合评分:★★★
    从这分数也就意味着基本上跟SVN拜拜了

Mercurial(hg)

  • 熟悉程度:★★★★☆
    从上一个团队开始,我们就深度使用hg,所以对hg是非常的熟悉,而且我个人非常认同hg保留一切历史的哲学。
  • 操作系统支持程度:★★★★★
    Python作品,对各个系统的支持均非常赞
  • 客户端支持程度:★★★★
    在之前,Mac上有MacHG,这是一个非常好用的客户端。而且在合并的时候可以使用P4Merge,这也是非常赞的。
  • 离线操作能力:★★★★★
    hg作为一个分布式版本管理系统,离线能力必然不在话下。
  • 并行开发能力: ★★★★
    结合我写的hgflow,hg的并行开发能力是没有问题的。但是由于hg哲学的问题他会保留一切历史,比如我本地的feature也会保留,但是这些都是没用的,而且会随着历史的演进不断的积累,会成为项目的垃圾累赘。
  • 对运维的支持能力:★★★★
    可以在跳板机上增加一个临时的repo,实现代码对生产环节的推送。
  • 扩展能力:★★★★★
    直接用Python扩展,我的hgflow就是一个标准的扩展程序。而且我熟悉嘛。
  • 综合评分:★★★★
    主要还是不断增加的历史垃圾给hg减了一星

git

  • 熟悉程度:★★★☆
    因为有hg的经验,所以git也会熟悉的比较快,但是一些高级的命令还不是很熟悉。
  • 操作系统支持程度:★★★☆
    win总是git的一个痛,不过我们不在win上开发,所以这个并不是大问题
  • 客户端支持程度:★★★★☆
    其实一直没找到一个非常好用的客户端,但好在git的命令行非常方便,而且团队觉得这无所谓。而后来发现了 SourceTree 这个应用,这是我见过的最完美的git/hg客户端,而且1.5版之后还支持git-flow/hg-flow
  • 离线操作能力:★★★★★
    这就别说了嘛
  • 并行开发能力: ★★★★★
    git的哲学对并行开发支持非常赞,而且这是他出现的主要目的。
  • 对运维的支持能力:★★★★
    和hg处理方式几乎一样。
  • 扩展能力:☆
    这个我也完全不会,但是git的扩展现在非常完备,所以也应该不用自己开发。
  • 综合评分:★★★★☆
    git看来是最好的选择,尤其是 SourceTree 的出现。

总所上述,我们决定选择git作为我们的版本控制软件,不会的大家多学学即可。

另,再次推荐 SourceTree ,天然的支持 git-flow/hg-flow,社区支持 github/bitbucket,所以用起来非常的爽。而且结合P4Merge,基本上解决了我遇到的所有问题。而且 SourceTree 是免费的,只要申请一个免费的 License 即可。

Posted in 项目管理.

Tagged with , , , .

  • http://whhnote.blogspot.com Hank Wang

    git有github, 大勝XD

  • matao

    替svn说句公道话,可以通过在跳板机上使用svnsync做代码更新

  • Pingback: 使用git的一些问题的补充 – Behind the Code

  • Yuequan

    git 好用, 还得看怎么用,出秘籍吧老大,多些实战技巧。

  • engineer

    能说下git是怎么更好的比SVN支持并行开发吗?
    项目中也遇到了并行开发导致的合并代码困难的问题,想了解下怎么解决这个问题

    • http://weiye.info 苇叶

      并行开发,依赖轻量级的分支和优秀的合并工具。 git的branch和merge都很完美,建议你看看git flow 非常适合团队开发 http://ihower.tw/blog/archives/5140/

  • http://weiye.info 苇叶

    你的博客不支持gravatar么? 怎么没头像。 另外你们现在全用mac机器了么,只考虑mac的客户端?

  • http://weiye.info 苇叶

    我也支持git。 但是你们没有考虑到代码安全,git的权限管理还是挺不足的,所以对很多公司来说,是很难转向git的。另外svn的merge已经改进了很多,你的了解处于上上个版本。 svn 1.5 1.6 对分支和合并有了很大的改进,伟铭你可以去了解下。 所以我还是svn + git-svn吧

    • Yuequan

      你把权限管理那一块弄下呗,觉得你那么东西放一起,有点复杂。 简单也是美。

      • http://weiye.info 苇叶

        git本身没有权限管理,它要借助ssh, http授权,但是这些授权做不到细粒度。所以暂时没啥好办法。

        • http://blog.harrspy.com harry

          gitolite 可以做到细粒度的权限控制,比如分支的权限,tag的权限等,还有group权限等功能
          https://github.com/sitaramc/gitolite

          • http://weiye.info 苇叶

            但是做不到目录级别的权限控制