Ignorer les fichiers qui ont déjà été engagés dans un dépôt Git [dupliquer]

cette question a déjà une réponse ici:

j'ai un dépôt git déjà initialisé auquel j'ai ajouté un fichier .gitignore . Comment puis-je rafraîchir l'index des fichiers pour que les fichiers Je veux ignoré ignoré?

2233
demandé sur dreftymac 2009-07-16 23:26:35

21 réponses

pour déverrouiller un single fichier qui a déjà été ajouté/initialisé à votre dépôt, i.e. , arrêter de suivre le fichier mais ne pas le supprimer de votre utilisation du système: git rm --cached filename

pour déverrouiller chaque fichier qui est maintenant dans votre .gitignore :

commettez D'abord tout changement de code en cours , puis exécutez cette commande:

git rm -r --cached .

cela supprime tous les fichiers modifiés de index (zone de transit), puis il suffit d'exécuter:

git add .

s'Engager:

git commit -m ".gitignore is now working"

pour annuler git rm --cached filename , utilisez git add filename .

assurez-vous d'effectuer tous vos changements importants avant de lancer git add . Sinon, vous perdrez tout changement d'autres fichiers.

3707
répondu takeshin 2018-07-16 23:48:27

si vous essayez d'ignorer les modifications apportées à un fichier déjà suivi dans le dépôt (par exemple un dev.propriétés fichier que vous auriez besoin de changer pour votre environnement local, mais vous ne voudriez jamais vérifier ces changements) que ce que vous voulez faire est:

git update-index --assume-unchanged <file>

Si vous voulez commencer le suivi des changements de nouveau

git update-index --no-assume-unchanged <file>

Voir git-mise à jour de l'index(1) Page de Manuel de .

aussi jeter un oeil aux skip-worktree et no-skip-worktree options pour update-index si vous avez besoin de cela pour persister après un git-reset ( via )


mise à Jour: Puisque les gens ont demandé, voici un alias pratique (et mis à jour depuis commenté ci-dessous) pour voir quels fichiers sont actuellement "ignorés" (--supposer-inchangé) dans votre espace de travail local

$ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"
529
répondu dyodji 2017-05-23 12:34:59

pour déverrouiller un fichier qui a déjà été ajouté/initialisé à votre dépôt, c'est-à-dire arrêter de suivre le fichier mais ne pas le supprimer de votre utilisation du système: git rm --cached filename

351
répondu pagetribe 2010-09-14 23:55:15

Oui .gitignore d'un seul système ignore les fichiers qui ne sont pas actuellement sous contrôle de version de git.

i. e. si vous avez déjà ajouté un fichier appelé test.txt en utilisant git-add , alors l'ajout de test.txt à .gitignore causera toujours des changements à test.txt à suivre.

vous devez d'abord git rm test.txt et engager ce changement. Ce n'est qu'alors que les changements à test.txt seront ignorés.

78
répondu Antony Stubbs 2017-01-02 17:44:37

supprimer les espaces vides .gitignore

aussi, assurez-vous que vous n'avez pas de blancs traînants dans votre espace .gitignore. Je suis arrivé à cette question parce que je cherchais une réponse, puis j'ai eu un drôle de sentiment que je devrais ouvrir l'éditeur au lieu de juste cat'ing .gitignore. Supprimé un seul espace supplémentaire de la fin et poof il fonctionne maintenant:)

50
répondu MikeJansen 2012-02-02 15:59:49

j'ai suivi ces étapes

git rm -r --cached .
git add .
git reset HEAD

après cela, git supprimer tous les fichiers (*.swp dans mon cas) qui devrait être ignorant.

40
répondu Orlando 2011-07-15 07:22:58

si vous voulez arrêter de suivre le fichier sans supprimer le fichier de votre système local, que je préfère pour ignorer config/database.yml fichier. Essayez simplement:

git rm --cached config/database.yml
# this will delete your file from git history but not from your local system.

Maintenant, ajoutez ce fichier au fichier .gitignore et propagez les modifications. Et à partir de maintenant, tout changement apporté à la configuration/base de données.yml ne sera pas suivi par git.

$ echo config/database.yml >> .gitignore

Merci

37
répondu przbadu 2015-12-17 04:01:12

Pour supprimer quelques fichiers spécifiques de suivi:

git update-index --assume-unchanged path/to/file

Si jamais vous voulez commencer le suivi de nouveau:

git update-index --no-assume-unchanged path/to/file                      
28
répondu Mark Salvatore 2014-05-23 15:27:13

comme dav_i le dit, pour conserver le fichier dans repo et le supprimer des modifications sans créer de propagation supplémentaire, vous pouvez utiliser:

git update-index --assume-unchanged filename
26
répondu Iman Mohamadi 2015-04-17 07:21:44

des réponses complexes partout!

il suffit d'utiliser ce qui suit

git rm -r --cached .

