2009-09-25 8 views
1

J'essaie de configurer un filtre de sorte que lors de la vérification, il va injecter des informations git liées à mon fichier et lors de la validation, il va supprimer cette information. J'ai vérifié que lorsque je commets le fichier, il est correctement nettoyé. Aussi, si je supprime le fichier et ensuite faire un checkout le fichier est correctement taché.Git smudge filter

Mon problème est le suivant. Si je modifie le fichier et que j'accepte la modification, le filtre de maculage ne s'exécute pas. Est-ce le comportement attendu? Existe-t-il un moyen de faire fonctionner le filtre smudge sur commit? (peut-être en ayant un commit suivi immédiatement par un checkout?)

+0

"lorsque je valide le fichier, il est correctement nettoyé": donc le filtre fonctionne sur le commit, oui ?. Mais peut-être ne prend-il pas en compte ce qui a été ajouté à l'index ... – VonC

+0

Le filtre clean fonctionne sur commit et le filtre smudge fonctionne à la caisse. Je me demandais s'il y avait un moyen d'exécuter le filtre de bavure après que je m'engage pour que les informations dans le fichier qui sont liées au hachage de commit etc. soient automatiquement mises à jour. – cefstat

Répondre

9

Un filtre clean/smudge n'est certainement pas le lieu pour ajouter de manière fiable des informations basées sur la validation dans un fichier d'arborescence. La raison - comme vous l'avez découvert - est que le fichier ne sera pas touché dans les opérations qui n'ont pas à écrire une nouvelle version du fichier dans l'arbre de travail. Vous pouvez fusionner ou accélérer plusieurs validations sans appliquer le filtre si le fichier n'a pas été touché par ces validations.

Vous seriez probablement mieux avec un fichier modèle qui peut être transformé en un fichier réel ignoré avec des informations de validation incorporées par une étape de construction qui utilise quelque chose comme git rev-parse HEAD ou git describe pour récupérer les informations de validation en cours.