GIT & REPO & GERRIT (一)

在軟件項目中,代碼管理是一件相當重要的事情。想象一下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/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章