2011-12-16 18 views
10

Attualmente stiamo usando SVN. Vorrei iniziare a utilizzare GitHub, ma un requisito assoluto è che avremo bisogno della convalida precomitante (premessa) del codice come abbiamo attualmente. GitHub supporta precommithooks (premergehooks)?github supporta precommithooks?

Siamo una squadra di 5 sviluppatori. Abbiamo fatto un accordo sul fatto che tutto il codice (JavaScript) dovrebbe superare la convalida di JSLint. La convalida volontaria ha dimostrato di non funzionare perché è facilmente dimenticata. Come possiamo essere sicuri che il codice che diventa disponibile agli altri sia garantito per la convalida con JSLint (o simili)?

+3

(git! = Github) – smitec

+4

Sono consapevole di questo e so che git supporta precommithooks. quindi passare a git non sarà un problema, ma non lo faremo a meno che non possiamo usare github. – coen

+0

i ganci precommit di git verranno eseguiti sulla tua macchina, se interrompono il commit non c'è possibilità di spingere il codice non convalidato per github – smitec

risposta

2

Non credo che github supporti gli hook di pre-commit. Tuttavia, il nucleo git fa. È possibile impostare localmente gli hook pre-commit o applicarli come test prima di unire i rami nel proprio github principale.

+0

Per noi, un requisito è che non è possibile eseguire il commit senza che il codice venga convalidato, quindi test prima di unire non è una soluzione, purtroppo – coen

+0

Forse dovresti allontanarti da github. Non è difficile impostare un semplice server git, e quindi puoi configurare i ganci esattamente come desideri. –

+0

L'intero punto di git è permettere che i commit avvengano facilmente - anzi, commettere è qualcosa che accade sulla vostra macchina locale; nessun numero di hook sul server remoto può impedirti di commettere errori locali. Forse dovresti cambiare la tua definizione di 'commit' in 'fusione'? Oppure se ti fidi dei tuoi utenti che mettono una copia dei ganci su ogni copia di lavoro del cliente. – bdonlan

2

No, GitHub non supporta i hook di pre-commit. Come funzionerebbe? Il commit avviene su il tuo computer, vuoi veramente consentire a GitHub di eseguire codice arbitrario sulla tua macchina?

+2

Sarebbe corretto unire finché si lavora localmente, ma quando si fondono con il repository principale, il codice dovrebbe essere convalidato. Posso immaginare che questo potrebbe essere fatto con i webhook, ad esempio. – coen

+0

// Forse potresti spiegare come rendere la domanda più comprensibile? Considera che molte persone che lo fanno avranno uno sfondo in SVN. –

2

Penso che manchi qualcosa di fondamentale in merito a git. Non è un modello centralizzato (beh, ok, è possibile, ma se lo utilizzerai in questo modo, probabilmente github è l'approccio sbagliato). Se stai usando GitHub, il modo giusto per farlo è:

  1. Host tuo repo principale
  2. le tue sviluppatori ciascuno creare il proprio fork
  3. Lasciateli felicemente mettere mano, impegnandosi e spingendo alla loro heart's content
  4. Quando pensano che una funzione sia pronta, inviano una richiesta di pull (il manutentore) che tu stesso verifichi sul lato per garantire la stabilità. Quindi unisci/rebase le loro modifiche nel repository principale.

Naturalmente ci sono molti modi per pelle un gatto. Ma quando parli di "git reale" (il tipo impiegato dalla comunità open source), il modello centralizzato di "check-it-in-and-it-dannato-ben-migliore-lavoro" è un po 'difficile, specialmente quando si tratta di progetti più grandi.

+1

Potrei davvero. Dovrei dare un'occhiata al principio della "richiesta di pull" che ho completamente perso. – coen

+0

È assolutamente ragionevole evitare che gli utenti spingano al repository che si distribuisce da quando i test falliscono se si esegue la distribuzione continua. – kranzky

+0

@kranzky Grazie per il downvote, anche se hai perso l'intero punto di questa risposta. –

3

Credo che questo articolo descrive un ottimo flusso di lavoro che potrebbe essere una base per l'automazione:

http://scottchacon.com/2011/08/31/github-flow.html

L'idea principale è che si utilizzare le richieste di pull come accennato in precedenza, ma si può anche avere un servizio che può usare github api per recuperare o estrarre il ramo facendo la richiesta, unire, testare, validare e poi spingere al ramo di destinazione.