2012-12-23 38 views
15

我已經下載了整個工作樹下面的命令:如何在本地回購中切換android版本?

repo init -u https://android.googlesource.com/platform/manifest 
repo sync -j8 

同步成功後,我想切換工作樹到Android 2.3.7。 您看到「repo init」時我沒有指定帶「-b」參數的分支。 所以我想所有的標籤信息應下載,我可以方便地切換到Android 2.3.7使用以下命令:

repo forall -c git checkout android-2.3.7_r1 

但它會產生許多錯誤,如:

error: pathspec 'android-2.3.7_r1' did not match any file(s) known to git. 

那麼怎麼可以切換到Android 2.3.7沒有「repo init -b android-2.3.7_r1」和「回購同步」再次?

回答

20

使用repo forall無法解決此問題。

讓我們假設您當前的Android樹是乾淨的 - 沒有本地更改或提交,即repo status什麼都不顯示。

要正確切換Android版本,你需要改變的是你的清單庫分支,像這樣:

cd $ANDROID_ROOT 
cd .repo/manifests 
git branch -av # see all available branches on origin 
# choose one you want, check out to it: 
git checkout origin/<my_selected_android_version> 

注意,上面的命令將在清單回購創造超脫HEAD。如果你不喜歡,添加--track(或-t的簡稱)來創建本地跟蹤分行:

git checkout --track origin/<my_selected_android_version> 

UPDATE 2014年9月5日: 對於最新版本的回購,git checkout ...上述韓元」 t和以前一樣工作,因爲下一個repo sync會將清單存儲庫恢復爲在repo init處使用的分支。

但是,這也意味着,現在有更簡單的方法做你想做的,即:

repo init -b <my_selected_android_version> 

這種選擇性repo init-b(不-u)將只更新清單分支,否則不會碰你的樹。

現在,只要它同步:

repo sync -j8 

並在一段時間後,你的Android樹將切換到另一個版本。

此操作的速度主要取決於舊版和新版Android版本之間清單文件的差異程度 - 因爲如果某個git存儲庫添加到新清單中,它將花費時間克隆它。如果某個存儲庫被刪除,如果實際上將其刪除。

但是,總的來說,這種方法仍然比從頭開始初始化全新的Android樹要快得多。

+0

讀您的文章後,我意識到我誤解了git/repo的一些關鍵方面。非常非常感謝你! –

+3

它似乎回購已經改變,是'.repo/manifest'現在'.repo/manifests'? – nmr

1

如果您所在的分支以及要切換到的分支具有相同的manifest.xml文件,那麼您可以使用以下命令來完成此操作。

回購FORALL -c混帳取AOSP --tags 回購FORALL -c git的結帳-b john5.1.1_r14_api22 Android的5.1.1_r14

也看到細節 http://johnliao52.github.io/2016/03/27/git-repo-skills.html

+0

感謝您使用中文的有用文檔 –