Git ignore les fichiers qui ne sont pas dans gitignore

117

J'ai un référentiel git qui ignore les fichiers image ainsi que quelques autres fichiers, mais mon .gitignorefichier ne l'ignore qu'un config.phpfichier. Y a-t-il un fichier ignoré global quelque part que je n'arrive pas à trouver? Je dois spécifier des fichiers pour les ajouter maintenant, et cela me donne cet avertissement:

Les chemins suivants sont ignorés par l'un de vos fichiers .gitignore.

Le contenu de mon ~/.gitconfigfichier n'est que mon adresse e-mail.

Ian Hunter
la source

Réponses:

198

git check-ignore

Utilisez la git check-ignorecommande pour déboguer votre fichier gitignore (exclure les fichiers).

Par exemple:

$ git check-ignore -v config.php
.gitignore:2:src    config.php

Les détails de sortie ci-dessus sur le modèle correspondant (le cas échéant) pour chaque chemin donné (y compris la ligne).

Alors peut-être que votre extension de fichier n'est pas ignorée, mais tout le répertoire.

Le format renvoyé est:

<source> <COLON> <linenum> <COLON> <pattern> <HT> <pathname>

Ou utilisez la commande suivante pour imprimer votre .gitignoredossier utilisateur HOME et référentiel:

cat ~/.gitignore "$(git rev-parse --show-toplevel)"/.gitignore "$(git rev-parse --show-toplevel)"/.git/info/exclude

Vous pouvez également utiliser git add -fce qui permet d'ajouter des fichiers autrement ignorés.

Voir: man gitignore, man git-check-ignorepour plus de détails.

Syntaxe

git check-ignore [options] chemin d'accès…

git check-ignore [options] --stdin

Kenorb
la source
5
C'est bien mieux que la réponse acceptée. Aucune offense à celui-là, mais cela m'a sauvé la journée Merci Kenorb.
luanjunyi
1
Mérite plus de votes positifs. J'ai découvert que des gitignore étranges dans certains dossiers / vendor / causaient des problèmes avec la dernière version de git.
Manuel Arwed Schmidt
2
celui-ci m'a sauvé aujourd'hui ... il semble que visual studio a créé un fichier appelé gitignore_global.txt dans le dossier de document des utilisateurs et cela ignorait les fichiers que je ne pouvais pas (dés) ignorer
Samuel
1
Parfaitement résolu mon problème. Certains motifs ne sont pas faciles à repérer !!
Willa le
54

Il peut être bon de savoir que votre configuration git peut contenir un fichier core.excludesfile qui est un chemin vers un fichier avec des modèles supplémentaires qui sont ignorés. Vous pouvez savoir si vous avez une telle configuration en exécutant (dans le référentiel git problématique):

git config core.excludesfile

S'il imprime un chemin de fichier, consultez le contenu de ce fichier pour plus d'informations.

