在軟件項目中,代碼管理是一件相當重要的事情。想象一下Google做Andoird系統沒有一個強有力的代碼管理系統會是怎麼樣:那肯定是一團糟。那Google是如何管理整個Android系統的代碼的呢?Google的工程師們在仔細分析研究過後,選擇了GIT作爲代碼管理的工具,並以GIT爲基礎,在此之上開發了REPO和GERRIT。使用這三個工具,總加上恰當的流程,Android的代碼便被管理的井井有條。
如果要在這樣一個代碼管理的環境中來提交一個代碼改動,大概流程這樣:
-
repo init xxx初始化
-
repo sync xxx同步要改動的項目
-
在該項目下面repo start xxx新建一個本地分支
-
做好改動以後git commit本地提交改動
-
repo upload xxx將改動上傳,等別人通過gerrit review
-
review如果有需要改動的地方,那本地改好後,git commit --amend來保存新的修改
-
repo upload 將新的改動上傳
-
重複5-7步,直到review通過,然後merge改動,完畢
(更多信息請參考:http://source.android.com/source/developing.html)
下面簡單介紹一下這三個工具,它們三個都是免費且開源的工具。
GIT
- 速度快:代碼倉庫全在本地,各種操作都相當的效率。
- 非常靈活:你可以隨心所欲的改代碼,而且可以很容易的保存任何階段你想要保存的成果。
- 分支方便:寫代碼的時候,你經常需要做各種嘗試,臨時分支可以給你最大的支持。
- GITK:非常方便的查詢當前分支的歷史樹。
- 好用:熟悉各種GIT命令以後,你可以隨心所欲的操縱代碼。
當然,它也並不是完美的:
- 學習成本略高。要想用好GIT,首先要學會以GIT的方式思考,然後還要熟悉其命令行操作。
- 一個代碼倉庫不適合管理多個項目。
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的工作原理還是比較困難的,但先留個印象,以後回過頭來看說不定就清楚了。
Gerrit
這個是個基於網頁的代碼review工具,也是基於GIT的一個工具。GIT本身是個分佈式的版本控制工具,Gerrit作爲一個強大的review工具的同時,也加強了GIT集中化管理代碼的能力,與GIT的配合可以說恰到好處。由於這個是個網頁工具,用用就知道怎麼回事了,注意他是基於GIT的,其他就沒什麼太多好說的。