2010-02-23 2 views
3

Je voudrais écrire un hook git qui nettoie automatiquement le code, par exemple en supprimant les espaces de fin. Il est facile d'écrire un script pour rejeter certains commits, mais je préfère simplement corriger les problèmes de manière transparente lorsque cela est possible. Alors que je me rends compte que git a un support intégré pour ce genre de choses (conversion automatique des nouvelles lignes, etc.), mais je voudrais quelque chose de plus flexible. Est-il possible pour un hook de pré-commit de le faire? Pouvez-vous modifier l'index directement (ou y a-t-il une meilleure façon de le faire)? Je me rends également compte qu'en fin de compte j'ai besoin d'un hook serveur qui rejette les mauvais commits pour les développeurs qui n'utilisent pas le hook local, mais je voudrais aider ceux qui choisissent de l'utiliser. (S'il est possible de modifier le code sur le serveur, ce serait encore mieux, mais je ne le crois pas.)Écrire un crochet git pour modifier automatiquement le code pendant les validations locales

+0

Vous ne pouvez pas faire cela avec un crochet de validation, mais vous pouvez le faire avec un pilote de filtre. –

+0

Vous pouvez effectuer un hook de pré-validation. Je l'utilise pour mettre des horodateurs sur un fichier particulier. C'est en fait assez facile. – tjameson

Répondre

0

Voici un exemple d'utilisation d'un pilote de filtre pour supprimer les espaces de fin. Notez qu'après avoir effectué une validation, les espaces resteront dans la copie de travail jusqu'à ce que vous passiez à la caisse. Notez également que les espaces entre parenthèses dans la commande sed ci-dessous sont un onglet et un blanc.

 
$ rm -rf .git 
$ git init 
Initialized empty Git repository in /private/tmp/foo/.git/ 
$ echo 'trailing white ' > file 
$ echo 'file filter=white' > .git/info/attributes 
$ cat << EOF >> .git/config 
> [filter "white"] 
>   clean = sed 's/[  ]*$//' 
> EOF 
$ git add file 
$ git ci -m"Sample commit" 
[master (root-commit) 654fa8d] Sample commit 
1 files changed, 1 insertions(+), 0 deletions(-) 
create mode 100644 file 
$ git checkout -f master file 
$ cat -tve file 
trailing white$ 

Questions connexes