Logo Git

Exclure des fichiers de votre dépôt Git avec gitignore

git


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 dans gitignore 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:

    curl https://raw.githubusercontent.com/github/gitignore/master/Python.gitignore > .gitignore
    

    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 dans C:/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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.