Qual è il modo corretto per controllare i dati di commit in Git?

13

Il mio obiettivo è controllare i dati di commit che non soddisfano determinati requisiti e quindi rifiutare il commit che viene creato o trasferito al repository remoto.

Il problema di fare un hook pre-commit è che è difficile distribuirlo a molte persone che devono aggiornare manualmente il loro file di hook pre-commit. Inoltre, Git non ti permette di avere sottomoduli nella cartella .git che sarebbe stato molto facile per la distribuzione, ma ahimè.

L'altra opzione che vedo sta facendo il check in credo che il gancio di aggiornamento sul lato remoto, che verificherà ogni commit che viene spinto da un dev e rifiuta il push se uno dei commit fallisce i test.

Qualcuno ha qualche idea su questo problema? E se sì, potresti fornirci o indicarmi un esempio di script di aggiornamento? Sono un po 'confuso su come funziona.

    
posta dalanmiller 13.07.2012 - 00:21
fonte

2 risposte

7

per prima cosa devi capire se non vuoi che il codice non qualificato sia impegnato o che venga spinto / pubblicato nuovamente a monte.

secondo me l'ultima è più fattibile.

con un git simile a DVCS. non vuoi veramente controllare come ogni sviluppatore usa il suo repository locale. e non puoi davvero avere il controllo su questo.

un hook pre-commit funziona bene come validazione e sanitizzazione di base, se tutti gli interessati lo adottano volontariamente. in realtà li applichiamo liberamente nella nostra azienda. tuttavia, può sempre essere saltato con git commit --no-verify .

L'hook lato server, invece, non interviene sul flusso di lavoro locale di un programmatore e si assicura che altri nel progetto basino il proprio lavoro solo su un codice che soddisfi determinati criteri. normalmente questo è ciò che le persone cercano quando implementano i controlli automatici.

questa convalida automatica non è intesa a sostituire il controllo di qualità, immagino, che di solito è ottenuto con la revisione del codice o la programmazione di coppie.

se hai familiarità con github , noterai che "pull request" è un altro approccio a questo problema. molti progetti e società open source utilizzano la richiesta pull di github per il controllo dei permessi delle filiali e la revisione del codice. ma ha bisogno dell'interazione umana, quindi potrebbe non essere quello che stai chiedendo.

    
risposta data 13.07.2012 - 10:47
fonte
1

Come hai già sottolineato, farlo sul client, anche se tecnicamente possibile, probabilmente non è pratico. Inoltre, molti utenti git commettono lavoro interinale, quindi avere controlli draconiani su ogni commit è controproducente.

La soluzione standard sarebbe un hook lato server. Probabilmente avresti impostato un hook pre-receive , che viene eseguito ogni volta che arriva un push e che può rifiutare il push se lo desidera. Il resto dipende dai controlli esatti che vuoi fare.

Questo è spiegato in Pro Git , capitolo 7.3 Personalizzazione di Git - Git Hooks .

    
risposta data 13.07.2012 - 10:31
fonte

Leggi altre domande sui tag