2013-10-23 12 views
6

Sto provando a creare un nuovo ramo di AOSP (sul mio computer di sviluppo) e lo spingo su un mirror locale (su un server sulla stessa LAN). Non riesco a trovare la documentazione dello strumento "repo" che spiega come farlo.Spingere il ramo del repository sul mirror AOSP locale

ho creato uno specchio della sorgente AOSP sul mio server utilizzando:

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

Poi ho sincronizzati su un computer diverso:

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

Fin qui tutto bene. Sto usando "-b android-4.2.2_1" perché ho bisogno del mio sviluppo per utilizzare questa versione di JellyBean come riferimento.

Poi creare un nuovo ramo con "Start repo":

$ repo start my-branch-name --all 

ancora buono. Il problema è che non riesco a capire come "spingere" questo ramo sul server remoto.

Quando faccio repo info vedo:

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

Quando provo repo upload ottengo:

no branches ready for upload 

Ho poi provato repo forall -c "git push aosp my-branch-name" che fa spingere le sezioni locali per ogni repository remoto, ma sembra che questo non sia il modo giusto per farlo. In particolare, se provo a creare un nuovo client, e provo a sincronizzarlo con il ramo, non funziona.

$ 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 

Qual è il modo corretto di creare un "ramo Manifesto"?

risposta

9

Il comando repo start crea un ramo locale basato sul ramo corrente a monte. L'esecuzione di repo upload caricherà qualsiasi commit locale sul ramo attualmente estratto per la revisione al ramo upstream ospitato dal server Gerrit elencato nel file manifest. Se il tipo di push che vuoi fare non corrisponde a questo caso d'uso dovrai usare i comandi Git sottostanti per la spinta. Puoi comunque usare repo start (ma non devi).

Per creare un ramo manifest, repo start e repo upload non sono utili. A differenza di altri git che Repo gestisce, dovresti apportare tutte le modifiche al git manifest sul ramo default che Repo effettua per te. Quindi, usa i comandi Git per spingere le tue modifiche.

L'esempio seguente mostra come creare un nuovo ramo manifest chiamato mybranch, identico all'upstream corrente.

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

Ora, questo di per sé non è molto utile in quanto il contenuto del manifesto è identico al ramo a monte - abbiamo appena clonato quel ramo del manifesto così mentre si possibile corsa

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

i risultati saranno identici a quello di partenza:

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

per il vostro specchio per essere utile si hanno anche per ramificarsi ogni git elencato nel manifest in modo da ottenere un ramo sul server in cui è possibile apportare modifiche.

In teoria è possibile apportare modifiche agli stessi rami scaricati dall'upstream, ma ciò creerebbe un problema quando si tenta di sincronizzare l'upstream la volta successiva. Non farlo.

Per creare rami sul server è possibile seguire lo stesso schema per il manifesto:

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

Nota l'uso della testa, il nome simbolico del momento estratto commettere. Fare questo per ogni Git è noioso, in modo da utilizzare il comando repo forall:

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

Si noti che il nome remoto è diverso dal git manifest (IIRC).

Vedi repo help forall per un elenco delle variabili di ambiente disponibili per i comandi gestito da repo forall (REPO_PROJECT, $REPO_LREV, e $REPO_RREV sono probabilmente i più utili).

E 'facile da rovinare con repo forall, in modo da renderlo una buona abitudine per anteporre il vostro comando con echo primo ad avere i comandi che sarebbero stati eseguiti eco al vostro terminale. Se sei soddisfatto dei risultati, rimuovi echo per eseguire i comandi per davvero.

Ormai avrai un ramo mybranch in tutti i tuoi gits, incluso il manifest. Ciò che rimane è quello di cambiare il manifesto in modo che

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

sarà effettivamente controllare mybranch in tutti i 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 

Si noti che tutti i Gits non necessariamente utilizzano la revisione di default (che appena modificato per mybranch). Probabilmente è il caso del ramo manifest di android-4.2.2_1, ma in altri casi alcuni git non useranno la revisione di default ma invece la sostituiranno con il loro attributo di revisione. Va benissimo, ma ti richiederà di apportare ulteriori modifiche manifest.

+0

Ciò era super utile; Grazie. –