龍答:
不能指定分支名稱(或SHA,或任何其他),以repo
,它不會工作。原因如下:
repo
是一個處理庫項目集合(實際上是獨立的git)的腳本。項目列表位於.repo
git中,並且包含一個清單文件,它基本上是所有存儲庫git的分支和它們的分支的列表。 -b
僅適用於repo init
期間的repo
git。
這裏是.repo/manifests/default.xml
一個例子:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote fetch="git://address.com/" name="origin"
review="review.address.com"/>
<default remote="origin" revision="ics-something" sync-j="4"/>
<manifest-server url="http://manifests.address.com:8000"/>
<!-- sniff -->
<project name="platform/external/libxml2" path="external/libxml2"
revision="ics-common"/>
<project name="platform/external/zlib" path="external/zlib"
revision="ics-common"/>
<project name="platform/frameworks/base" path="frameworks/base"
revision="ics-something"/>
<project name="platform/packages/apps/Bluetooth" path="packages/apps/Bluetooth"
revision="ics-common"/>
<!-- sniff -->
</manifest>
因此,獲取存儲的片源尤其是構建正確的方法是獲得它的清單。
即,清單將包含SHA(或標籤,如果存在的話,它們實際上是相同的)而不是分支名稱。這樣,你的資料庫中的每一個Git項目將指向到一些承諾,這是目前最新最當構建被執行:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote fetch="git://address.com/" name="origin"
review="review.address.com"/>
<default remote="origin" revision="ics-something" sync-j="4"/>
<manifest-server url="http://manifests.address.com:8000"/>
<!-- sniff -->
<project name="platform/external/libxml2" path="external/libxml2"
revision="refs/tags/android-4.0.4_r1.1"/>
<project name="platform/external/zlib" path="external/zlib"
revision="refs/tags/android-4.0.4_r1.1"/>
<project name="platform/frameworks/base" path="frameworks/base"
revision="ecb41a77411358d385e3fde5b4e98a5f3d9cfdd5"/>
<project name="platform/packages/apps/Bluetooth" path="packages/apps/Bluetooth"
revision="621bae79f1a250e443eb83d1f473c533bea493dc"/>
<!-- sniff -->
</manifest>
正如你看到的,這兩個清單之間的唯一區別是存儲庫的git的修正值。
簡短的回答:
你需要獲得特定構建manifest_static.xml
。
或者,如果你只是缺少一些項目Git的,那麼你可以在.repo
混帳創建local_manifest.xml
文件,添加缺少的Git的那裏,然後從庫的根repo sync
。更多關於local_manifest.xml
的使用方法是here。
他們爲什麼不使用'git submodule'而不是.repo?似乎它是爲此而構建的...... –
'repo'不僅僅是同步。它可以自動上傳到gerrit,創建分支,在不知道目標git的情況下下載更改等等。當然,這只是包裝腳本,並且從字面上看,所有事情都可以通過裸機來完成。但是,由於谷歌製作了「回購」,每個人都堅持:) –