2012-04-12 28 views
8

我可以使用「回購」工具克隆Android源代碼。然而,我想要做的是以比11GB足跡更小的方式克隆源代碼。它似乎下載與每個Android設備和每個之前版本相關的內容。我試着想我可以檢查出這樣一個特定的分支減少這樣的:如何使用「回購」克隆最小的Android源?

repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1 

然而,是什麼最終情況是,我仍然可以參與一切,只是在特定的快照(可以理解)。但是有沒有辦法限制克隆的數量?

回答

4

android源代碼樹由許多獨立的git倉庫組成,這些倉庫都由repo管理。您無法真正減少爲特定git存儲庫下載的數據量。

但是,您只能使用repo sync <project>下載可用的git回購的子集。即如果你只想要框架/基礎包,你應該可以在做初始repo init後做repo sync frameworks/base

如果您確實想要構建源代碼,那麼您可能需要完整的東西。

您可能可以通過刪除不需要的設備存儲庫來保存一兩個演出。您可以通過編輯<源文件> /.repo/manifest.xml並刪除不需要的設備的存儲庫來完成此操作。

+1

這會產生一個錯誤,'$ repo init -u https:// android.googlesource.com/platform/manifest',然後'$ repo sync platform/tools/base',我得到 錯誤:project group必須爲項目平臺/工具/基地啓用。有任何想法嗎? – nmr 2016-10-06 21:30:16

3

有很多事情可以做。首先,使用-c參數的「repo sync」會將簽出的沙箱限制爲僅「當前」分支。回購同步不會下載其他分支的材料。

您還可以編輯.repo/manifests/default.xml清單。我所做的就是對其進行備份,比如「default.bak」,然後從default.xml文件中刪除我知道我不需要的文件。因爲我不是在Macintosh上創建的,所以我知道我不需要任何「達爾文」工具,所以我刪除了包含「達爾文」的每一行。然後,「回購同步」不會下載任何達爾文項目或在沙箱中安裝源代碼。

如果你已經同步了一個沙箱,並且你想修剪它的大小,你可以像上面那樣去除項目,然後執行「repo sync -c -l」,並且回購同步只會剝去你剛纔的目錄除去。 -l標誌只會執行同步的本地部分,這意味着它只會將本地git項目與源代碼樹同步。網絡沒有使用。看到正常同步的另一半的「-n」標誌,它執行網絡同步來更新上游存儲庫的本地git項目。

要同時刪除了不必要的項目git的支持對象存儲(這佔用了大量的空間),我用這個:

for project in `diff ~/android/.repo/manifests/default.xml ~/android/.repo/manifests/default.bak | awk '{print $3}' | grep path | cut -f2 -d\"`; do rm -rf ~/android/.repo/projects/$project.git ; rm -rf ~/android/.repo/project-objects/$project.git ; done 

這將找到所有在備份清單中的項目,但有已從活動清單中刪除,並刪除git項目及其所有後備數據。這恢復了很多空間。

如果刪除太多,只需從備份清單中恢復項目行,然後將其添加回活動清單。然後,回購同步將讓你的git項目和你的沙箱再次變直。你可以通過在項目目錄中執行「mma -B -n」來測試構建,看看你是否已經刪除了很多。這將嘗試對你的目標進行完全的依賴構建,即使他們不需要它也迫使所有目標構建,並且它將作爲空運行。如果構建失敗,則刪除了項目需要的東西。

您還可以設置本地鏡像沙箱,並從鏡像創建小型工作參考沙箱。工作沙箱不包含git對象存儲,但是可以參考鏡像中的中心部分。使用「repo init -u ... --mirror」來設置鏡像,並使用「repo init --reference =〜/ android-mirror -u ...」來引用鏡像。後者中的-u標誌允許真正的上游存儲庫用作權限,而鏡像引用用作本地高速緩存。本地鏡像還可以避免AOSP項目執行的下載配額,並且它們可以更快地同步到。