il va supprimer les fichiers que vous essayez d'ignorer de l'origine et non du maître sur votre ordinateur!

après ça, commettez et poussez!

26
répondu Ahmad Awais 2017-07-19 05:38:19

ne sachant pas tout à fait ce que l'ordre de "réponse" a fait, je l'ai couru, à mon grand désarroi. Il supprime récursivement chaque fichier de votre git repo.

Stackoverflow à la rescousse... Comment rétablir un "git rm-r ."?

git reset HEAD

a fait l'affaire, puisque j'avais des fichiers locaux non engagés que je ne voulais pas écraser.

24
répondu averydev 2017-05-23 12:26:43

Il ya une autre suggestion peut-être pour les gars lents comme moi =) mettre le .gitignore fichier dans votre dossier racine du référentiel pas dans .dossier git . Acclamations!

23
répondu Olga 2015-04-27 12:03:53

aucune des réponses n'a fonctionné pour moi.

au lieu de:

  1. déplacer le fichier hors du répertoire contrôlé par git
  2. Vérifier la suppression dans le dépôt git
  3. renvoie le fichier dans le répertoire contrôlé par git

après avoir déplacé le fichier, git l'ignorera.



Fonctionne avec des répertoires aussi!

22
répondu Hunter S 2015-12-17 16:23:56

un autre problème que j'ai eu était j'ai placé un commentaire en ligne.

tmp/*   # ignore my tmp folder (this doesn't work)

ça fonctionne

# ignore my tmp folder
tmp/
20
répondu kindahero 2011-12-06 13:14:59

Si les fichiers sont déjà dans le contrôle de version, vous devez les supprimer manuellement.

18
répondu Aragorn 2009-07-16 19:28:57

grâce à votre réponse, j'ai pu écrire cette petite doublure pour l'améliorer. J'ai couru sur mon .gitignore et des pensions, et pas eu de problèmes, mais si quelqu'un voit tous les problèmes flagrants, s'il vous plaît commentaire. Cela devrait git rm -r --cached de .gitignore :

cat $(git rev-parse --show-toplevel)/.gitIgnore | sed "s//$//" | grep -v "^#" | xargs -L 1 -I {} trouvez $(git rev-parse --show-toplevel) -nom "{}" | xargs -L 1 git rm -r --en cache

notez que vous obtiendrez beaucoup de fatal: pathspec '<pathspec>' did not match any files . C'est juste pour les fichiers qui n'ont pas été modifiés.

13
répondu umop 2013-01-29 15:00:33

j'ai trouvé un problème bizarre avec .gitignore. Tout était en place et semblait correct. La seule raison pour laquelle mon .gitignore a été "ignoré" était, que la fin de ligne était en format Mac (\r). Ainsi, après avoir sauvegardé le fichier avec la fin de ligne correcte (en vi en utilisant :set ff=unix) tout a fonctionné comme un charme!

10
répondu Johannes Vetter 2012-03-02 09:56:39

un autre problème non mentionné ici est si vous avez créé votre .gitignore dans Windows notepad il peut ressembler à du charabia sur d'autres plateformes comme je l'ai découvert. La clé est de vous assurer que l'encodage est défini à ANSI dans notepad, (ou faire le fichier sur linux comme je l'ai fait).

de ma réponse ici: https://stackoverflow.com/a/11451916/406592

9
répondu Matt Parkins 2017-05-23 10:31:39

sur mon serveur linux (pas vrai sur mon Mac dev local), les répertoires sont ignorés tant que je n'ajoute pas d'astérisque:

www / archives / *

Je ne sais pas pourquoi mais ça m'a fait perdre quelques heures, alors j'ai voulu partager...

8
répondu ndemoreau 2013-05-15 08:33:19

une chose à garder à l'esprit si .gitignore ne semble pas ignorer les fichiers non tracés est que vous ne devriez pas avoir de commentaires sur la même ligne que les ignorants. Donc c'est bon

# ignore all foo.txt, foo.markdown, foo.dat, etc.
foo*

mais cela ne marchera pas:

foo*   # ignore all foo.txt, foo.markdown, foo.dat, etc.

.gitignore interprète ce dernier cas comme" Ignorer les fichiers nommés "foo* # ignore all foo.txt, foo.markdown, foo.dat, etc." , ce que, bien sûr, vous n'avez pas.

6
répondu Gabriel Perdue 2016-02-19 22:52:59

si vous devez arrêter de suivre un grand nombre de fichiers ignorés, vous pouvez combiner certaines commandes:

git ls-files -i --exclude-standard | xargs -L1 git rm --cached

cela arrêterait de suivre les fichiers ignorés. Si vous voulez réellement supprimer des fichiers du système de fichiers, n'utilisez pas l'option --cached . Vous pouvez également spécifier un dossier pour limiter la recherche, tels que:

git ls-files -i --exclude-standard -- ${FOLDER} | xargs -L1 git rm

4
répondu Etherealone 2017-04-20 06:18:57