Git
Français ▾ Topics ▾ Latest version ▾ gitignore last updated in 2.42.0

NOM

gitignore - Spécifie les fichiers intentionnellement non suivis à ignorer

SYNOPSIS

$XDG_CONFIG_HOME/git/ignore, $GIT_DIR/info/exclude, .gitignore

DESCRIPTION

Un fichier gitignore spécifie des fichiers intentionnellement non suivis que Git devrait ignorer. Les fichiers déjà suivis par Git ne sont pas affectés ; voir les NOTES ci-dessous pour plus de détails.

Chaque ligne dans un fichier gitignore spécifie un motif. Lorsque vous décidez d’ignorer un chemin, Git vérifie normalement les motifs gitignore depuis des sources multiples, avec l’ordre suivant de priorité, du plus haut au plus bas (dans un niveau de préséance, le dernier motif qui a correspondu décide du résultat) :

  • Les motifs lus depuis la ligne de commande pour les commandes qui les gère.

  • Les motifs lus à partir d’un fichier .gitignore dans le même répertoire que le chemin, ou dans n’importe quel répertoire parent (jusqu’au niveau racine de l’arbre de travail), les modèles dans les fichiers de niveau supérieur étant remplacés par ceux dans les fichiers de niveau inférieur vers le répertoire contenant le fichier. Ces motifs cherchent la correspondance relativement à l’emplacement du fichier .gitignore. Un projet comprend normalement de tels fichiers .gitignore dans son dépôt, contenant des motifs pour les fichiers générés dans le cadre de la construction du projet.

  • Les motifs lus à partir de $GIT_DIR/info/exclude.

  • Les motifs lus à partir du fichier spécifié par la variable de configuration core.excludesFile.

Le fichier où placer un motif dépend de la façon dont le motif est destiné à être utilisé.

  • Les motifs dont les versions devraient être contrôlés et distribués à d’autres dépôts lors d’un clone (c.-à-d. les fichiers que tous les développeurs voudront ignorer) devraient aller dans un fichier .gitignore.

  • Les modèles qui sont spécifiques à un dépôt particulier, mais qui ne doivent pas être partagés avec d’autres dépôts liés (p. ex., les fichiers auxiliaires qui vivent dans le dépôt, mais qui sont spécifiques au flux de travail d’un utilisateur) devraient aller dans le fichier $GIT_DIR/info/exclude.

  • Les motifs qu’un utilisateur veut faire ignorer à Git dans toutes les situations (par ex. les sauvegardes out les fichiers temporaires générés par l’éditeur de texte de l’utilisateur) vont généralement dans un fichier spécifié par core.excludesFile dans le ~/.gitconfig de l’utilisateur. Sa valeur par défaut est $XDG_CONFIG_HOME/git/ignore. si $XDG_CONFIG_HOME n’existe pas ou est vide, on utilise $HOME/.config/git/ignore.

Les outils de plomberie Git sous-jacents, tels que git ls-files et git read-tree, lisent les motifs de gitignore spécifiés par les options de ligne de commande, ou des fichiers spécifiés par les options de ligne de commande. Les outils Git de haut niveau, tels que git status et git-add, utilisent les motifs provenant des sources indiquées ci-dessus.