Dans mon cas, j'ai installé git via une ancienne version de boxen qui ignorait le motif 'Icon?' qui dans mon cas m'a donné l'avertissement, mentionné dans cette question, pour les icônes d'un dossier (je suis sur un système de fichiers insensible à la casse, c'est pourquoi Icon? correspond aux icônes).

Gabrielf
la source
2
C'était en effet mon problème. Je ne sais pas comment ou quand ce fichier est édité, mais il
contenait
2
Merci, vous m'avez sauvé des heures de pure souffrance. Dans mon cas, c'était l'installation de l'arborescence des sources (un outil de visualisation de git repo) qui a créé de manière non logique sous le dossier documents un gitignore_global.txt qui comprenait de nombreuses exclusions.
Objet mécanique
J'ai eu ce foutrement Icon?ignoré.
Justin Skiles
C'était le cas pour moi. Il y avait pas mal de règles dans le fichier global ignore. Merci pour le conseil +1
Madness
J'ai eu * .json dans mon global ignorer - parler d'un cauchemar - merci!
Jason Perfetto le
31

Découvrez-les:

  1. Avez-vous recherché d'autres fichiers .gitignore, car il peut y en avoir beaucoup.

  2. Regardez également REPO / .git / config pour voir s'il y a quelque chose là-dedans.

  3. Repo exclude Les règles locales par dépôt peuvent être ajoutées au fichier .git / info / exclude de votre dépôt. Ces règles ne sont pas validées avec le repo et ne sont donc pas partagées avec d'autres. Cette méthode peut être utilisée pour les fichiers générés localement que vous ne vous attendez pas à ce que d'autres utilisateurs génèrent, comme les fichiers créés par votre éditeur.

gahooa
la source
Il n'y a aucun autre fichier .gitignore dans le référentiel, ni rien dans le fichier .git / config qui ignore quoi que ce soit. Comment .git / info / exclude est-il configuré?
Ian Hunter
4
On ne sait pas pourquoi cette réponse est marquée comme répondu. Comment exactement ce problème a-t-il été résolu?
Prochain développeur
exclure était mon problème. Je savais qu'il y avait une autre façon d'ignorer, que j'avais utilisée dans le passé, mais que j'avais oublié où c'était!
Chucky
22

J'ai eu le même problème - un répertoire était ignoré par git avec cette erreur:

➭ git add app/views/admin/tags/
The following paths are ignored by one of your .gitignore files:
app/views/admin/tags
Use -f if you really want to add them.
fatal: no files added

J'ai finalement compris que mon problème était une ligne dans mon ~/.gitignore_global:

TAGS

qui correspondait au chemin app/views/admin/tags. Je l'ai corrigé en ajoutant une barre oblique principale au fichier global gitignore

/TAGS

et git a recommencé à suivre mon répertoire.

Shevaun
la source
3
+1 pour m'avoir fait chercher des correspondances partielles ... gitignore_global.txt contenait "[Rr] elease * /" qui faisait ignorer mon répertoire "releasenotes".
Trev
Pour rendre les choses encore plus difficiles, git ignorera uniquement les fichiers nouvellement ajoutés, pas ceux déjà dans le dépôt. Ainsi, quand j'ai ajouté "foo /" à mon .gitignore, il n'a ignoré que les fichiers récemment ajoutés dans les sous-répertoires foo et pas tous les fichiers. Il m'a fallu une heure pour comprendre pourquoi certains fichiers étaient ignorés et d'autres non.
ccleve le
J'ai le même problème. SourceTree définit le fichier ~ / .gitignore_global dans le menu Outils-> Élément Options-> onglet Git. Après avoir nettoyé le champ Global Ignore list "git add ...", la commande a fonctionné.
Kate le
J'ai eu le même problème. J'avais un helprépertoire qui était ignoré. Heureusement, j'ai trouvé votre réponse assez rapidement.
Abdul Sadik Yalcin
9

Pour moi, j'ai accidentellement eu un joker dans mon fichier ~ / .gitignore_global. Peut-être vérifier là-bas?


la source
1
C'était exactement le problème pour moi. J'avais * .png là-bas, aucune idée de comment il est arrivé là.
Shahar
3

Autre chose à essayer: j'avais un répertoire B avec son propre .gitréférentiel imbriqué sous mon répertoire de projet A (mais pas en tant que sous-module). J'ai apporté quelques modifications à B et je voulais en faire un sous-module de bonne foi. Je crois que git A ignorait automatiquement B car il contenait son propre référentiel (voir Dépôts git imbriqués sans sous-modules? ). J'ai renommé le dossier B et essayé de le cloner à nouveau en tant que sous-module, ce qui m'apportait le message d'erreur trompeur "ignoré par .gitignore". La solution consistait à supprimer .gitB.

Matt Montag
la source
2

J'avais exactement le même problème que vous. La seule réponse que vous avez obtenue a répertorié quelques endroits à vérifier, mais aucun d'entre eux n'a résolu le problème pour moi, et d'après votre commentaire, je ne pense pas non plus pour vous. Je n'avais aucun autre fichier .gitignore caché plus bas dans l'arborescence des répertoires; rien dans .git / config; rien dans .git / ingore / exclude

Si vous rencontrez toujours le problème, vérifiez cette réponse . Cela a résolu le problème pour moi

En gros, recherchez un fichier ~ / .gitignore. Le mien s'appelait ~ / .gitignore_global. Je ne sais pas quand il a été créé ( je ne l' ai certainement pas fait), mais j'ai essayé une tonne de configurations git différentes lors de la première installation, donc l'un d'entre eux a dû l'y mettre.

J'espère que sa réponse vous aidera également!

