2012-03-29 5 views
11

Non riesco a capire come rendere SourceTree push a Gerrit.Push to gerrit utilizzando SourceTree

ho visto questo link, ma io continuo a non capire come si può fare: https://answers.atlassian.com/questions/29361/configuring-sourcetree-push-for-gerrit

A quanto pare secondo le note di rilascio per 1.3.3 c'è un modo per farlo, ma non riesco a capire it out: http://www.sourcetreeapp.com/update/ReleaseNotes.html#version-1.3.3

C'è una guida passo passo da qualche parte su come farlo?

In questo momento mi Eseguire questo comando sul terminale per spingere

git push origin HEAD:refs/for/master 

risposta

27

Credo che la risposta fornita da Atlassian dice di cambiare il nome del ramo remoto quando viene visualizzata la finestra di spinta.

  1. aprire la finestra di
  2. Clicca sul nome del ramo remoto sotto la colonna "Branch a distanza" (il mio è attualmente 'master')
  3. Digitare il nuovo nome del ramo remo spinta - che sarebbe 'refs/for/master 'for me
  4. Fare clic su OK.

Questo sembra aver spinto correttamente i commit in Gerrit per me. Il problema che ho ora è che il valore 'refs/for/master' non persiste. Ora per capirlo. Aggiornerò questo post una volta che l'ho capito. Spero che questo aiuti anche se è tardi per il gioco.

Aggiornamento: risulta che è necessario aggiungere una voce push in origine remota in .git/config. Dovresti farlo tramite il comando git config (anche se ho modificato il file manualmente sono sicuro che è una cattiva pratica). la linea di spinta che ho scritto è:

push = refs/heads/*:refs/for/* 

per chiarezza ecco la mia voce di origine remota .git/config:

[remote "origin"] 
    url = ssh://gerrit-test.example.com:29418/mystuff.git 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    push = refs/heads/*:refs/for/* 

In SourceTree ora si può spingere e vi spingerà a Gerrit al posto del repo finale. (ora puoi anche solo fare git push senza specificare qualcos'altro e spingerà a gerrit). Nota che dopo una spinta, SourceTree mostrerà ancora un numero sul pulsante Push che dice che hai ancora cose da spingere. Questo perché sta ancora recuperando dal master repo e le modifiche che hai inserito in gerrit non sono ancora state unite nel repository principale. Una volta che le modifiche sono state unite nel repository principale, il numero sul pulsante Push scompare.

+1

Sono stato in grado di modificare il nome del ramo remoto, ma questo non ha aiutato poiché utilizzava il master per il ramo locale e non HEAD. Ma i tuoi commenti aggiornati sono stati d'aiuto, aggiungendo la riga "push" nel mio .git/config funzionante. – JoseM

+7

Ancora grazie a molto. Ecco come farlo tramite il comando git config: 'git config remote.origin.push refs/heads/*: refs/per/*' – JoseM

+0

nice. molto meglio con lo strumento della riga di comando corretto. – mozart27

1

Se si dispone di una configurazione con Git Flow (http://nvie.com/posts/a-successful-git-branching-model/) o simile, si desidera spingere il ramo locale in un ramo remoto diverso. In tal caso, la regola push generica (menzionata da mozart27) non funzionerà in quanto spinge sempre il ramo locale al ramo remoto corrispondente.

Esempio: Ho un ramo locale "feature123" che è pronto per la revisione (ad esempio Gerrit). Il nostro ramo di integrazione è "origine/sviluppo". Se utilizzo la regola push generica, "feature123" verrà sottoposto a revisione su "origin/feature123", ma quello che voglio veramente è spingerlo per la revisione su "origine/sviluppo".

Soluzione: In SourceTree è possibile creare un azione personalizzata:

Menu caption: Push for review 
Script to run: cmd 
Parameters: /c git push origin $SHA:refs/for/develop 

Ricordati di aggiungere Git al percorso per consentire cmd di usarlo.

Quindi, anziché fare clic su "Push", fare clic con il pulsante destro del mouse sul commit e selezionare "Azioni personalizzate -> Push per revisione".

Naturalmente queste due soluzioni possono coesistere, con la regola generica che garantisce che si invii sempre per la revisione quando si spinge su una filiale remota e l'azione personalizzata per quando si desidera inviare un ramo di funzionalità per la revisione sul ramo di integrazione.