一、概述
當一個大的項目需要拆分成很多的子項目,或者說一個軟件系統拆分成多個子系統。 每一個子項目或者子系統都對應一個git repository。這種需求在實際項目當中是很常見的,有的可能就直接寫一個shell腳本來實現同時拉各個代碼倉庫的動作,但這樣做難免笨拙。 特別是要做系統級別的整體分支或版本發佈時,就不太方便,因此這裏就可以使用repo來進行管理,像Android這麼大的項目也都是通過repo來進行管理的。
二、安裝
這裏以Ubuntu爲例來說明。
- 第一步: 創建repo安裝目錄
mkdir ~/bin
或者,可以創建一個隱藏文件夾,這樣避免被誤操作刪除, 在正常使用ls命令的時候,
也不會在home目錄下看到這個文件件(對應的後續步驟中的~/bin 修改爲~/.bin)
mkdir ~/.bin
- 第二步:下載repo
wget https://storage.googleapis.com/git-repo-downloads/repo -P ~/bin/
或者
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
- 第三步: 改變執行權限並設置環境變量(就好比“安裝”)
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH
最後設置環境變量這一句,最好是添加到 ~/.bashrc 文件中的最末尾位置,
這樣就可以自動設置好repo的環境變量。
當你執行完以上三個步驟之後,如果能訪問Google的網站的話,就可以正常使用repo了。但咱們這邊如果不翻牆的話,顯然是沒法訪問的,在使用repo init的時候,就會出現如下的錯誤:
Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle
因此這裏還需要第四步:
- 第四步: 設置REPO_URL環境變量
如第三步一樣,在~/.bashrc 文件的最末尾添加如下內容:
export REPO_URL=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/
這裏使用的是清華大學的鏡像源
經過這四步就可以正常的使用repo了。
三、簡單使用
一般來說repo比較常用的命令有如下幾個:
- repo init
repo init -u <URL> [<OPTIONS>]
-u 指定repo倉庫(即manifest倉庫)的url地址, 後面[<OPTIONS>]就是可選的命令參數:
Manifest options:
-m :在manifest倉庫中選擇一個xml文件,如果沒有設置,就使用default.xml
-b:選擇一個maniest倉庫中的一個特殊的分支
repo Version options:(一般來說幾乎不會使用這下面的這些選項)
--repo-url:設定repo的版本庫地址。
--repo-branch:設定需要檢出的分支。
--no-repo-verify:設定不要對repo的里程碑簽名進行嚴格的驗證。
--mirror:只在repo第一次初始化的時候使用,建立本地鏡像
- repo sync
repo sync
默認同步xml文件中定義的所有倉庫,也可以單獨指定sync哪個或哪些倉庫,如下:
repo sync name1 name2 name3 ...
除此之外還有如下選項:
-j : 多任務,一般8核心可以開到16任務,過多會起反作用
-c: 只下載當前分支代碼
-d: 讓工程回退到manifest指定的版本
-f: 如果某個工程同步失敗,繼續同步
- repo start
repo start BRANCH_NAME PROJECT_NAME
創建分支,以上命令就是 給倉庫‘PROJECT_NAME’創建名爲‘BRANCH_NAME’的本地分支,
如果需要給repo管理的所有倉庫創建本地分支,其命令爲:
repo start BRANCH_NAME --all
此命令會更新manifest xml文件中的信息給對應的遠程分支 創建相應的本地分支
- repo status
repo status [project list]
顯示當前工作目錄的狀態或指定工程名或者工程路徑的狀態
更多詳細的命令,可以問度娘,或者使用help參數查看