24Jul 2007
Indiquer à subversion des fichiers à ignorer lors du svn status
02:02 - By Fabien Poulard
Lorsque l’on gère un dépôt subversion, il y a certains fichiers qui ne sont pas sous contrôle de version et qui peuvent apparaître au sein du répertoire. Ainsi, les fichiers intermédiaires de compilation, les exécutables, les core dump, ... peuvent s’inviter dans votre dépôt. Vous souhaitez que lors d’un {svn status} ces fichiers n’apparaissent plus ? C’est possible ...
Lorsque l’on travaille au sein d’un répertoire dont le contrôle de version est soumis à subversion, il est très fréquent qu’apparaissent des fichiers qui n’ont pas lieu d’être géré par le gestionnaire de contrôle de version et dont il n’est pas nécessaire d’indiquer les modifications ou même la présence lors d’un svn status.
Sous cvs, le fichier .cvsignore était utilisé pour gérer les exceptions à ne pas soumettre au contrôle de version. Subversion intègre un système plus souple qui se base sur la gestion des propriétés.
Subversion et les propriétés : propget, propset, proplist
Au sein d’un dépôt subversion, tous les fichiers, les dossiers ainsi que le dépôt en général ont des propriétés. Ces dernières peuvent être définies automatiquement (la propriété svn:executable par exemple) ou bien manuellement. Vous pouvez connaître les propriétés d’un fichier ou d’un dépôt à l’aide de la commande svn proplist :
shell:~/mon-depot$ svn proplist Propriétés sur '.' license svn:ignore
Pour connaître la valeur d’une propriété, il suffit d’utiliser la commande svn propget suivie du nom de la propriété et du répertoire ou du fichier dont on veut connaître la propriété. Si aucun fichier n’est précisé, le répertoire courant est considéré.
shell:~/mon-depot$ svn propget license GPLv2
La propriété svn:ignore
La propriété svn:ignore est celle qui nous intéresse. Elle permet de spécifier les motifs de fichiers à ignorer au sein d’un répertoire. La syntaxe permettant de spécifier cette propriété est la suivante : svn propset svn:ignore -F <fichier_des_motifs> <repertoire>.
Par exemple, dans le cadre d’un dépôt de fichiers en Python, il est inutile de conserver dans le dépôt les versions compilés des sources Python (*.pyc), on peut donc indiquer au gestionnaire de les ignorer :
shell:~/mon-depot$ cat > .svn/svnignore <<EOF > *.pyc > EOF shell:~/mon-depot$ svn propset svn:ignore -F .svn/svnignore . Propriété 'svn:ignore' définie sur '.'
Ou bien pour un dépôt de fichiers LaTeX, on peut ignorer tous les fichiers de compilation intermédiaires : les *.log, *.aux, *.bbl, *.blg, ... :
shell:~/mon-depot$ cat > .svn/svnignore <<EOF > *.aux > *.log > *.bbl > *.blg > EOF shell:~/mon-depot$ svn propset svn:ignore -F .svn/svnignore . Propriété 'svn:ignore' définie sur '.' shell:~/mon-depot$ svn proplist Propriétés sur '.' svn:ignore shell:~/mon-depot$ svn propget svn:ignore *.aux *.log *.bbl *.blg
ATTENTION! La propriété svn:ignore n’est pas appliquée de manière récursive, il est donc nécessaire de la spécifier manuellement pour chaque dossier dans lequel vous souhaitez qu’elle s’appliquer
shell:~/mon-depot$ svn status M . ? annexes/main.tex ? annexes/Annexes.aux M annexes/Annexes.tex ? notes_a-_integrer/unites_bloc_detection.aux ? notes_a-_integrer/unites_bloc_detection.bbl ? notes_a-_integrer/unites_bloc_detection.log ? notes_a-_integrer/unites_bloc_detection.blg ? notes_a-_integrer/unites_bloc_detection.pdf M Makefile shell:~/mon-depot$ svn propset svn:ignore -F .svn/svnignore annexes/ notes_a-_integrer/ Propriété 'svn:ignore' définie sur 'annexes' Propriété 'svn:ignore' définie sur 'notes_a-_integrer' shell:~/mon-depot$ svn status M . ? annexes/main.tex M annexes M annexes/Annexes.tex ? notes_a-_integrer/unites_bloc_detection.pdf M notes_a-_integrer M Makefile
Si toutefois vous avez un doute quant aux fichiers ignorés grâce à cette propriété, vous pouvez forcer svn à l’ignorer à l’aide de l’option --no-ignore :
shell:~/mon-depot$ svn status --no-ignore M . ? annexes/main.tex I annexes/Annexes.aux I annexes/Annexes.tex~ M annexes M annexes/Annexes.tex I notes_a-_integrer/unites_bloc_detection.aux I notes_a-_integrer/unites_bloc_detection.tex~ I notes_a-_integrer/unites_bloc_detection.bbl I notes_a-_integrer/unites_bloc_detection.log I notes_a-_integrer/unites_bloc_detection.blg ? notes_a-_integrer/unites_bloc_detection.pdf M notes_a-_integrer M Makefile
About the ICS format