Ok, ecco lo scenario: un team di sviluppatori vuole assicurarsi che tutto il nuovo codice corrisponda agli standard di codifica definiti e che tutti i test unitari passino prima che un commit venga accettato. Ecco il trucco, tutti i test devono essere eseguiti su una macchina di test dedicata e non abbiamo accesso a modificare il server Git, quindi questo deve essere fatto utilizzando un hook di commit locale su ogni macchina di sviluppo.Applica standard di codice in git prima che venga accettato il commit
Mentre le specifiche sono piuttosto rigide (non stiamo passando a Windows o Subversion, ad esempio) questo è un problema del mondo reale, quindi c'è una certa flessibilità se si dispone di una soluzione che si adatta quasi.
- Stiamo utilizzando Git e * nix.
- Il codice aggiornato deve essere inviato a un altro server per eseguire la suite di test.
- È necessario fornire un elenco di file modificati per garantire che corrispondano allo standard di codifica.
- È un codebase piuttosto grande, quindi dovremmo inviare la più piccola quantità di informazioni necessarie per garantire copie identiche del codice base.
- Se i test falliscono, è necessario visualizzare un messaggio con l'errore e il commit deve essere bloccato.
- Supponiamo che ci fidiamo del nostro team di sviluppo e della sua approvazione per consentire l'esclusione dei test con l'opzione
--no-verify
.
La domanda: Qual è il modo migliore per ottenere il server di prova per la sincronizzazione con l'ambiente locale per eseguire i test? Una sorta di hash-to-hash matching con una patch git per il nuovo commit? Salta Git del tutto e fai un rsync? Qualcos'altro?
Aggiornamento 8/7/13: Mi sono sparato ai piedi menzionando anche il repository remoto. Il punto non è quello di impedire che il codice venga trasferito al repository condiviso/remoto, per impedire che il commit locale si verifichi. Indipendentemente dal fatto che questa sia considerata una buona pratica, in realtà non è il punto in questo caso, in quanto ciò è specifico per un piccolo team di sviluppatori che desiderano tutti questa funzionalità esatta. La domanda riguarda il modo migliore per raggiungere l'obiettivo.
Non è questo essenzialmente per le richieste pull? (È possibile che tu non stia utilizzando GitHub in questo progetto ma puoi quasi certamente fare qualcosa di simile.) – Ajedi32
Le richieste di pull sono per la revisione del codice, sì, ma l'idea qui è che il codice non dovrebbe nemmeno essere impegnato sul repository a meno che non passi una prima revisione automatizzata. –
Molti progetti Github utilizzano anche un server di integrazione continua come Travis per eseguire test sul codice nelle richieste pull e riportare i risultati, quindi non solo per le revisioni del codice. Inoltre, il codice nelle richieste pull non è tecnicamente nel repository finché la richiesta pull non viene unita. Ecco perché si chiama richiesta ['pull'] (https://www.kernel.org/pub/software/scm/git/docs/git-pull.html). – Ajedi32