È possibile eseguire un hook git che viene eseguito quando si aggiunge un file? [chiuso]

1

Sto pianificando di configurare un hook git client side per forzare un commit a fallire se qualsiasi file nel commit contiene il testo "donotcommit".

È possibile agganciare l'esecuzione di "git add", in modo da poter eseguire uno script di shell nel momento in cui i file vengono aggiunti e consentire o negare l'aggiunta in base allo stato di uscita dello script di shell.

    
posta dgnuff 27.10.2017 - 23:22
fonte

1 risposta

2

Sfortunatamente, non c'è. Tuttavia, esiste una soluzione alternativa.

Git ti consente di filtrare i file prima della stadiazione (e prima del checkout), se necessario. Puoi agganciarti proprio lì. Vedi la sezione filtro nei documenti

Ad esempio, diciamo, tutti i file .txt potrebbero non contenere la parola donotcommit . Per prima cosa, creiamo il filtro in .git/config o nel tuo file di configurazione globale:

[filter "donotcommit"]
    clean = bash -c 'tee >(cat) | grep donotcommit -qi && exit 1 || exit 0'
    smudge = cat
    required

Il filtro pulito viene eseguito su add , il filtro sfumino al momento del pagamento. required dice a git che ogni volta che questo comando fallisce, il file è in cattivo stato e non può essere aggiunto. Il comando riceve il contenuto del file inviato allo stdin, e poiché si tratta di un filtro e di ciò che viene aggiunto viene aggiunto come contenuto del file, dobbiamo assicurarci di passare l'intero file, questo è quanto tee >(cat) in clean e il cat in smudge è per. La parte | grep donotcommit -q && exit 1 || exit 0 deve essere chiara: cerca donotcommit (maiuscole / minuscole), se trovato, esci con un errore (1), altrimenti esci pulito (0).

Quindi, registra questo filtro per i file txt nel repository .gitattributes file

*.txt filter=donotcommit

Risultato:

C:\dev\test>echo Hello World > test.txt

C:\dev\test>git add test.txt

C:\dev\test>echo Hello World [DONOTCOMMIT] > test.txt

C:\dev\test>git add test.txt
error: external filter 'bash -c 'tee >(cat) | grep donotcommit -qi && exit 1 || exit 0'' failed 1
error: external filter 'bash -c 'tee >(cat) | grep donotcommit -qi && exit 1 || exit 0'' failed
fatal: test.txt: clean filter 'donotcommit' failed

C:\dev\test>
    
risposta data 28.10.2017 - 01:14
fonte

Leggi altre domande sui tag