2015-06-10 11 views
6

Ho una domanda sullo switching delle filiali utilizzando repo. So che posso checkout un ramo come questo:Cambio di rami Git all'interno di un progetto Android Repo

$ repo init ... -b foo 
$ repo sync 

mia comprensione è che questo sarà checkout il ramo foo del repository manifesta, e quindi controllare i progetti git come descritto nel manifesto.

Capisco anche che posso passare rami come questo:

$ repo init ... -b bar 
$ repo sync -d 

La mia domanda è, posso passare rami senza fare repo init & repo sync di volta in volta, e quali sono le implicazioni di farlo?

Permettetemi di illustrare con un esempio:

$ repo init ... -b foo 
$ repo sync -d 
$ repo start foo-mytopic proj1 proj2 
... make some commits ... 
$ repo upload -t 
$ repo init ... -b bar 
$ repo sync -d 
$ repo start bar-topic proj1 proj3 
$ repo upload -t 
$ cd proj1 
$ git checkout foo-mytopiC# IS THIS ALLOWED? 

Ho provato questo prima, e sembra funzionare, ma è un po 'strano, perché ora ho controllato il codice che era in foo manifest, ma il mio attuale ramo manifest è bar. Quali sono le implicazioni dell'essere su un ramo diverso da quello descritto nel manifest?

Nota: ho letto this e penso che la mia domanda sia diversa. So come cambiare ramo. Mi interessano le implicazioni di essere su un ramo diverso da quello descritto nel manifest corrente e su come questo potrebbe influenzare il mio flusso di lavoro.

+0

Suppongo che la mia domanda alla fine si riduce a questo: quali sono le implicazioni di essere su un ramo diverso (upstream) in un repository git specifico rispetto al ramo specificato per quel repository git nel file manifest repository? – mkasberg

risposta

2

Poiché nessun altro è stato in grado di rispondere a questo, ho fatto un po 'più di ricerca e sperimentazione. Ecco cosa ho trovato:

Tl; dr - Alcuni comandi faranno cose strane. Fai attenzione quando usi repo sync e repo start. Cerca di attenersi a semplici comandi git. repo upload dovrebbe funzionare.

Il repo documentation dice che repo sync è equivalente a

$ git fetch origin 
$ git rebase origin/<BRANCH> 

dove FILIALE è il ramo attualmente controllato-out nella directory del progetto locale. Tuttavia, in base alla mia esperienza personale, il repo farà anche confusione con le informazioni di monitoraggio upstream per quel ramo in base a ciò che è nel manifest corrente.

Per continuare l'esempio dall'alto, git checkout foo-mytopic è, infatti, consentito e si comporterà in modo appropriato. Il caricamento di Repo invierà modifiche al ramo che sta rilevando foo-mytopic (foo), ma la sincronizzazione dei repository cambierebbe le informazioni di monitoraggio a monte. In questa situazione, potrebbe essere meglio eseguire manualmente git fetch origin e git rebase origin/<BRANCH>.

Il manifest (e il ramo) descritti da repo init non entrano in gioco fino a quando non viene eseguito repo sync o repo start.