Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.42.1 → 2.47.0 no changes
- 2.42.0 08/21/23
- 2.41.1 → 2.41.2 no changes
- 2.41.0 06/01/23
- 2.34.1 → 2.40.3 no changes
- 2.34.0 11/15/21
- 2.33.1 → 2.33.8 no changes
- 2.33.0 08/16/21
- 2.32.1 → 2.32.7 no changes
- 2.32.0 06/06/21
- 2.22.2 → 2.31.8 no changes
- 2.22.1 08/11/19
- 2.22.0 06/07/19
- 2.20.1 → 2.21.4 no changes
- 2.20.0 12/09/18
- 2.19.1 → 2.19.6 no changes
- 2.19.0 09/10/18
- 2.17.0 → 2.18.5 no changes
- 2.16.6 12/06/19
- 2.10.5 → 2.15.4 no changes
- 2.9.5 07/30/17
- 2.5.6 → 2.8.6 no changes
- 2.4.12 05/05/17
- 2.3.10 no changes
- 2.2.3 no changes
- 2.1.4 12/17/14
- 2.0.5 12/17/14
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épertoiredoc/frotz
, mais pas au répertoirea/doc/frotz
; cependantfrotz/
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 parhello.
. 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épertoirefoo
et aux chemins contenus, mais ne correspondra pas à un fichier régulier ou un lien symboliquefoo
(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 .