2013-10-23 4 views
6

Ich versuche, einen neuen Zweig des AOSP (auf meinem Entwicklungscomputer) zu erstellen und es auf einen lokalen Spiegel (auf einem Server im selben LAN) zu schieben. Ich kann keine Dokumentation des Repo-Tools finden, das erklärt, wie dies zu tun ist.Push-Repo-Zweig zu lokalen AOSP-Spiegel

ich einen Spiegel der AOSP Quelle auf meinem Server erstellt haben mit:

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

Dann habe ich auf einem anderen Computer synchronisierten:

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

So weit so gut. Ich verwende "-b android-4.2.2_1", weil ich meine Entwicklung brauche, um diese Version von JellyBean als Basis zu verwenden.

Dann erstelle ich einen neuen Zweig "Repo-Start":

$ repo start my-branch-name --all 

immer noch gut. Das Problem ist, ich kann nicht herausfinden, wie man diese Verzweigung auf den entfernten Server "pusht".

Wenn ich repo info sehe ich:

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] 
--------------------------- 
.... 

Wenn ich repo upload versuche ich bekommen:

no branches ready for upload 

Ich habe dann versucht repo forall -c "git push aosp my-branch-name" die tut die lokalen Niederlassungen an jedem Remote-Repository zu schieben, aber es scheint, als ob dies nicht der richtige Weg ist, es zu tun. Insbesondere wenn ich versuche, einen neuen Client zu erstellen und die Synchronisierung mit der Verzweigung zu versuchen, funktioniert das nicht.

$ 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 

Was ist der richtige Weg, um einen "Manifest-Zweig" zu erstellen?

Antwort

9

Der Befehl repo start erstellt eine lokale Verzweigung basierend auf dem aktuellen Upstream-Zweig. Wenn repo upload ausgeführt wird, werden alle lokalen Commits für den aktuell ausgecheckten Zweig zur Überprüfung an den vom Gerrit-Server gehosteten Upstream-Zweig hochgeladen, der in der Manifestdatei aufgeführt ist. Wenn die Art von Push, die Sie tun möchten, nicht mit diesem Anwendungsfall übereinstimmt, müssen Sie die zugrunde liegenden Git-Befehle für das Schieben verwenden. Sie können immer noch repo start verwenden (aber Sie müssen nicht).

Um einen Manifest-Zweig zu erstellen, sind repo start und repo upload nicht nützlich. Im Gegensatz zu anderen Gits, die von Repo verwaltet werden, sollten Sie alle Änderungen am Manifest-Git im Zweig default vornehmen, den Repo für Sie überprüft. Verwenden Sie dann einfache Git-Befehle, um Ihre Änderungen zu übernehmen.

Das folgende Beispiel zeigt, wie ein neuer Manifestzweig namens mybranch erstellt wird, der identisch mit dem aktuellen Upstream ist.

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

Nun, dies allein ist nicht sehr nützlich, da der Inhalt Ihres Manifests an den Upstream-Zweig identisch ist - wir haben nur diesen Zweig des Manifests kloniert, so, während Sie kann laufen

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

die Ergebnisse werden identisch zu dem, was Sie mit gestartet:

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

Für Ihren Spiegel nützlich zu sein, Sie auch jeden Zweig müssen git wird im Manifest aufgelistet, sodass Sie eine Verzweigung auf Ihrem Server erhalten, auf der Sie Änderungen vornehmen können.

Theoretisch könnten Sie Änderungen an den gleichen Verzweigungen vornehmen, die Sie von Ihrem Upstream heruntergeladen haben, aber das würde beim nächsten Mal zu Verwirrung führen. Tu das nicht.

Um Zweige auf dem Server erstellen Sie das gleiche Muster wie für das Manifest folgen:

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

Beachten Sie die Verwendung von HEAD, den symbolischen Namen des aktuell ausgecheckt begehen. Dadurch für jeden git ist mühsam, so verwenden Sie den Befehl repo forall:

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

Beachten Sie, dass der Remote-Name aus dem Manifest git (IIRC) unterscheidet.

Siehe repo help forall für eine Liste von Umgebungsvariablen für Befehle ausführen, indem repo forall (REPO_PROJECT, $REPO_LREV und $REPO_RREV sind wahrscheinlich die am nützlichsten).

Es ist einfach, mit repo forall vermasseln, so dass es eine gute Gewohnheit machen Sie Ihren Befehl mit echo ersten voranstellen, die Befehle haben, dass ausgeführt wurden zu Ihrem Terminal Echo würde. Wenn Sie mit den Ergebnissen zufrieden sind, entfernen Sie echo, um die Befehle für real auszuführen.

Inzwischen haben Sie einen mybranch Zweig in allen Ihren Gits, einschließlich des Manifests. Was bleibt, ist das Manifest zu ändern, so dass

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

tatsächlich überprüfen mybranch in allen gits.

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 

Beachten Sie, dass alle gits müssen nicht die Standard-Version verwenden (die Sie gerade zu mybranch geändert). Das ist wahrscheinlich der Fall für den Manifest-Zweig von android-4.2.2_1, aber in anderen Fällen verwenden einige Gits nicht die Standardrevision, sondern überschreiben sie stattdessen mit ihrem eigenen Revisionsattribut. Das ist völlig in Ordnung, aber Sie müssen zusätzliche Änderungen vornehmen.

+0

Das war super nützlich; Vielen Dank. –