11
votes

Comment faire un crochet de pré-validation qui empêche les codages de fichiers non-UTF-8

est-il possible de faire un crochet de pré-valeur pour GIT ou SVN pouvant rejeter les fichiers non engagés dans un codage spécifique?

J'ai travaillé sur plusieurs projets où il semble être un problème de coller à un certain codage de fichier (comme UTF-8 par exemple)


0 commentaires

3 Réponses :


4
votes

Les crochets de précommture ne sont que des scripts. Donc, si vous pouvez indiquer l'encodage dans un script, vous pouvez utiliser ces informations pour rejeter le mauvais type de fichier.

Vous pouvez rechercher le fichier pour des personnages en dehors de la plage de caractères normale. S'il y a un numéro magique ou une balise pour vous indiquer le codage pour un fichier, vous pouvez vérifier cela. Sinon, demandez-vous "Comment savoir ce fichier est dans le mauvais encodage?" Pouvez-vous coder cela?


0 commentaires

2
votes

Vous pouvez peut-être utiliser utilitaire iconv pour modifier le codage de UTF-8 à par exemple UTF-16. Et si le changement échoue, le fichier source n'est pas dans l'encodage correct: xxx


0 commentaires

8
votes

Votre iconv peut être capable de vous dire si quelque chose n'est pas utf-8, mais d'autres codages peuvent ne pas être aussi faciles (surtout 8 bits, des codages d'octets unique comme ISO-8859-1) .

Pour GIT, vous pouvez réellement vouloir un crochet de mise à jour au lieu d'un crochet de pré-validation (afin qu'il puisse être exécuté dans un référentiel central pour appliquer la règle).

Crochet de préentilation GIT : xxx

mettre un ou plusieurs pathspecs de git après le - sur la ligne git ls-fichiers ligne de commande à limiter Les noms de chemin qui sont vérifiés.

Pour vérifier la pointe de la référence mise à jour dans un crochet de mise à jour, utilisez git ls-arbores-nom-seul -r -z 3 $ - | Pour générer les chemins de matchs (REMARQUE: il ne gère pas les pathspecs de modèle comme git ls-fichiers , donc tout filtrage à base de modèle dans le code shell) et git spectacle "$ 3: $ f " pour extraire le contenu du fichier. Vous voudrez peut-être aussi vérifier non seulement la pointe de commit, mais chaque nouveau commit (boucle pour chaque commit dans Git Rev-list ^ $ 3 $ 3 au lieu de 3 $ ). < / p>


0 commentaires