2013-01-14 27 views
7

Mi piace usare semplicemente git push per inviare (solo) il ramo corrente al upstream configurato. Per questo ho impostato git config push.default upstream che fa esattamente la cosa giusta.Sposta ramo corrente a Gerrit

Ora ho provato a configurare un telecomando adatto per Gerrit, che passa automaticamente a refs/for/*.

L'idea stava facendo in questo modo:

[remote "gerrit"] 
     url = ssh://host:port/repo 
     push = refs/heads/*:refs/for/* 

vorrei digitare git push gerrit e si aspettano git per spingere solo il ramo corrente al rif corretta.

Sfortunatamente ora git prova a spingere tutte le filiali locali a Gerrit. - C'è un modo per dire a Git di spingere solo il ramo attuale come con lo push.default sopra?

Aggiornamento:

  • git push può utilizzare solo un singolo refspec.
  • Se viene specificato un refspec esplicito sulla riga di comando, questo viene utilizzato.
  • Se nessuno viene indicato sulla riga di comando, viene utilizzato quello definito con il telecomando.
  • Se nessuno viene fornito con il telecomando, viene considerato solo push.default.

Per Gerrit ho bisogno di un refspec come 'ramo: ref/per/ramo' con ramo che è il ramo corrente.

Domanda:

  • Esiste un equivalente refspec esplicito a ciò push.default = monte sta facendo?
  • C'è un modo per configurare git per fare in modo che un semplice git push spinga automaticamente al refs/ref corretto?

Attualmente il modo migliore che ho trovato è avvolgere tutto in uno script separato come suggerito here. Ma non sono ancora convinto che non sia possibile con un refspec adatto.

+0

Ok. Basta controllare le diverse opzioni qui. Ho appreso che 'push.default' viene considerato solo se non viene fornito alcun refspec. E che se fornisci un refspec (come 'HEAD') tramite la riga di comando, questo sovrascrive il refspec fornito con il telecomando. Quindi sarebbe solo premere 'ref/heads', che non è quello che vuoi. Interessante. – VonC

risposta

1

In base allo source, Git implementa attualmente push.default = upstream generando un refspec esplicito contenente nomi espliciti.

Sembra che al momento non ci sia modo di specificare tale comportamento con un singolo refspec generico, e alcuni script (come suggerito here) che costruisce un esplicito refspec è l'unico modo per ora.

+0

Feedback interessante, sicuramente più accurato della mia risposta (ora cancellata). +1 – VonC

-1

È possibile configurare git per inviare solo il ramo corrente all'archivio remoto con il comando git config --global push.default current.

Le altre opzioni che è possibile passare a push.default sono:

nothing - do not push anything. 
matching - push all matching branches. All branches having the same name in both ends are considered to be matching. This is the default. 
upstream - push the current branch to its upstream branch. 
tracking - deprecated synonym for upstream. 
current - push the current branch to a branch of the same name. 

Queste configurazioni possono essere visti in git help config comando.

UPDATE: Tuttavia, leggendo più attentamente la pagina manuale, push.default "determina la spinta azione git deve avere se non refspec è dato dalla linea di comando, non refspec è configurato nel telecomando, e nessun refspec è implicita da qualsiasi le opzioni fornite sulla riga di comando ". Quindi, penso che sarà necessario utilizzare lo script per inviare solo il ramo corrente quando si specifica un refspec.

+0

Hai letto il mio commento sopra prima di postare? Ho risposto allo stesso modo (cancellato, non puoi vederlo), e ho ottenuto un -1;) – VonC

+0

Hai letto completamente la domanda? No, push.default viene preso in considerazione solo se non viene fornito alcun refspec, cioè spinge solo verso le teste. – michas

Problemi correlati