重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)
軟件工程由于需要不斷迭代開發(fā),因此要對(duì)源代碼進(jìn)行版本管理。Android源代碼工程(AOSP)也不例外,它采用Git來進(jìn)行版本管理。AOSP作為一個(gè)大型開放源代碼工程,由許許多多子項(xiàng)目組成,因此不能簡單地用Git進(jìn)行管理,它在Git的基礎(chǔ)上建立了一套自己的代碼倉庫,并且使用工具Repo進(jìn)行管理。工欲善其事,必先利其器。本文就對(duì)AOSP代碼倉庫及其管理工具repo進(jìn)行分析,以便提高我們?nèi)粘i_發(fā)效率。
《Android系統(tǒng)源代碼情景分析》——點(diǎn)擊下載
現(xiàn)代的代碼版本管理工具,SVN和Git是最流行的。SVN是一種集中式的代碼管理工具,需要有一個(gè)中心服務(wù)器,而Git是一種分布式的代碼管理工具。不需要一個(gè)中心服務(wù)器。不需要中心服務(wù)器意味著在沒有網(wǎng)絡(luò)的情況下,Git也能進(jìn)行版本管理。因此,單從這一點(diǎn)出發(fā),Git就比SVN要方便很多。當(dāng)然,Git和SVN相比,還有許多不同的理念設(shè)計(jì),但是總的來說,Git越來越受到大家的青睞,尤其是在開源社區(qū)。君不見,Linux是采用Git進(jìn)行版本管理,而越來越火的GitHub,提供也是Git代碼管理服務(wù)。本文不打算分析Git與SVN的區(qū)別,以及Git的使用方法,不過強(qiáng)烈建議大家先去了解Git,然后再看下面的內(nèi)容。這里推薦一本Git書籍《Pro Git》,它是GitHub的員工Scott Chacon撰寫的,對(duì)Git的使用及其原理都介紹得非常詳細(xì)和清晰。
前面提到,AOSP是由許許多項(xiàng)目組成的,例如,在Android 4.2中,就包含了329個(gè)項(xiàng)目,每一個(gè)項(xiàng)目都是一個(gè)獨(dú)立的Git倉庫。這意味著,如果我們要?jiǎng)?chuàng)建一個(gè)AOSP分支來做feature開發(fā),那么就需要到每一個(gè)子項(xiàng)目去創(chuàng)建對(duì)應(yīng)的分支。這顯然不能手動(dòng)地到每一個(gè)子項(xiàng)目里面去創(chuàng)建分支,必須要采用一種自動(dòng)化的方式來處理。這些自動(dòng)化處理工作就是由Repo工具來完成的。當(dāng)然,Repo工具所負(fù)責(zé)的自動(dòng)化工作不只是創(chuàng)建分支那么簡單,查看分支狀態(tài)、提交代碼、更新代碼等基礎(chǔ)Git操作它都可以完成。
Repo工具實(shí)際上是由一系列的Python腳本組成的,這些Python腳本通過調(diào)用Git命令來完成自己的功能。比較有意思的是,組成Repo工具的那些Python腳本本身也是一個(gè)Git倉庫。這個(gè)Git倉庫在AOSP里面就稱為Repo倉庫。我們每次執(zhí)行Repo命令的時(shí)候,Repo倉庫都會(huì)對(duì)自己進(jìn)行一次更新。
上面我們討論的是Repo倉庫,但是實(shí)際上我們執(zhí)行Repo命令想操作的是AOSP。這就要求Repo命令要知道AOSP都包含有哪些子項(xiàng)目,并且要知道這些子項(xiàng)目的名稱、倉庫地址是什么。換句話說,就是Repo命令要知道AOSP所有子項(xiàng)目的Git倉庫元信息。我們知道,AOSP也是不斷地迭代法變化的,例如,它的每一個(gè)版本所包含的子項(xiàng)目可能都是不一樣的。這意味著需要通過另外一個(gè)Git倉庫來管理AOSP所有的子項(xiàng)目的Git倉庫元信息。這個(gè)Git倉庫在AOSP里面就稱為Manifest倉庫。
到目前為止,我們提到了三種類型的Git倉庫,分別是Repo倉庫、Manifest倉庫和AOSP子項(xiàng)目倉庫。Repo倉庫通過Manifest倉庫可以獲得所有AOSP子項(xiàng)目倉庫的元信息。有了這些元信息之后,我們就可以通過Repo倉庫里面的Python腳本來操作AOSP的子項(xiàng)目。那么,Repo倉庫和Manifest倉庫又是怎么來的呢?答案是通過一個(gè)獨(dú)立的Repo腳本來獲取,這個(gè)Repo腳本位于AOSP的一個(gè)官方網(wǎng)站上,我們可以通過HTTP協(xié)議來下載。
現(xiàn)在,我們就通過一個(gè)圖來來勾勒一下整個(gè)AOSP的Picture,它由Repo腳本、Repo倉庫、Manifest倉庫和AOSP子項(xiàng)目倉庫組成,如圖1所示:
接下來我們就看看上述腳本和倉庫是怎么來的。
1. Repo腳本
從官方網(wǎng)站可以知道,Repo腳本可以通過以下命令來獲?。?/p>
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo $ chmod a+x ~/bin/repo