tuo iconv può essere in grado di dirvi se qualcosa non è UTF-8, ma altre codifiche non può essere così facile (soprattutto Codifiche a 8 bit, byte singolo come ISO-8859-1).
Per Git, è possibile che si desideri un hook di aggiornamento anziché un hook di pre-commit (in modo che possa essere eseguito in un repository centrale per applicare la regola).
Git gancio pre-commit:
#!/bin/sh
git ls-files -z -- |
xargs -0 sh -c '
e=""
for f; do
if ! git show :"$f" |
iconv -f UTF-8 -t UTF-8 >/dev/null 2>&1; then
e=1
echo "Not UTF-8: $f"
#exit 255 # to abort after first non-UTF-8 file
fi
done
test -z "$e"
' -
mettere uno o più pathspecs Git dopo la --
sulle git LS-files riga di comando per limitare i percorsi che vengono controllati.
Per controllare la punta del ref aggiornate in un gancio aggiornamento, utilizzare git ls-tree --name-only -r -z $3 -- |
per generare i percorsi (nota: non gestisce pathspecs reticolo come git ls-file, in modo da fare alcun filtro basato su pattern nella shell codice) e git show "$3:$f"
per estrarre il contenuto del file. Si potrebbe anche voler controllare non solo il commit tip, ma ogni nuovo commit (loop per ogni commit in git rev-list ^$2 $3
invece di solo $3
).
fonte
2010-06-30 12:58:24