一、概述
當一個大的項目需要拆分成很多的子項目,或者說一個軟體系統拆分成多個子系統。 每一個子項目或者子系統都對應一個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參數檢視