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>