2011-09-19 18 views
5

Utilizzando Gerrit è facile unire accidentalmente il codice instabile dal ramo di sviluppare nel ramo stabile:git/Gerrit prevenire sviluppare ramo da unire in ramo stable/testing

$ git checkout develop
$ commit
$ git push origin HEAD:refs/for/stable

In Gerrit isn' t molto chiaro che il cambiamento proposto proviene dal ramo di sviluppo e deve essere fuso nel ramo stabile. C'è un modo per impedire che questa fusione si verifichi, sia in Git che in Gerrit?

Aggiornamento: Per ora usiamo un comando personalizzato per spingere a Gerrit che trova l'ultimo ramo in origine si basava su e solo consentono spingendo a quel ramo.

+0

Spunta questa domanda http://stackoverflow.com/questions/527833/how-to-configure-git-to-avoid-accidental-git-push –

+0

La soluzione a questa domanda impedisce di spingere. Mi piacerebbe spingere, ma voglio impedire che lo sviluppo (o qualsiasi ramo creato da sviluppo) venga spinto a refs/for/testing o refs/for/stable – Taco

+1

Quindi devi fare un hook di pre-ricezione personalizzato per il repository remoto –

risposta

1

Attualmente non ci sono opzioni nel software che impediscano di fare questo tipo di errore.

Ci sono, tuttavia, alcune cose si potrebbe fare:

  • formare le persone, in modo da controllare sempre il nome del ramo durante l'esecuzione di una recensione
  • istituito una categoria "spinto a correggere ramo" (howto here) con opzioni come +1 "Ramo corretto", 0 "Nessun punteggio", -1 "Ramo errato", quindi il revisore deve confermare formalmente che ha controllato il nome del ramo
  • impostare automaticamente uno strumento di integrazione continua rivedere e classificare la suddetta categoria (Jenkins ha un plugin È possibile utilizzare)

Vuoi condividere il comando personalizzato che usi per inviare a gerrit, per favore?

0

Un approccio potrebbe essere qualcosa di simile:

utenti segregare gruppo

  • Inviato - Tutti gli sviluppatori che si sarebbe in attesa di impegnarsi per 'sviluppo' e non a 'main'
  • Gruppo di integratori - Sviluppatori privilegiati che possono spingere e unire in "main", creare più rami se necessario.

In "git" consente l'accesso push ai membri del "gruppo Integratore" (descritto sopra).

Disclaimer: Non ho esperienza di ruolo/configurazione di amministratore Gerrit/Git, quindi sinceramente non ho idea di come 'git' sarà in grado di raccogliere informazioni su quale gruppo appartenga a qualsiasi utente (IMHO potrebbe ancora essere raggiunto manualmente).

0

È necessario impostare controlli di accesso specifici in Gerrit per il ramo "sviluppo" di tale repository.

Setup in questo modo:

Reference: refs/for/refs/heads/develop 
Push: Allow: <group> 

Ma non in questo modo:

Reference: refs/for/refs/heads/* 
Push: Allow: <group> 

questo modo il vostro <group> può spingere solo per la revisione su "refs/per/sviluppo", non "arbitri/for/stable "o qualsiasi altro ramo.

Problemi correlati