Ответ 1
Ваш 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, чтобы ограничить проверенные имена путей.
Чтобы проверить верхушку обновленного ref в привязке к обновлению, используйте git ls-tree --name-only -r -z $3 -- |
для генерации путей (обратите внимание: он не обрабатывает шаблоны pathspecs, такие как Git ls-files, так что любая фильтрация на основе шаблонов в shell code) и git show "$3:$f"
для извлечения содержимого файла. Вы также можете проверить не только фиксацию наконечника, но и каждую новую фиксацию (цикл для каждой фиксации в git rev-list ^$2 $3
вместо просто $3
).