FORMAT DES MOTIFS

  • Les lignes blanches ne correspondent à aucun fichier, de sorte qu’elles peuvent être utilisées comme séparateurs pour la lisibilité.

  • Les lignes commençant par un dièse ("#") peuvent donc être utilisées comme commentaires. Ajoutez une barre oblique inverse ("\") au début du motif s’il doit commencer par un dièse.

  • Les espaces finaux sont ignorés à moins qu’ils ne soient cités avec backslash ("\").

  • Un préfixe optionnel " !" qui annule le motif ; tout fichier correspondant exclu par un modèle précédent sera de nouveau inclus. Il n’est pas possible de rajouter un fichier si un répertoire parent de ce fichier est exclu. Git n’énumère pas les répertoires exclus pour des raisons de performance, donc tous les motifs sur les fichiers contenus n’ont aucun effet, peu importe où ils sont définis. Mettez un backslash ("\") devant le premier " !" pour les motifs qui commencent par un " !" littéral, par exemple "\ ! important !.txt".

  • Le slash "/" est utilisé comme séparateur de répertoires. Les séparateurs peuvent se produire au début, au milieu ou à la fin du motif de recherche .gitignore.

  • S’il y a un séparateur au début ou au milieu (ou les deux) du motif, alors le motif est relatif au répertoire contenant ce .gitignore particulier. Sinon, le motif peut aussi correspondre dans tous les niveaux de répertoire sous celui contenant le .gitignore.

  • S’il y a un séparateur à la fin du motif, alors le motif ne correspondra qu’à des répertoires, sinon le motif peut correspondre à des fichiers ou des répertoires.

  • Par exemple, un motif doc/frotz/ correspond au répertoire doc/frotz, mais pas au répertoire a/doc/frotz ; cependant frotz/ correspond à frotz et à a/frotz qui est un répertoire (tous les chemins sont relatifs par rapport au fichier .gitignore).

  • Un astérisque "*" correspond à tout sauf une barre oblique. Le caractère " ?" correspond à un seul caractère sauf "/". La notation d’intervalle, par exemple [a-zA-Z], peut être utilisée pour correspondre à l’un des caractères dans un intervalle. Voir fnmatch(3) et le drapeau FNM_PATHNAME pour une description plus détaillée.

Deux astérisques consécutifs ("**") dans les motifs comparés au nom de chemin complet peuvent avoir une signification spéciale :

  • Un "**" suivi d’une barre oblique signifie une correspondance dans tous les répertoires. Par exemple, "**/foo" correspond au fichier ou au répertoire "foo" n’importe où, comme le motif "foo". "**/foo/bar" correspond au fichier ou au répertoire "bar" n’importe où, directement sous le répertoire "foo".

  • Un "/**" de queue correspond à tout ce qui se trouve à l’intérieur. Par exemple, "abc/**" correspond à tous les fichiers du répertoire "abc", relativement à l’emplacement du fichier .gitignore, avec une profondeur infinie.

  • Une barre oblique suivie de deux astérisques consécutifs puis d’une barre oblique correspond à zéro ou plusieurs répertoires. Par exemple, "a/**/b" correspond à "a/b", "a/x/b", "a/x/y/b" et ainsi de suite.

  • Les autres astérisques consécutifs sont considérés des astérisques normaux et correspondront aux règles précédentes.

CONFIGURATION

La variable de configuration optionnelle core.excludesFile indique un chemin vers un fichier contenant des motifs de noms de fichiers à exclure, semblable à $GIT_DIR/info/exclude. Les motifs dans le fichier d’exclusion sont utilisés en plus de ceux dans $GIT_DIR/info/exclude.

NOTES

L’objectif des fichiers gitignore est de s’assurer que certains fichiers non traqués par Git restent non traqués.

Pour arrêter de suivre un fichier qui est actuellement suivi, utilisez git rm --cached pour supprimer le fichier de l’index. Le nom de fichier peut ensuite être ajouté au fichier .gitignore pour empêcher que le fichier ne soit réintroduit dans des commits ultérieurs.

Git ne suit pas les liens symboliques lorsqu’il accède à un fichier .gitignore dans l’arbre de travail. Cela maintient le comportement cohérent lorsque le fichier est accédé depuis l’index ou à un arbre par rapport à depuis le système de fichiers.

EXEMPLES

  • Le motif hello.* correspond à tout fichier ou répertoire dont le nom commence par hello.. Si l’on veut limiter cela uniquement au répertoire et non dans ses sous-répertoires, on peut préfixer le modèle avec une barre verticale, c’est-à-dire /hello.* ` ; le motif correspond maintenant à `hello.txt, à hello.c mais pas à a/hello.java.

  • Le motif foo/ correspondra à un répertoire foo et aux chemins contenus, mais ne correspondra pas à un fichier régulier ou un lien symbolique foo (ceci est compatible avec la façon dont les spécificateurs de chemin fonctionnent en général dans Git)

  • Les motifs doc/frotz et /doc/frotz ont le même effet dans tout fichier .gitignore. En d’autres termes, une barre oblique en première position n’est pas pertinente s’il y a déjà une barre oblique intermédiaire dans le motif.

  • Le motif foo/*, correspond à foo/test.json (un fichier régulier), à foo/bar (un répertoire), mais ne correspond pas à foo/bar/hello.c (un fichier régulier), car l’astérisque dans le motif ne correspond pas à bar/hello.c qui contient une barre oblique.

    $ git status
    [...]
    # Fichiers non suivis :
    [...]
    #       Documentation/foo.html
    #       Documentation/gitignore.html
    #       file.o
    #       lib.a
    #       src/internal.o
    [...]
    $ cat .git/info/exclude
    # ignore objects and archives, anywhere in the tree.
    *.[oa]
    $ cat Documentation/.gitignore
    # ignore generated html files,
    *.html
    # except foo.html which is maintained by hand
    !foo.html
    $ git status
    [...]
    # Fichiers non suivis :
    [...]
    #       Documentation/foo.html
    [...]

Autre exemple :

    $ cat .gitignore
    vmlinux*
    $ ls arch/foo/kernel/vm*
    arch/foo/kernel/vmlinux.lds.S
    $ echo '!/vmlinux*' >arch/foo/kernel/.gitignore

le second .gitignore empêche Git d’ignorer arch/foo/kernel/vmlinux.lds.S.

Exemple pour tout exclure sauf un répertoire particulier foo/bar (notez que /* sans la barre inversée initiale, le joker exclurait aussi tout sous foo/bar) :

    $ cat .gitignore
    # exclure tout sauf le répertoire foo/bar et son contenu
    /*
    !/foo
    /foo/*
    !/foo/bar

GIT

Fait partie de la suite git[1]

TRADUCTION

Cette page de manuel a été traduite par Jean-Noël Avila <jn.avila AT free DOT fr> et les membres du projet git-manpages-l10n. Veuillez signaler toute erreur de traduction par un rapport de bogue sur le site https://github.com/jnavila/git-manpages-l10n .

scroll-to-top