Comment exclure un fichier uniquement du dossier racine dans Git


399

Je suis conscient de l'utilisation de .gitignorefichier pour exclure certains fichiers ajoutés, mais j'ai plusieurs config.phpfichiers dans l'arborescence source et je dois en exclure un seul, situé à la racine tandis que d'autres restent sous contrôle de révision.

Dans quoi dois-je écrire .gitignorepour que cela se produise?

Réponses:


589

De la documentation :

Si le modèle ne contient pas de barre oblique /, git le traite comme un modèle de glob de shell et vérifie une correspondance avec le chemin d'accès par rapport à l'emplacement du fichier .gitignore (par rapport au niveau supérieur de l'arborescence de travail s'il ne provient pas d'un .gitignore fichier).

Une barre oblique correspond au début du chemin d'accès. Par exemple, "/*.c" correspond à "cat-file.c" mais pas à "mozilla-sha1 / sha1.c".

Vous devez donc ajouter la ligne suivante à votre racine .gitignore:

/config.php

1
Je vous remercie! Je l'ai essayé de cette façon, mais pour une raison quelconque, cela n'a pas fonctionné. Probablement
mal tapé

1
Que faire si ce n'est pas un fichier, mais un dossier, et je veux ignorer ce dossier dans la racine du référentiel, ses fichiers contenus et tous les sous-dossiers descendants et leurs fichiers? /folder/?
CodeManX

11
Soit /folder/ou /folderfonctionnerait, mais l'ajout de la barre oblique aux extrémités limite la correspondance aux dossiers uniquement. Si vous aviez un fichier nommé 'foo' dans le répertoire racine, /foo/ne l'ignoreriez pas, mais le /fooferait.
tehDorf

Si vous avez déjà validé le fichier, exécutez la commande git rm --cached <file>, sinon le fichier ne sera pas ignoré. De: stackoverflow.com/a/1274447
Bruno Polo


29

Les versions plus anciennes de git nécessitent que vous définissiez d'abord un modèle ignoré et que vous définissiez immédiatement (sur la ligne suivante) l'exclusion. [testé sur la version 1.9.3 (Apple Git-50)]

/config.php
!/*/config.php

Les versions ultérieures nécessitent uniquement les éléments suivants [testé sur la version 2.2.1]

/config.php

17

Si la solution ci-dessus ne fonctionne pas pour vous, essayez ceci:

#1.1 Do NOT ignore file pattern in  any subdirectory
!*/config.php
#1.2 ...only ignore it in the current directory
/config.php

##########################

# 2.1 Ignore file pattern everywhere
config.php
# 2.2 ...but NOT in the current directory
!/config.php

Cela fonctionne pour moi en effet, alors que le /config.phpseul ne fonctionnait pas. Je suis curieux de savoir pourquoi cela n'a pas été le cas. Avez-vous une idée?
iago-lito 'envisageant de quitter le

@ iago-lito si vous travaillez sur un projet particulier et que vous avez du mal à ignorer certains fichiers.ext dans un répertoire particulier et en même temps à ne PAS les ignorer partout ailleurs, mettez-les dans le fichier /home/me/.gitignore: /home/me/path/to/my/project/some/folder/file.ext OU file.ext pour ignorer le fichier partout et ensuite dans / home / me / path / to / my / project / some / folder / Le fichier .gitignore place ce! file.ext pour NE PAS ignorer ce fichier uniquement dans ce répertoire particulier. Chaque dossier peut avoir son propre fichier .gitignore pour remplacer tous les paramètres des fichiers .gitignore parent ...
drugan

Hm. Cela signifie que le dépôt peut se comporter différemment selon que d'autres utilisateurs ont des ~/.gitignorefichiers différents sur leurs propres machines, non? .. En outre, mon point était: vous avez écrit "Si la solution ci-dessus ne fonctionne pas", pourquoi ne le ferait-il pas?
iago-lito 'envisageant de quitter le

oui, si votre projet peut exister dans un environnement inconnu, vous ne devez jamais vous fier aux fichiers .gitignore qui existent au-dessus du dossier racine de votre projet. N'oubliez pas que les noms de fichiers comme config.php sont assez courants, donc remplacez tout paramètre éventuellement existant pour ce fichier dans votre fichier racine .gitignore.
drugan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.