一崩掘、安裝
創(chuàng)建目錄和修改環(huán)境變量
$ mkdir ~/bin
$ PATH=~/bin:$PATH
下載repo代碼
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
二、幫助
repo help
查詢具體命令的幫助
repo help <COMMAND>
Repo 倉庫狀態(tài)
repo help init
狀態(tài)
repo status .
三惩激、初始化
$ repo init -u <URL> [<OPTIONS>]
示例
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
repo init -u https://android.googlesource.com/platform/manifest
這個命令會在當前文件夾創(chuàng)建一個 .repo
文件夾店煞,它包含
repo/ : 其實是一個repo的python源碼
manifest.xml : 工作樹的主配置文件,不要編輯這個文件
projects/ : 每個git工程的 .git結(jié)構(gòu)
local_manifest.xml : 這個文件不是repo創(chuàng)建的风钻,你可以創(chuàng)建這個文件來代替主配置文件顷蟀,也就是臨時測試用用
選項:
-u: 指定manifest倉庫地址
-m: 選擇倉庫中某個manifest文件,如果沒有設(shè)置骡技,就使用default.xml
-b: 指定一個分支或修正版本
四鸣个、拉代碼
repo sync
repo sync PROJECT0 PROJECT1 PROJECT2 ...
選項:
-j <numbers>: 多任務(wù),一般8核心可以開到16任務(wù),過多會起反作用
-c: 只下載當前分支代碼
-d: 讓工程回退到manifest指定的版本
-f: 如果某個工程同步失敗布朦,繼續(xù)同步
五囤萤、修改repo
如果你想修改repo的結(jié)構(gòu),應(yīng)該在 .repo/manifests
文件夾里面修改是趴,然后用git命令提交
manifest.xml
文件結(jié)構(gòu):
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="shift"
fetch="git://git.mygit.com/" />
<default revision="kk-shift"
remote="shift"
sync-j="1" />
<project path="packages/shift/VideoPlayer" name="platform/packages/shift/VideoPlayer" />
<include name="another_manifest.xml" />
</manifest>
manifest
這個是配置的頂層元素涛舍,即根標志remote
name:在每一個.git/config文件的remote項中用到這個name,即表示每個git的遠程服務(wù)器的名字(這個名字很關(guān)鍵唆途,如果多個remote屬性的話富雅,default屬性中需要指定default remote)。git pull肛搬、get fetch的時候會用到這個remote name没佑。
alias :可以覆蓋之前定義的remote name,name必須是固定的滚婉,但是alias可以不同图筹,可以用來指向不同的remote url
fetch :所有g(shù)it url真正路徑的前綴,所有g(shù)it 的project name加上這個前綴,就是git url的真正路徑
review :指定Gerrit的服務(wù)器名远剩,用于repo upload操作扣溺。如果沒有指定,則repo upload沒有效果default
設(shè)定所有projects的默認屬性值瓜晤,如果在project元素里沒有指定一個屬性锥余,則使用default元素的屬性值。
remote :遠程服務(wù)器的名字(上面remote屬性中提到過痢掠,多個remote的時候需要指定default remote驱犹,就是這里設(shè)置了)
revision :所有g(shù)it的默認branch,后面project沒有特殊指出revision的話足画,就用這個branch
sync_j : 在repo sync中默認并行的數(shù)目
sync_c :如果設(shè)置為true雄驹,則只同步指定的分支(revision 屬性指定),而不是所有的ref內(nèi)容
sync_s : 如果設(shè)置為true淹辞,則會同步git的子項目manifest-server
它的url屬性用于指定manifest服務(wù)的URL医舆,通常是一個XML RPC 服務(wù)
它要支持一下RPC方法:
GetApprovedManifest(branch, target) :返回一個manifest用于指示所有projects的分支和編譯目標。
target參數(shù)來自環(huán)境變量TARGET_PRODUCT和TARGET_BUILD_VARIANT象缀,組成$TARGET_PRODUCT-$TARGET_BUILD_VARIANT
GetManifest(tag) :返回指定tag的manifestproject
需要clone的單獨git
name :git 的名稱蔬将,用于生成git url。URL格式是:${remote fetch}/${project name}.git 其中的 fetch就是上面提到的remote 中的fetch元素央星,name 就是此處的name
path :clone到本地的git的工作目錄霞怀,如果沒有配置的話,跟name一樣
remote :定義remote name莉给,如果沒有定義的話就用default中定義的remote name
revision :指定需要獲取的git提交點毙石,可以定義成固定的branch,或者是明確的commit 哈希值
groups :列出project所屬的組禁谦,以空格或者逗號分隔多個組名胁黑。所有的project都自動屬于"all"組废封。每一個project自動屬于
name:'name' 和path:'path'組州泊。例如<project name="monkeys" path="barrel-of"/>,它自動屬于default, name:monkeys, and path:barrel-of組漂洋。如果一個project屬于notdefault組遥皂,則,repo sync時不會下載
sync_c :如果設(shè)置為true刽漂,則只同步指定的分支(revision 屬性指定)演训,而不是所有的ref內(nèi)容。
sync_s : 如果設(shè)置為true贝咙,則會同步git的子項目
upstream :在哪個git分支可以找到一個SHA1样悟。用于同步revision鎖定的manifest(-c 模式)。該模式可以避免同步整個ref空間
annotation :可以有0個或多個annotation,格式是name-value窟她,repo forall命令是會用來定義環(huán)境變量include
通過name屬性可以引入另外一個manifest文件(路徑相對與當前的manifest.xml 的路徑)
name :另一個需要導(dǎo)入的manifest文件名字
可以在當前的路徑下添加一個another_manifest.xml陈症,這樣可以在另一個xml中添加或刪除projectremove-project
從內(nèi)部的manifest表中刪除指定的project。經(jīng)常用于本地的manifest文件震糖,用戶可以替換一個project的定義
六录肯、創(chuàng)建快照
你可以根據(jù)當前.repo
的狀態(tài)來創(chuàng)建一個配置文件
repo manifest -o snapshot.xml -r
這個文件可以用來保存當前的工作狀態(tài)
恢復(fù)一個快照,可以用下面的命令
cp snapshot.xml .repo/manifests/
repo init -m snapshot.xml
repo sync -d
注意:沒有commit的修改不會恢復(fù)吊说,已經(jīng)commit的但是沒有push的是可以恢復(fù)的论咏,但只能從本地恢復(fù)。
七颁井、切換分支
repo start BRANCH_NAME PROJECT_NAME
查看分支
repo branches
提交
repo upload
安全刪除不需要的分支
repo prune
八厅贪、基本工作流程
repo start
開始一個新的工作分支Use to start a new topic branch.
git commit
提交修改Use git add to stage changes.
repo upload
上傳修改
九、一些問題
如果repo長時間沒有響應(yīng)雅宾,可以試試殺掉python進程
killall python
如果想要repo執(zhí)行時的更多信息卦溢,可以加上 --trace
選項
參考1.http://xda-university.com/as-a-developer/repo-tips-tricks
參考2.https://source.android.com/source/using-repo
參考3.https://source.android.com/source/developing
參考4.http://blog.csdn.net/shift_wwx/article/details/19557031