Exclure des fichiers de votre dépôt Git avec gitignore
Depuis plusieurs années, j’utilise Git comme outil de versioning, je le trouve très intéressant dans le fonctionnement des merges et dans la gestion de sous-module. Cependant, dans cet article, je vais vous parler d’une fonctionnalité intéressante et très connue. Je veux parler de la possibilité de dire à Git de ne pas prendre en compte certains fichiers un peu comme le svnignore
de subversion. Cette fonctionnalité est très puissante sous git.
Où spécifier les fichiers à ignorer ?
Git vous permet de spécifier les fichiers à ignorer de différentes manières. Vous pouvez bien sur combiner l’ensemble de ces méthodes.
De manière locale
La première, et certainement la plus usitée, est la création de fichier .gitignore
au sein du projet Git. Cette fonction est bien connue des utilisateurs de Github car celui-ci propose lors de la création du projet de créer lui-même le fichier .gitignore
en fonction du type de projet. La plupart du temps ce fichier est créé à la base du dépôt. Vous avez la possibilité d’en créer à n’importe quel niveau de votre projet mais cela est fortement déconseillé. Le fichier .gitignore
fait partie du projet, il sera donc partager avec les autres contributeurs.
Cette méthode est utile pour demander à ignorer les fichiers en liens avec le projet, par exemples : les builds ou encore les fichiers compilés en lien avec le langage utilisé.
Au sein du projet
La seconde méthode est la création du fichier .git/info/exclude
au sein de votre projet. Ce fichier vous est individuel et spécifique au projet sans pour autant être partagé avec les autres contributeurs au projet.
Il est utile pour demander à ignorer les fichiers en liens avec le projet mais qui ne concerne que vous, par exemple une liste des TODO que vous avez pris sous votre responsabilité.
De manière globale
La dernière manière, de demander à Git d’ignorer certains fichiers, est de le spécifier dans la configuration globale de Git. Pour cela, vous devez créer un fichier contenant l’ensemble des fichiers à ignorer sur tout vos dépôt Git. Pour ma part, je l’ai créé à l’emplacement au sein de mon HOME : $HOME/.config/git/ignore
. Une fois votre fichier créé, vous devez le spécifier à Git.
$ mkdir ~/.config/git/ $ touch ~/.config/git/ignore $ git config --global core.excludesfile ~/.config/git/ignore
Vous pouvez vérifier l’utilisation d’un fichier d’exclusion dans votre fichier de configuration git.
$ cat ~/.gitconfig | grep excludesfile excludesfile = ~/.config/git/ignore
Cette méthode est recommandée pour ignorer les fichiers créés par votre IDE ou par votre environnement. Il vous est personnel et global, nous ne devez donc pas spécifier de fichier relatif à un projet au sein de celui-ci.
Que dois-je mettre dans mes fichiers d’exclusions ?
Quel que soit l’endroit où vous spécifier les fichiers à ignorer, le format de fichier reste le même. Vous pouvez y mettre des noms de fichier complet avec ou sans le chemin, des expressions régulières et des commentaires. Vous trouverez ci-dessous une petite listes des choses possibles :
ignorer tous les fichiers ou répertoires foo | foo |
ignorer le répertoire build à la racine du projet | /build |
ignorer tous les fichiers ayant l’extension pyo ou pyc | *.py[oc] |
ignorer tous les fichiers commençant par temp sauf template | temp* !template |
Quelques exemples de fichiers d’exclusion
Vous savez maintenant comment écrire vos fichiers .gitignore
et où les placer. Comme je disais tout à l’heure, à la création d’un projet sous GitHub, Github propose la création automatique du fichier .gitignore
de votre projet en fonction du langage utilisé. Hors quand vous créez des projets hors de Github, il est toujours difficile de savoir quoi mettre dans ce fichier .gitignore
.
Vous trouverez tout un tas d’exemple de fichier .gitignore
en fonction du langage ou encore de votre environnement dans le dépôt gitignore de Github.
Pour ma part, développant sous Linux via eclipse ou vim, mon fichier gitignore global a été constitué tel que :
curl https://raw.githubusercontent.com/github/gitignore/master/Global/Linux.gitignore > ~/.config/git/ignore curl https://raw.githubusercontent.com/github/gitignore/master/Global/Eclipse.gitignore >> ~/.config/git/ignore curl https://raw.githubusercontent.com/github/gitignore/master/Global/Vim.gitignore >> ~/.config/git/ignore
Ensuite en fonction du type de projet et du langage utilisé, je créé un fichier .gitignore
à la racine du projet. Pour un projet Python, cela donne la commande suivante.
curl https://raw.githubusercontent.com/github/gitignore/master/Python.gitignore > .gitignore
Attention à bien personnaliser vos fichiers d’exclusion afin de ne pas vous retrouver avec un fichier manquant dans votre dépôt car vous l’avez ignoré inconsciemment.
Commentaires
LI
Merci pour votre explication, c’est très utile pour moi !
Anthony
De rien, c’est la pour ça … être utile 😉
Daniel
Désolé mais moi je ne comprend pas quel chemin je dois spécifier pour empêcher git d’écraser le fichier config de mon projet, j’ai beau lui mettre le chemin de répertoire complet je continue à perdre tous les fichiers de configuration de mon projet, ex:
c:/chemin/de/mon/dossier/de/config
si je place ça dansgitignore
il ira quand même écraser le dossier en question lors d’un fetch sur mon repository.Et pour le gitignore a la racine du projet je n’est pas compris le rôle de la commande:
Bonne journée.
Anthony
Bonsoir Daniel,
Le fichier
.gitignore
permet de dire à git de ne pas prendre en compte ces fichiers lors d’un commit et non d’empêcher leurs téléchargement. Sinon il ne faut pas mettre le chemin absolu de votre dossier de config mais son chemin relatif depuis la racine de votre projet.Par exemple, si votre projet se trouve dans
C:/mon/dossier/projet
et que votre dossier de configuration se trouve dansC:/mon/dossier/projet/ma/config
, il faudra mettre une ligne/ma/config
dans le fichier.gitignore
.Pour la ligne
curl https://raw.githubusercontent.com/github/gitignore/master/Python.gitignore > .gitignore
, elle permet de télécharger un exemple de fichier.gitignore
pour des projets en Python. Cette commande n’est pas utilisable sous Windows.En espérant, vous avoir éclairé. Bonne soirée.
yousfi
Bonsoir ,
Si je veux désactiver l’effet de gitignore. En fait , j’ai ignoré le dépôt de toutes fichiers java ou netbeans et maitenant j’i besoin de faire le dépôt de ses types du fichiers.
flip
Aller hop dans mon shaarli 😀 merci pour ce pense-bête
Christophe
Merci! Je passait par là parce-que j’avais un doute pour ignorer l’environnement virtuel de chaque projet.
Véro
Merci
paragon
j’ai une question, stp tu aurais une idée pour empêcher qu’un fichier soit copier d’une branche lorsqu’on crée une autre branche à partir de cette dernière !? Ex : si j’ai une brache « dev « et sur cette dernière il y a plusieurs fichiers dont un fichier nommé » toto.txt ». Par la suite je veux créer une branche « blague » à partir de la branche « dev » et je ne veux pas que le fichier « toto.txt » soit transmit sur cette nouvelle branche lors de sa création. Aurait-tu une idée de comment m’y prendre !? :visage_légèrement_souriant:
Anthony
Bonjour,
Ce n’est pas possible. Lorsque vous créez une nouvelle branche, vous mettez en quelque sorte une étiquette sur un commit donc une nouvelle branche ne peut pas être différente du commit sur lequel vous êtes. Ce que vous souhaitez était possible avec subversion qui n’avait pas une vrai gestion de branche.
Je vous conseille tout de même de rester sur gît qui reste le meilleur système de versionning que je connaisse.