我們知道AOSP項目由不同的子項目組成,為了方便進行管理,Google采用Git對AOSP項目進行多倉庫管理.在聊repo工具之前,我先帶你來聊聊多倉庫項目:
我們有個非常龐大的項目Pre,該項目由很多個子項目R1,R2,...Rn等組成,為了方便管理和協同開發,我們為每個子項目創立自己的倉庫,整個項目的結構如下:
圖片.png
將一個項目Pre進行分庫后會遇到這么一個問題:如果我們想要創建Pre分支來做feature開發,這就意味著,我們需要到每個子項目中分別創建對應的分支,這個過程如果純粹靠手工做,那簡直是個災難,利索當然我們會想寫個自動化處理程序(我們假設這個工具叫做RepoUtil
)來幫助我們解決這個問題.這個RepoUtil
也會有版本管理之類的需求,因此我們也用Git對其管理,并為其創建對應的倉庫.此時整個項目的結構如下:
圖片.png
這里RepoUtil
知道整個項目Pre下的每個子項目(即維護子項目的列表),同時需要提供對這些子項目的管理功能,比如統一創建分支等.但是從"單一職責"角度來看,RepoUitl
這個工具的功能過于復雜,我們完全可以將維護子項目列表這個功能抽取出來作為一個新項目sub_projects
,因為子項目也會變化,因此,為其創建對應的倉庫,并用Git管理,這樣的化,RepoUtil只需要通過簡單的對sub_projects
進行依賴即可,此時整個項目的結構如下:
圖片.png
AOSP項目結構和我上文的描述非常類似.
repo
工具對應RepoUtil
,mainfest
對應sub_projects
.總結一下:
repo
就是這么一種工具,由一系列python腳本組成,通過調用Git命令實現對AOSP項目的管理.