2013-10-23 49 views
6

我試圖創建AOSP的新分支(在我的開發計算機上)並將其推送到本地鏡像(在同一LAN上的服務器上)。我無法找到解釋如何執行此操作的「回購」工具的文檔。將repo分支推送到本地AOSP鏡像

我創建了AOSP源的一個鏡像使用我的服務器上:

$ mkdir -p ~/aosp/mirror 
$ cd ~/aosp/mirror 
$ repo init -u https://android.googlesource.com/mirror/manifest --mirror 

然後我同步時間在不同的計算機上:

$ repo init -u <USERNAME>@<IP_OF_SERVER>:/home/<USERNAME>/aosp/mirror/platform/manifest.git -b android-4.2.2_1 
$ repo sync 

到目前爲止好。我正在使用「-b android-4.2.2_1」,因爲我需要開發人員使用此版本的JellyBean作爲基準。

然後,我創建使用 「回購啓動」 一個新的分支:

$ repo start my-branch-name --all 

還是不錯的。問題是,我不知道如何「推」這個分支到遠程服務器。

當我做repo info我看到:

Manifest branch: refs/tags/android-4.2.2_r1 
Manifest merge branch: android-4.2.2_r1 
Manifest groups: all,-notdefault 
---------------------------- 
Project: platform/abi/cpp 
Mount path: /home/<username>/<project_name>/android/abi/cpp 
Current revision: refs/tags/android-4.2.2_r1 
Local Branches: 1 [my-branch-name] 
--------------------------- 
.... 

當我嘗試repo upload我得到:

no branches ready for upload 

我又試圖repo forall -c "git push aosp my-branch-name"確實地方分支機構推到每個遠程倉庫,但似乎這不是正確的做法。特別是,如果我嘗試創建一個新的客戶端,並嘗試同步到分支它不起作用。

$ repo init -u <USERNAME>@<IP_OF_SERVER>:/home/<USERNAME>/aosp/mirror/platform/manifest.git -b my-branch-name 
error: revision my-branch-name in manifests not found 

創建「Manifest分支」的正確方法是什麼?

回答

9

repo start命令根據當前上游分支創建本地分支。運行repo upload會將當前檢出分支上的任何本地提交上載到清單文件中列出的Gerrit服務器託管的上游分支。如果您想要執行的推送類型與此用例不匹配,則必須使用基礎Git命令進行推送。你仍然可以使用repo start(但你不必)。

要創建清單分支,repo startrepo upload沒有用。與Repo管理的其他gits不同,您應該對default分支上的清單git進行所有更改,Repo會爲您檢查。然後,使用普通的Git命令推送您的更改。

以下示例顯示如何創建名爲mybranch的新清單分支,與當前上游相同。

cd .repo/manifests 
git push origin default:refs/heads/mybranch 

現在,這本身並不是非常有用,因爲您的清單中的內容是相同的上游分支 - 我們剛剛克隆清單的一個分支,所以當你可以運行

repo init -u ssh://git.example.com/platform/manifest -b mybranch 

的結果將是一樣的你開始:

repo init -u ssh://git.example.com/platform/manifest -b android-4.2.2_1 

對於你的鏡子是有用的,你還必須每個分支git在清單中列出,以便您可以在服務器上獲得一個可以進行更改的分支。

從理論上講,您可以對從上游下載的相同分支進行更改,但當您嘗試下次從上游進行同步時會造成混亂。不要這樣做。

要在服務器上創建分支,你可以遵循相同的模式作爲清單:

cd build 
git push ssh://git.example.com/platform/build HEAD:refs/heads/mybranch 

的使用注意事項的頭,的當前簽出提交的符號名。這樣對於每一個GIT中是乏味的,所以使用repo forall命令:

repo forall -c 'git push aosp HEAD:refs/heads/mybranch' 

注意,遠程名稱是從清單的git(這個)不同。

repo forall運行可命令的環境變量的列表,請參閱repo help forallREPO_PROJECT$REPO_LREV$REPO_RREV可能是最有用的)。

很容易與repo forall搞砸了,所以使它成爲一個很好的習慣,預先考慮您的命令echo先有會一直運行迴盪到終端的命令。如果您對結果滿意,請刪除echo以運行真實的命令。

現在,您將在所有套件中包含mybranch分支,包括清單。剩下的就是改變清單,以便

repo init -u ssh://git.example.com/platform/manifest -b mybranch 

實際上會檢出mybranch在所有的合法。

cd .repo/manifests 
vi default.xml 
[ Change the default revision from refs/tags/android-4.2.2_1 
    or whatever it says to 'mybranch'. ] 
git commit -a -m 'Changed default revision to mybranch.' 
git push origin default:refs/heads/mybranch 

請注意,所有的gits不一定使用默認版本(您剛剛更改爲mybranch)。這可能是android-4.2.2_1清單分支的情況,但在其他情況下,某些gits不會使用默認修訂版本,而是使用它們自己的修訂版本屬性來覆蓋它。這很好,但它會要求你做額外的清單更改。

+0

這非常有用;謝謝。 –

相關問題