¿Cómo puedo evitar que un file (.json) se envíe con un git hook?

¿Cómo puedo evitar que un file (.json) se envíe con un git hook?

Tengo un .json que todavía está en el server. Entonces no puedo usar un gitignore. Pero ahora no quiero permitir que nadie cambie este file (confirmarlo) porque rompería algo. Quiero usar un gancho local.

¿Cómo puedo get el file especial en la confirmación?

¿Podrías por favor darme una instrucción sobre cómo lograr esto?

Gracias por su ayuda.

Una muestra 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 enumera todos los files modificados que se van a comprometer. Si foo/bar.json se encuentra en la list, entonces git reset HEAD -- foo/bar.json elimina del índice para que no se git reset HEAD -- foo/bar.json sino que quede en el tree de trabajo.

Funciona bien para ti. Sin embargo, no puedes asegurarte de que sea así para otros. Por ejemplo, otros queueboradores pueden eliminarlo de sus repositorys locales. Lo que necesita es un gancho de pre-receive en el repository central, el del lado del server. Rechaza cualquier inserción si las confirmaciones entrantes entran en contacto foo/bar.json .

Una muestra 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 

Los queueboradores reciben el post de error después de git push . Deben modificar sus confirmaciones y eliminar los cambios de foo/bar.json antes de intentarlo. En la pre-receive , debe ocuparse de deleting a ref y creating a ref si es necesario.