Действительно ли возможно заставить предварительную фиксацию сцепиться для мерзавца или svn, который может отклонить файлы, не фиксировавшие в определенном кодировании?
Я работал над несколькими проектами, где это, кажется, проблема для придерживаний определенного кодирования файла (как UTF-8, например)
Ваш iconv может сказать вам, если что-то не UTF-8, но другие кодировки могут быть не такими простыми (особенно 8-битные, однобайтовые кодировки, такие как ISO-8859-1).
Для Git вам может потребоваться ловушка обновления вместо ловушки перед фиксацией (чтобы ее можно было запустить в центральном репозитории для обеспечения соблюдения правила).
Обработчик предварительной фиксации Git:
#!/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 после -
в командную строку git ls-files , чтобы ограничить проверяемые имена путей.
Чтобы проверить подсказку обновленной ссылки в ловушке обновления, используйте git ls-tree --name-only -r -z $ 3 - |
для генерации имен путей (примечание: это не обрабатывать спецификации путей к шаблонам, такие как git ls-files , так же как и любая основанная на шаблонах фильтрация в коде оболочки) и git show "$ 3: $ f"
для извлечения содержимого файла. Вы также можете проверить не только фиксацию подсказки, но и каждую новую фиксацию (цикл для каждой фиксации в git rev-list ^ $ 2 $ 3
вместо только $ 3
).
Перехватчики предварительной фиксации - это просто сценарии. Поэтому, если вы можете указать кодировку в сценарии, вы можете использовать эту информацию, чтобы отклонить неправильный тип файла.
Вы можете искать в файле символы, выходящие за пределы обычного диапазона символов. Если есть магическое число или тег, сообщающий вам кодировку файла, вы можете это проверить. В противном случае спросите себя: «Как я могу узнать, что этот файл имеет неправильную кодировку?» Вы можете это закодировать?
Вы могли бы использовать утилиту iconv , чтобы изменить кодировку с UTF-8 на, например, UTF-16. А если изменение не удается, значит исходный файл имеет неправильную кодировку:
$ iconv -f UTF-8 -t UTF-16 Strings.java
ÿþ
testing = iconv: illegal input sequence at position 11