J'ai eu le même problème, puis j'ai découvert que j'avais enregistré mon fichier .gitignore sur un autre lecteur à la place: face-palm:
Henry
C'est une très mauvaise idée de conserver des éléments dans votre référentiel et d'ignorer les modifications qu'il contient.
Yevgeniy Afanasyev
Réponses:
396
Assurez-vous que votre se .gitignoretrouve à la racine du répertoire de travail, et dans ce répertoire, exécutez git statuset copiez le chemin d'accès au fichier à partir de la sortie d'état et collez-le dans le fichier .gitignore.
Si cela ne fonctionne pas, il est probable que votre fichier soit déjà suivi par Git. Vous pouvez le confirmer via la sortie de git status. Si le fichier n'est pas répertorié dans la section «Fichiers non suivis» , alors il est déjà suivi par Git et il ignorera la règle du .gitignorefichier.
La raison d'ignorer les fichiers dans Git est qu'ils ne seront pas ajoutés au référentiel. Si vous avez précédemment ajouté un fichier que vous souhaitez ignorer, il sera suivi par Git et les règles d'ignorance correspondant seront ignorées. Git fait cela puisque le fichier fait déjà partie du référentiel.
Pour ignorer réellement le fichier, vous devez le décompresser et le supprimer du référentiel. Vous pouvez le faire en utilisant git rm --cached sites/default/settings.php. Cela supprime le fichier du référentiel sans supprimer physiquement le fichier (c'est ce que --cachedfait). Après avoir validé cette modification, le fichier sera supprimé du référentiel et l'ignorer devrait fonctionner correctement.
Qu'entendez-vous par «racine du répertoire de travail»? Le répertoire où se trouve le dépôt '.git'?
Jonathan Leffler
Le répertoire de travail est le répertoire dans lequel .gitse trouve le répertoire et qui est lui-même la racine du référentiel. Comme lorsque vous cloner un dépôt pour /xy/ensuite /xy/est votre répertoire de travail avec l' /xy/.git/intérieur.
poke le
3
Parfois, vous devrez également faire un git add .après git rm --cachedpour reconstruire correctement l'index.
Cooper
L'idée de le vérifier dans le statut git était géniale. J'ai continué à le vérifier dans Git Staging dans Eclipse et le chemin était incorrect. Merci!
walla
1
J'avais besoin d'ajouter l'indicateur -r (récursif) car j'avais également archivé des dossiers imbriqués. Dans mon cas, j'ai déplacé à la racine de mon dossier git puis j'ai exécuté la commande git rm --cached -r .vs / Où vs était le dossier de niveau supérieur que je voulais supprimer du suivi.
Devology Ltd
114
Je rencontre ceci, c'est une vieille question, mais je veux que ce fichier soit suivi mais ne pas le suivre sur certaines copies de travail, pour ce faire, vous pouvez exécuter
C'est en fait la réponse que je cherchais. Toutes les autres réponses supposent que le fichier a été ajouté avec git add, ce qui n'est pas toujours le cas. Avec Acquia Cloud, le fichier .gitignore est censé ignorer settings.php (par exemple) mais le fichier est inclus avec le premier commit. En supprimant le suivi du fichier, il suffit de le supprimer du référentiel, donc de le supprimer du site en direct ...
PatrickS
M'a aidé aussi - merci! Voté. Je soupçonne que cela s'applique uniquement au repo git local et ne persisterait pas une fois poussé vers distant et cloné par d'autres développeurs?
Ivan
1
Oui, c'est uniquement local.
Mescalito
1
Cette réponse m'amène à la fonction git dont j'avais personnellement besoin, qui était d'éviter de suivre mes modifications locales dans un fichier de paramètres stocké dans le référentiel distant. La commande que j'ai fini par utiliser étaitgit update-index --skip-worktree filename
dwllama
42
.gitignore ignorera uniquement les fichiers que vous n'avez pas encore ajoutés à votre référentiel.
Si vous avez fait un git add .et que le fichier a été ajouté à l'index, .gitignore ne vous aidera pas. Vous devrez faire git rm sites/default/settings.phppour le supprimer, puis il sera ignoré.
merci, mais comment supprimer le fichier uniquement de l'index et non du répertoire de travail?
Nick.h
1
git rmdevrait faire cela, mais il peut vous demander d'utiliser l'option -f qui le supprimerait du répertoire de travail. Je n'ai pas compris cela à part faire une copie du fichier, faire git rm -fpuis restaurer la copie.
jonescb
Même homme. Faites une copie quelque part, supprimez-la, validez l'état supprimé, ajoutez à nouveau les fichiers et voyez comment ils sont maintenant ignorés.
Yevgeniy Afanasyev
19
Veuillez utiliser cette commande
git rm -rf --cached .
git add .
Parfois, les fichiers .gitignore ne fonctionnent pas même s'ils sont corrects. La raison pour laquelle Git ignore les fichiers est qu'ils ne sont pas ajoutés au référentiel. Si vous avez ajouté un fichier que vous souhaitez ignorer auparavant, il sera suivi par Git et toute règle de correspondance ignorée sera ignorée. Git fait cela car le fichier fait déjà partie du référentiel.
Je me sens comme un noob à cause de ça ... dang it Windows
Coty Embry
Une idée de l'importance de l'encodage des fichiers? Peut-être ne pas lire correctement le chemin?
Chargnn
3
Il existe des instances, par exemple des fichiers de configuration d'application, que je souhaite suivre dans git (donc .gitignore ne fonctionnera pas), mais que je dois modifier pour les paramètres locaux. Je ne veux pas que git gère ces fichiers ou les affiche comme modifiés. Pour ce faire, j'utilise skip-worktree:
git update-index --skip-worktree path/to/file
Vous pouvez confirmer que les fichiers sont ignorés en répertoriant les fichiers et en vérifiant les lignes commençant par S pour ignorer
git ls-files -v | grep ^S
Si à l'avenir vous souhaitez que git gère à nouveau le fichier localement, exécutez simplement:
git update-index --no-skip-worktree path/to/file
Mescalito ci-dessus avait une excellente réponse, qui m'a conduit sur la bonne voie mais
git update-index --assume-unchanged file / vers / ignore.php
A un contrat avec git dans lequel: l'utilisateur promet de ne pas changer le fichier et permet à Git de supposer que le fichier de l'arbre de travail correspond à ce qui est enregistré dans l'index.
Cependant, je change le contenu des fichiers, donc dans mon cas --skip-worktree est la meilleure option.
Ce que j'ai fait pour ignorer le fichier settings.php avec succès:
git rm - sites mis en cache / default / settings.php
commit (jusqu'ici n'a pas fonctionné)
sites / default / settings.php supprimés manuellement (cela a fait l'affaire)
git add.
commit (ignoré avec succès)
Je pense que s'il y a le fichier commis sur Git, ignorer ne fonctionne pas comme prévu. Supprimez simplement le fichier et validez. Ensuite, il ignorera.
Une autre raison possible - quelques instances de clients git s'exécutant en même temps . Par exemple "git shell" + "GitHub Desktop", etc.
Cela m'est arrivé, j'utilisais "GitHub Desktop" comme client principal et il ignorait certains nouveaux paramètres .gitignore: commit après commit:
Vous commettez quelque chose.
Ensuite, validez: il ignore les paramètres .gitignore. Commit comprend de nombreux fichiers temporaires mentionnés dans le .gitignore.
Effacer le cache git; vérifiez si .gitignore est UTF8; supprimer des fichiers -> commit -> déplacer les fichiers en arrière; sauter 1 commit - rien n'a aidé.
Raison : l'éditeur Visual Studio Code fonctionnait en arrière-plan avec le même référentiel ouvert. VS Code a un contrôle git intégré, ce qui crée des conflits.
Solution : vérifiez plusieurs clients git cachés et n'utilisez qu'un seul client git à la fois, en particulier lors de la suppression du cache git.
Assurez-vous que le .gitignore n'a pas d'extension !! Cela ne peut pas être .gitignore.txt, dans Windows, nommez simplement le fichier .gitignore. et cela fonctionnera.
où repose trouve donc la "racine" mentionnée ci-dessus (je l'appellerais la racine de votre arbre de travail), et .gitignorecontient seulement sites/default/settings.php, l'ignorer fonctionne pour moi (et peu importe si elle .gitignoreest ajoutée au dépôt ou non). Cela correspond-il à la mise en page de votre dépôt? Sinon, qu'est-ce qui diffère?
Oui, c'est exactement le même que le vôtre, mais cela ne fonctionne pas. Tous les autres modèles fonctionnent. Comme je l'ai dit, le problème est sûrement lié au dossier settings.php.
Nick.h
Je pense que c'est une très mauvaise idée de conserver des éléments dans votre référentiel et d'ignorer les modifications qui y sont apportées.
Yevgeniy Afanasyev
@YevgeniyAfanasyev sauf pour des trucs comme la sortie de compilation, les paramètres utilisateur de l'IDE, tous les autres fichiers temporaires générés par votre chaîne d'outils…
Chris F Carroll
Je voulais dire garder commis dans le référentiel, pas seulement les fichiers se trouvant dans le dossier du projet. Pourquoi auriez-vous besoin de fichiers temporaires dans le référentiel?
Yevgeniy Afanasyev
0
Juste au cas où quelqu'un à l'avenir aurait le même problème que moi:
Si vous utilisez le
*
!/**/
!*.*
astuce pour supprimer les fichiers binaires sans extension, assurez-vous que TOUTES les autres lignes gitignore sont CI-DESSOUS. Git lira à partir de .gitignore depuis le haut, donc même si j'avais 'test.go' dans mon gitignore, il était le premier dans le fichier, et est devenu 'non ignoré' après
Une chose qui, je pense, a été manquée dans les excellentes réponses ici est l'existence si another *.gitignore* or multiple of them.
Dans un cas, j'avais cloné un dépôt et je ne pouvais pas comprendre pourquoi un fichier "ignoré" était à nouveau ajouté lors de l'exécution de git add . Il s'est avéré qu'il y avait un autre .gitignore dans un sous-dossier et qui remplaçait celui du dossier racine.
Réponses:
Assurez-vous que votre se
.gitignore
trouve à la racine du répertoire de travail, et dans ce répertoire, exécutezgit status
et copiez le chemin d'accès au fichier à partir de la sortie d'état et collez-le dans le fichier.gitignore
.Si cela ne fonctionne pas, il est probable que votre fichier soit déjà suivi par Git. Vous pouvez le confirmer via la sortie de
git status
. Si le fichier n'est pas répertorié dans la section «Fichiers non suivis» , alors il est déjà suivi par Git et il ignorera la règle du.gitignore
fichier.La raison d'ignorer les fichiers dans Git est qu'ils ne seront pas ajoutés au référentiel. Si vous avez précédemment ajouté un fichier que vous souhaitez ignorer, il sera suivi par Git et les règles d'ignorance correspondant seront ignorées. Git fait cela puisque le fichier fait déjà partie du référentiel.
Pour ignorer réellement le fichier, vous devez le décompresser et le supprimer du référentiel. Vous pouvez le faire en utilisant
git rm --cached sites/default/settings.php
. Cela supprime le fichier du référentiel sans supprimer physiquement le fichier (c'est ce que--cached
fait). Après avoir validé cette modification, le fichier sera supprimé du référentiel et l'ignorer devrait fonctionner correctement.la source
.git
se trouve le répertoire et qui est lui-même la racine du référentiel. Comme lorsque vous cloner un dépôt pour/xy/
ensuite/xy/
est votre répertoire de travail avec l'/xy/.git/
intérieur.git add .
aprèsgit rm --cached
pour reconstruire correctement l'index.Je rencontre ceci, c'est une vieille question, mais je veux que ce fichier soit suivi mais ne pas le suivre sur certaines copies de travail, pour ce faire, vous pouvez exécuter
la source
git update-index --skip-worktree filename
.gitignore ignorera uniquement les fichiers que vous n'avez pas encore ajoutés à votre référentiel.
Si vous avez fait un
git add .
et que le fichier a été ajouté à l'index, .gitignore ne vous aidera pas. Vous devrez fairegit rm sites/default/settings.php
pour le supprimer, puis il sera ignoré.la source
git rm
devrait faire cela, mais il peut vous demander d'utiliser l'option -f qui le supprimerait du répertoire de travail. Je n'ai pas compris cela à part faire une copie du fichier, fairegit rm -f
puis restaurer la copie.Veuillez utiliser cette commande
Parfois, les fichiers .gitignore ne fonctionnent pas même s'ils sont corrects. La raison pour laquelle Git ignore les fichiers est qu'ils ne sont pas ajoutés au référentiel. Si vous avez ajouté un fichier que vous souhaitez ignorer auparavant, il sera suivi par Git et toute règle de correspondance ignorée sera ignorée. Git fait cela car le fichier fait déjà partie du référentiel.
la source
J'ai eu le même problème. Les fichiers définis dans
.gitingore
où sont répertoriés comme fichiers non suivis lors de l'exécutiongit status
.La raison en était que le
.gitignore
fichier était enregistré enUTF-16LE
encodage et non enUTF8
encodage.Après avoir changé l'encodage du
.gitignore
fichier,UTF8
cela a fonctionné pour moi.la source
Il existe des instances, par exemple des fichiers de configuration d'application, que je souhaite suivre dans git (donc .gitignore ne fonctionnera pas), mais que je dois modifier pour les paramètres locaux. Je ne veux pas que git gère ces fichiers ou les affiche comme modifiés. Pour ce faire, j'utilise skip-worktree:
Vous pouvez confirmer que les fichiers sont ignorés en répertoriant les fichiers et en vérifiant les lignes commençant par S pour ignorer
Si à l'avenir vous souhaitez que git gère à nouveau le fichier localement, exécutez simplement:
Mescalito ci-dessus avait une excellente réponse, qui m'a conduit sur la bonne voie mais
git update-index --assume-unchanged file / vers / ignore.php
A un contrat avec git dans lequel: l'utilisateur promet de ne pas changer le fichier et permet à Git de supposer que le fichier de l'arbre de travail correspond à ce qui est enregistré dans l'index.
Cependant, je change le contenu des fichiers, donc dans mon cas --skip-worktree est la meilleure option.
Le site Web de Toshiharu Nishina a fourni une excellente explication de skip-worktree vs assume-inchangé: ignorer les fichiers déjà gérés avec Git localement
la source
Ce que j'ai fait pour ignorer le fichier settings.php avec succès:
Je pense que s'il y a le fichier commis sur Git, ignorer ne fonctionne pas comme prévu. Supprimez simplement le fichier et validez. Ensuite, il ignorera.
la source
Une autre raison possible - quelques instances de clients git s'exécutant en même temps . Par exemple "git shell" + "GitHub Desktop", etc.
Cela m'est arrivé, j'utilisais "GitHub Desktop" comme client principal et il ignorait certains nouveaux paramètres .gitignore: commit après commit:
Raison : l'éditeur Visual Studio Code fonctionnait en arrière-plan avec le même référentiel ouvert. VS Code a un contrôle git intégré, ce qui crée des conflits.
Solution : vérifiez plusieurs clients git cachés et n'utilisez qu'un seul client git à la fois, en particulier lors de la suppression du cache git.
la source
Assurez-vous que le .gitignore n'a pas d'extension !! Cela ne peut pas être .gitignore.txt, dans Windows, nommez simplement le fichier .gitignore. et cela fonctionnera.
la source
J'ai juste essayé cela avec git 1.7.3.1, et j'ai donné une structure comme:
où
repo
se trouve donc la "racine" mentionnée ci-dessus (je l'appellerais la racine de votre arbre de travail), et.gitignore
contient seulementsites/default/settings.php
, l'ignorer fonctionne pour moi (et peu importe si elle.gitignore
est ajoutée au dépôt ou non). Cela correspond-il à la mise en page de votre dépôt? Sinon, qu'est-ce qui diffère?la source
Juste au cas où quelqu'un à l'avenir aurait le même problème que moi:
Si vous utilisez le
astuce pour supprimer les fichiers binaires sans extension, assurez-vous que TOUTES les autres lignes gitignore sont CI-DESSOUS. Git lira à partir de .gitignore depuis le haut, donc même si j'avais 'test.go' dans mon gitignore, il était le premier dans le fichier, et est devenu 'non ignoré' après
la source
J'ai essayé la plupart des commandes ci-dessus sur le terminal VS Code et j'ai eu des erreurs comme:
fatal: pathspec '[dir]/[file]' did not match any files
J'ai ouvert le projet sur GitHub Desktop et je l'ai ignoré à partir de là et cela a fonctionné.
la source
Une chose qui, je pense, a été manquée dans les excellentes réponses ici est l'existence si
another *.gitignore* or multiple of them.
Dans un cas, j'avais cloné un dépôt et je ne pouvais pas comprendre pourquoi un fichier "ignoré" était à nouveau ajouté lors de l'exécution de git add . Il s'est avéré qu'il y avait un autre .gitignore dans un sous-dossier et qui remplaçait celui du dossier racine.
le
ignorait ce-fichier-continue-d'être mis en scène
le
n'avait pas de spécification pour ignorer le fichier "ce-fichier-continue-à-être".
Et d'où le problème.
L'une des choses est de simplement rechercher plusieurs fichiers .gitignore dans la hiérarchie. Et déterminez les règles telles qu'elles s'appliquent.
la source