repo工具的使用

1.   關於repo
repo是Google開發的用於管理Android版本庫的一個工具。repo並不是用來取代Git,而是用Python對Git進行了一定的封裝,簡化了對多個Git版本庫的管理。對應repo管理的任何一個版本庫,都需要使用Git命令進行操作。

repo的使用過程大致如下:

l  運行repo init命令,克隆Android的一個清單庫。這個清單庫是通過XML技術建立的版本庫清單。

l  清單庫中的manifest.xml文件,列出了幾百個多個版本庫的克隆方式。包括版本庫的地址和工作區地址的對應關係,以及分支的對應關係。

l  運行repo sync命令,開始同步,即分別克隆這幾百個版本庫到本地的工作區。

l  同時對這幾百個版本庫執行切換分支操作,切換到某個分支。

 

首先下載repo的引導腳本,可以使用wget、curl甚至瀏覽器從指定網址下載(當前有效網址:http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo ) 上下載。把repo腳本設置爲可執行,並複製到只執行的路徑中。

由於原站點被黑,當前一下網址是有效的:

1、http://php.webtutor.pl/en/2011/09/05/kernel-org-hacked-how-to-get-android-repo/

2、https://www.codeaurora.org/gitweb/quic/la/

 

$ curl -L -k http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo> ~/bin/repo

$ chmod a+x ~/bin/repo

$ export PATH=~/bin:$PATH

這裏下載的repo只是一個引導腳本,repo的大部分功能代碼不在其中,這個repo腳本只是一個幫助完成整個repo程序繼續下載和加載的工具。

2.   repo和清單庫
下載並保存repo引導腳本後,建立一個工作目錄。在工作目錄中執行repo init -u <url> <option>,完成repo完整的下載及項目清單版本庫(manifest.git)的下載。

$ mkdir workspace

$ cd workspace

$ repo init -ugit://android.git.kernel.org/platform/manifest.git

在repo引導腳本的前幾行,定義了默認的repo.git的版本庫位置及要檢出的默認分支。

REPO_URL = ‘git://android.git.kernel.org/tools/repo.git’

REPO_REV = ‘stable

 

repo腳本有如下可用參數:

--repo-url                               設定repo的版本庫地址。

--repo-branch                       設定需要檢出的分支。

--no-repo-verify                   設定不要對repo的里程碑簽名進行嚴格的驗證。

-u(--manifest-url)                設定清單庫的Git服務器地址。

-b(--manifest-branch)        檢出清單庫的特定分支。

--mirror                                 只在repo第一次初始化的時候使用,建立本地鏡像

-m(--manifest-name)         當有多個清單文件時,指定清單庫中的某個清單爲有效的清單文件。默認爲default.xml。

執行完repo init之後,工作目錄就已經包含了一個.repo的隱藏目錄。在該目錄下除了一個包含repo實現的repo克隆庫外,就是manifest庫的克隆,已經一個符號鏈接,鏈接到清單庫中的default.xml文件。

下面是我的PC上的.repo目錄

(repo init -u ssh://[email protected]/home/webgod/N2S/Fxn-DT/manifests.git-m baseline之後的)

在工作目錄下的.repo/manifest.xml文件就是Android項目的衆多版本庫的清單文件。repo命令的操作都要參考這個清單文件。

Ø  這個XML的頂級元素是manifest,位於第2行和第554行。

Ø  第3行通過一個remote元素,定義了名爲”ldc-gerrit”的遠程版本庫,其Git庫的基址爲”.”,即ssh://[email protected]/home/webgod/N2S/Fxn-DT/。還定義了代碼審覈服務器的地址ldc-gerrit.googltcode.com。當然,還可以定義更多的remote元素。

Ø  第4行用於設置各個項目默認的遠程版本庫(remote)爲ldc-gerrit,默認的分支爲baseline。各個項目(project元素)可以定義自己的remote和revision覆蓋該默認配置。

Ø  第5行定義了一個項目,該項目的遠程版本庫相對路徑爲:a/aosp/device/asus/deb,在工作區目錄中克隆的位置爲:device/asus/deb。

Ø  第34行,定義了project元素的子元素copyfile,定義了項目克隆後的一個附加動作:從core/root.mk拷貝文件到Makefile。

Ø  後續的500多行定義了其他500多個項目,都是採用類似的project元素語法。name參數定義遠程版本庫的相對路徑,path參數帝國一克隆到本地工作區的路徑。

3.   同步項目
         同步項目的全部內容:

$ repo sync

         同步項目中某部分:

         $ repo sync [project]

         在repo sync後面跟上項目的名稱,項目的名稱來自於.repo/manifest.xml這個XML文件中project元素的name屬性值。

         repo支持通過本地清單對默認的清單文件進行補充及覆蓋。

4.   repo的命令集
repo子命令實際上是Git命令的或簡單或複雜的封裝。每一個repo子命令都對應於repo源碼樹中subcmds目錄下的一個同名的Python文件。每一個repo子命令都可以通過下面的命令獲得幫助。

$ repo help <command>

1)        repo init

完成檢出清單版本庫(manifest.git),以及配置Git用戶的用戶名和郵件地址的工作。

2)        repo sync

參照清單文件克隆或同步版本庫。

3)        repo start

實際上是對git checkout -b命令的封裝。爲指定的項目或所有項目(使用--all參數),以清單文件中爲項目設定的分支或里程碑爲基礎,創建特性分支。

repo start <newbranchname> [--all|<project>…]

4)        repo status

實際上是對git diff-index、gitdiff-files命令的封裝,同時顯示暫存區的狀態和本地文件修改的狀態。

repo statuc [<project>…]

5)        repo checkout

實際上是對git checkout命令的封裝。檢出之前由repostart創建的分支。

repo checkout <branchname> [<project>…]

6)        repo branches

repo branches讀取各個項目的分支列表並彙總顯示。該命令實際上通過直接讀取.git/refs目錄下的引用來獲取分支列表,以及分支的發佈狀態等。

repo branches [<project>…]

7)        repo diff

實際上是對git diff命令的封裝,用於分別顯示各個項目工作區下的文件差異。

repo diff [<project>…]

8)        repo stage

實際上是讀git add--interactive命令的封裝,用於挑選各個項目工作區中的改動(修改、添加等)以加入暫存區。

repo stage -I [<project>…]

9)        repo upload

相當於git push

10)     repo download

用於代碼審覈者下載和評估貢獻者提交的修訂。

repo download {project change [/patchset]}…

11)     repo rebase

12)     repo prune

該命令用於掃描項目的各個分支,並刪除已經合併的分支。

repo prune [<project>…]

13)     其他命令

repo grep

repo smartsync

repo forall

repo manifest

repo version

repo selfupdate

5.   repo命令的工作流
下圖是repo的工作流,每個代碼貢獻者都起始於repo start創建的本地工作分支,最終都以repo upload命令將代碼補丁發佈到代碼審覈服務器。


原文:https://blog.csdn.net/davidsky11/article/details/23291483 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章