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


13

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

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

L'altra opzione che vedo sta eseguendo il check-in Credo che l'hook di aggiornamento sul lato remoto, che controllerà ogni commit che viene spinto da uno sviluppatore e rifiuta la push se qualcuno dei commit fallisce i test.

Qualcuno ha qualche idea su questo problema? E se è così, potresti fornirmi o indicarmi uno script hook di aggiornamento di esempio? Sono un po 'confuso su come funziona.


4
Questa è un'ottima prima domanda.
Daenyth,

Risposte:


7

devi prima capire se non vuoi che il codice non qualificato venga sottoposto a commit o che venga inviato / pubblicato nuovamente a monte.

secondo me quello successivo è più fattibile.

con un DVCS come git. non vuoi davvero 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 di base e sanificazione, se tutti gli interessati lo accettano volontariamente. lo applichiamo liberamente nella nostra azienda. tuttavia, può sempre essere ignorato git commit --no-verify.

il server side hook, d'altra parte, non interviene sul flusso di lavoro locale di un programmatore e si assicura che gli altri nel progetto basino il loro lavoro solo su codice che soddisfa determinati criteri. normalmente questo è ciò che le persone cercano quando implementano i controlli automatici.

questa convalida automatica non intende sostituire il controllo di qualità, immagino, che di solito si ottiene con la revisione del codice o la programmazione di coppie.

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


1

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

La soluzione standard sarebbe un hook lato server. Probabilmente avresti impostato un pre-receivehook, che viene eseguito ogni volta che arriva una push e che può rifiutare la push se lo desidera. Il resto dipende dagli esatti controlli che si desidera effettuare.

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


Grazie per la tua risposta e adoro il nuovo sito web Git. Il mio unico problema è che è difficile iniziare a scrivere i tuoi hook di commit soprattutto perché non sai esattamente dove sei nel processo e cosa dovresti controllare. Se sto provando a scrivere un hook di pre-ricezione, suppongo che il telecomando abbia un ramo di tracciamento di ciò che sto spingendo? Come lo so? Vorrei che ci fosse una sorta di git che ti consentisse di simulare in tempo ciò che hai in questo caso.
Dalanmiller,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.