2012-04-12 15 views
8

Ich bin in der Lage, den Android-Quellcode mit dem "Repo" -Tool zu klonen. Was ich jedoch tun möchte, ist, den Quellcode auf eine minimale Art und Weise zu klonen, als einen 11GB-Fußabdruck zu haben. Es scheint Dinge herunterzuladen, die mit jedem Android-Gerät und jeder früheren Version zusammenhängen. Ich versuchte, dachte ich, könnte dies reduzieren, indem eine bestimmte Filiale wie diese Check-out:Wie "Repo" zu verwenden, um minimale Android-Quelle zu klonen?

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

Doch was am Ende passiert ist, dass ich beteiligt noch alles bekommen, nur bei einer bestimmten Snapshot (verständlich). Aber gibt es eine Möglichkeit, die Menge, die geklont wird, zu begrenzen?

Antwort

4

Der Android-Source-Tree besteht aus vielen separaten Git-Repositories, die alle von Repo verwaltet werden. Sie können die Datenmenge, die für ein bestimmtes Git-Repository heruntergeladen wird, nicht wirklich reduzieren.

Sie können jedoch nur eine Teilmenge der verfügbaren Git-Repos unter Verwendung von repo sync <project> herunterladen. I.e. Wenn Sie nur das Frameworks/Base-Paket wollten, sollten Sie repo sync frameworks/base tun können, nachdem Sie die ursprüngliche repo init getan haben.

Wenn Sie tatsächlich wollen, um die Quelle zu bauen, wollen Sie wahrscheinlich die ganze Sache.

Sie können möglicherweise ein oder zwei Gigs speichern, indem Sie die nicht benötigten Geräte-Repositorys entfernen. Sie können dies tun, indem Sie <source> /.repo/manifest.xml bearbeiten und die Repositories für die Geräte entfernen, die Sie nicht möchten.

+1

Dies ergibt einen Fehler, 'Repo $ init -u https: // android.googlesource.com/platform/manifest', dann' $ repo sync Plattform/tools/base', und ich erhalte 'Fehler: Projektgruppe muss für Projektplattform/Tools/Base aktiviert sein. Irgendwelche Ideen? – nmr

3

Es gibt eine Reihe von Dingen, die Sie tun können. Erstens wird "repo sync" mit einem Argument -c die ausgecheckte Sandbox auf den Zweig "current" beschränken. Die Repo-Synchronisierung wird kein Material für andere Zweige herunterladen.

Sie können auch das Manifest .repo/manifests/default.xml bearbeiten. Ich mache eine Sicherungskopie wie "default.bak" und entferne dann die Zeilen aus der default.xml-Datei, die ich nicht brauche. Da ich nicht auf einem Macintosh aufbaue, weiß ich, dass ich keines der "Darwin" -Tools brauche, also entferne ich jede Zeile, die "Darwin" enthält. Dann lädt "repo sync" keine darwin-Projekte herunter oder installiert den Quellcode in der Sandbox.

Wenn Sie bereits eine Sandbox synchronisiert haben und ihre Größe anpassen möchten, können Sie Projekte wie oben beschrieben entfernen und dann "repo sync -c -l" ausführen, und die Repo-Synchronisierung entfernt nur die Verzeichnisse, die Sie gerade haben entfernt. Das Flag -l führt nur den lokalen Teil der Synchronisierung aus, dh es synchronisiert nur die lokalen Git-Projekte mit dem Quellbaum. Das Netzwerk wird nicht verwendet. Siehe "-n" -Flag für die andere Hälfte einer normalen Synchronisierung, die die Netzwerk-Synchronisierung durchführt, um die lokalen Git-Projekte mit dem Upstream-Repository zu aktualisieren.

Um auch die git Trägerobjektspeicher für die unerwünschten Projekte zu entfernen (was viel Platz einnehmen) ich verwenden:

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 

Dies findet alle Projekte, die in Ihrem Backup manifestieren, sind aber haben wurde aus Ihrem aktiven Manifest entfernt und entfernt die Git-Projekte und alle zugehörigen Backing-Daten. Dies erholt viel Platz.

Wenn Sie zu viel entfernen, stellen Sie einfach die Projektlinie aus Ihrem Backup-Manifest wieder her und fügen Sie sie wieder in Ihr aktives Manifest ein. Dann wird eine Reposynchronisation Ihre Git Projekte und Ihre Sandbox wieder in Ordnung bringen. Sie können den Build testen, um zu sehen, ob Sie zu viel entfernt haben, indem Sie "mma -B -n" in Ihrem Projektverzeichnis ausführen. Dies wird versuchen, eine vollständige Abhängigkeit aufzubauen, die auf Ihrem Ziel basiert, und alle Ziele dazu zwingt, zu bauen, auch wenn sie es nicht brauchen, und es wird es als ein Trockenlauf machen. Wenn der Build fehlschlägt, haben Sie etwas entfernt, das Ihr Projekt benötigt.

Sie können auch eine lokale Spiegel-Sandbox einrichten und kleine funktionierende Referenz-Sandboxen von Ihrem Spiegel erstellen. Die funktionierenden Sandboxen enthalten keine Git-Objektspeicher, beziehen sich jedoch auf die zentralen im Spiegel. Verwenden Sie "repo init -u ... --spiegel", um den Spiegel einzurichten, und "repo init --reference = ~/android-mirror -u ...", um auf den Spiegel zu verweisen. Das -u-Flag in letzterem ermöglicht die Verwendung eines echten Upstream-Repositorys als Autorität, während die Mirror-Referenz als lokaler Cache verwendet wird. Lokale Spiegelungen vermeiden auch das vom AOSP-Projekt erzwungene Download-Kontingent, mit dem sie schneller synchronisiert werden können.

Verwandte Themen