Bukov
la source
1

Une autre raison de recevoir ce message d'erreur de git est lors de l'exécution de la git submodule addcommande alors qu'une commande git précédente s'est plantée et a quitté le fichier de verrouillage (cela peut arriver, par exemple, lorsque vous utilisez des scripts personnalisés qui incluent des commandes git et que vous n'avez pas noté le crash).

Si vous exécutez la commande à la git commitplace, alors qu'aucune des conditions n'a changé ( git submodule addcontinuera à crier que vos .gitignorefichiers sont à blâmer), vous verrez un autre rapport d'erreur à la place:

$ git commit -a
fatal: Unable to create '..../.git/index.lock': File exists.

If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.

et en effet en supprimant le lockfile:

rm .git/index.lock

résout le problème. (Cela arrive à la version 2.1.0.9736 de git. Cela pourrait être corrigé dans les futures versions de git.)

Ger Hobbelt
la source
Merci, cela s'est avéré être le problème que j'avais. Sauveur de vie!
JDawgg
1

Vérifiez que vous avez l'autorisation d'accéder au dossier. Je viens de rencontrer ceci et c'était parce que le dossier appartenait à l'utilisateur www-data et non à l'utilisateur sous lequel j'étais connecté au terminal.

Conrad Jones
la source
1

Dans mon cas, c'était la barre oblique sur mon chemin qui causait le problème ...

Ne fonctionne pas

/srv/bootstrap/

Travail

srv/bootstrap/
jwogrady
la source
1

Une dernière chose: si le répertoire dans lequel vous vous trouvez nécessite un accès root pour l'écriture ou l'exécution, assurez-vous que vous êtes sur l'utilisateur root. En fait, j'ai eu une erreur étrange où j'essayais d'ajouter un sous-module et git n'arrêtait pas de se plaindre que le chemin dans lequel je clonais était ignoré par un fichier git ignore. Ensuite, je suis passé à l'utilisateur root, j'ai exécuté à nouveau l'ajout de sous-module et il n'y a pas eu de problème.

Maharlikans
la source
1

Ce n'est peut-être pas .gitignore: skip-worktreeetassume-unchanged

Un fichier peut être ignoré pour les raisons suivantes:

  1. .gitignore (la combinaison de tous)
  2. git update-index --skip-worktree
  3. git update-index --assume-unchanged

En outre, un fichier peut ne pas être ignoré s'il se trouve dans .gitignoreET déjà stocké dans l'index / le cache.

Pour vérifier les cas énumérés ci-dessus:

  1. Pour les deux cas d' .gitignoreexclusions, comparez la sortie de:

    • git check-ignore --verbose --non-matching --no-index file1 file2 file3
    • git check-ignore --verbose --non-matching file1 file2 file3
  2. git ls-files file1 file2 file3 | grep -E '^S'

  3. git ls-files file1 file2 file3 | grep -E '^[[:lower:]]'

C'est trop difficile, donnez-moi juste un pseudonyme!

L'alias suivant couvrira tous les cas énumérés ci-dessus:

ignore = !"bash -c 'diff --unified=999999999 --color=always <(git check-ignore --verbose --non-matching --no-index \"$@\") <(git check-ignore --verbose --non-matching \"$@\")' - \"$@\" | tail -n+4; git ls-files -v \"$@\"| grep -E '^(S|[[:lower:]])' # Print ignore status of arguments. Files included by index are tagged with prepended '+'. ls-files S means update-index --skip-worktree, and lower first letter means --assume-unchanged."

Le commentaire et le final "font partie de la ligne à copier dans votre .gitconfig.

Usage:

git ignore file1 file2 file3
Tom Hale
la source
0

Veuillez également vérifier ~/.gitignoreet ~/.gitignore_globalqui pourraient être créés par certains clients Git (par exemple Atlassian SourceTree sur Mac OS X).

viviansteller
la source
0

Assurez-vous que le .gitignorefichier ne s'ignore pas. Une erreur courante consiste à ajouter une *règle au .gitignorefichier pour ignorer tous les fichiers du dossier actuel. La solution consiste à ajouter une exception à .gitignore:

*
!.gitignore

De cette façon, tous les fichiers du répertoire seront ignorés, sauf .gitignore.

jfoliveira
la source