Un échantillon pre-commit
:
#!/bin/bash
ipath="foo/bar.json"
git diff --cached --name-only | if grep -qE "^$ipath$";then
git reset HEAD -- "$ipath"
echo "Warning: $ipath is removed from the index. It's not allowed to be committed."
fi
git diff --cached --name-only
liste tous les fichiers modifiés qui vont être engagés. Si foo/bar.json
est trouvé dans la liste, alors git reset HEAD -- foo/bar.json
le supprime de l'index afin qu'il ne soit pas validé mais laissé dans l'arbre de travail.
Cela fonctionne très bien pour vous. Cependant, vous ne pouvez pas vous assurer que c'est le cas pour les autres. Par exemple, d'autres contributeurs peuvent le supprimer de leurs référentiels locaux. Ce dont vous avez besoin est un crochet pre-receive
dans le dépôt central, celui du côté serveur. Il rejette toute poussée si la validation entrante touche foo/bar.json
.
Un échantillon pre-receive
:
#!/bin/bash
ipath="foo/bar.json"
zero="0000000000000000000000000000000000000000"
while read old new name;do
if [ "$zero" == "$old" ];then
#creating new ref, do something here
continue
fi
if [ "$zero" == "$new" ];then
#deleting a ref, do something here
continue
fi
#updating a ref, check if the incoming commits touch `foo/bar.json`
git diff $old..$new --name-only | if grep -qE "^$ipath$";then
c=$(git log $old..$new --pretty=%H -- $ipath)
echo "Error: $ipath is changed in:"
echo $c
echo "Error: $ipath is not allowed to be committed and pushed."
exit 1
fi
done
Les collaborateurs reçoivent le message d'erreur après git push
. Ils doivent modifier leurs validations et supprimer les modifications de foo/bar.json
avant un nouvel essai. Dans pre-receive
, vous devez traiter deleting a ref
et creating a ref
si nécessaire.
Vous souhaitez empêcher l'exécution du fichier généré automatiquement ou du fichier de code? – LethalProgrammer
Non désolé, c'est un peu compliqué à expliquer. Je veux que le hook vérifie si un fichier spécial sera validé et abandonne le commit si le fichier est dans le commit. – Coder949
oui c'est possible de faire. Vous pouvez écrire une règle de hook pré-commit, qui sera déclenchée pendant la validation et supprimera le fichier s'il existe et ensuite il sera validé. – LethalProgrammer