GIT & REPO & GERRIT (一)

来源:互联网 发布:文言文虚词乎 编辑:程序博客网 时间:2024/05/01 04:07
在软件项目中,代码管理是一件相当重要的事情。想象一下Google做Andoird系统没有一个强有力的代码管理系统会是怎么样:那肯定是一团糟。那Google是如何管理整个Android系统的代码的呢?Google的工程师们在仔细分析研究过后,选择了GIT作为代码管理的工具,并以GIT为基础,在此之上开发了REPO和GERRIT。使用这三个工具,总加上恰当的流程,Android的代码便被管理的井井有条。

如果要在这样一个代码管理的环境中来提交一个代码改动,大概流程这样:
  1. repo init xxx初始化
  2. repo sync xxx同步要改动的项目
  3. 在该项目下面repo start xxx新建一个本地分支
  4. 做好改动以后git commit本地提交改动
  5. repo upload xxx将改动上传,等别人通过gerrit review
  6. review如果有需要改动的地方,那本地改好后,git commit --amend来保存新的修改
  7. repo upload 将新的改动上传
  8. 重复5-7步,直到review通过,然后merge改动,完毕

(更多信息请参考:http://source.android.com/source/developing.html)

下面简单介绍一下这三个工具,它们三个都是免费且开源的工具。

GIT
它是一个相当优秀的分布式代码管理工具,目前为止,已经有很多优秀的项目是通过它来管理的。它并不是个看起来华丽的工具,但它很有内涵丰富。它有很多优点,诸如超强非线性开发支持,分布式仓库,仓库易发布,有效管理大型项目,垃圾回收,等等等等,有兴趣的请具体参考:http://en.wikipedia.org/wiki/Git_(software)。我只想说说我的感受:
  • 速度快:代码仓库全在本地,各种操作都相当的效率。
  • 非常灵活:你可以随心所欲的改代码,而且可以很容易的保存任何阶段你想要保存的成果。
  • 分支方便:写代码的时候,你经常需要做各种尝试,临时分支可以给你最大的支持。
  • GITK:非常方便的查询当前分支的历史树。
  • 好用:熟悉各种GIT命令以后,你可以随心所欲的操纵代码。
当然,它也并不是完美的:
  • 学习成本略高。要想用好GIT,首先要学会以GIT的方式思考,然后还要熟悉其命令行操作。
  • 一个代码仓库不适合管理多个项目。
GIT的官方网站:http://git-scm.com/
GIT的网页参考:http://gitref.org/

REPO
repo是一个基于GIT的工具,它的主要目的是为了管理多个代码仓库,也就是多个GIT。然后它里面还加入了一些其他的方便开发的功能,比如帮助上传代码到Rerrit上面Review。它本身是用Python写出来的一个小工具。

要完全搞清楚repo的工作流程并不是一件很容易的事情,因为对于绝大多数软件工程师来说,都很少会遇到像管理Android整个系统如此庞大的软件项目。我们假设Office(Word,PPT,Excel)的开发是由这套代码管理工具来进行管理的(当然微软肯定有自己的代码管理工具的)。那么情况就是这样的:
Word,PPT,Excel都是单独的一个GIT,而我们用一个XML文件来记录这三个GIT仓库的情况,然后我们再用一个GIT把这个XML文件的版本管理起来,然后repo就会基于这个XML文件来管理这三个GIT。
那么我们需要发布Office1(Word1,PPT1,Excel1)的时候,我们就创建一个repo分支,实际上就是创建一个XML的分支出来,那么这个分支里面的XML就指定了这三个子项目各自的版本信息。当我们需要发布Office2的时候,我们又可以创建另一个分支。这样,整个Office项目就被有效的管理起来了。而每个子项目也有本身充足的灵活性。

当然,想要靠这么一个简单的例子就想弄明白repo的工作原理还是比较困难的,但先留个印象,以后回过头来看说不定就清楚了。

repo这个工具的代码是托管在Google code上面的:https://code.google.com/p/git-repo/

Gerrit
这个是个基于网页的代码review工具,也是基于GIT的一个工具。GIT本身是个分布式的版本控制工具,Gerrit作为一个强大的review工具的同时,也加强了GIT集中化管理代码的能力,与GIT的配合可以说恰到好处。由于这个是个网页工具,用用就知道怎么回事了,注意他是基于GIT的,其他就没什么太多好说的。

Gerrit目前是托管在Google code上面的:http://code.google.com/p/gerrit/
原创粉丝点击