Ваш iconv может сообщить вам, если что-то не является UTF-8, но другие кодировки могут быть не такими простыми (особенно 8-битные однобайтовые кодировки, как ISO-8859-1).
Для Git вам может потребоваться хук обновления вместо хука предварительной фиксации (чтобы его можно было запустить в центральном репозитории для обеспечения соблюдения правила).
Git pre-commit hook:
#!/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"
' -
Поместите один или несколько Git pathspecs после --
в командной строке git ls-files , чтобы ограничить проверяемые пути.
Чтобы проверить подсказку обновленной ссылки в хуке обновления, используйте git ls-tree --name-only -r -z $3 -- |
для генерации путей (примечание: он не обрабатывает спецификации путей к шаблонам, такие как git ls-files , так что любой шаблон - на основе фильтрации в коде оболочки) и git show "$3:$f"
для извлечения содержимого файла. Вы также можете проверить не только коммит-подсказку, но и каждый новый коммит (цикл для каждого коммита в git rev-list ^$2 $3
вместо просто $3
).