2629 votes

Ignorer les fichiers qui ont déjà été livrés dans un dépôt Git.

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

4363voto

trobrock Points 17439

Pour retrouver la trace d'un simple qui a déjà été ajouté/initialisé dans votre référentiel, c'est-à-dire pour arrêter de suivre le fichier mais pas pour le supprimer de votre système : git rm --cached filename

Pour déraciner chaque qui se trouve maintenant dans votre .gitignore :

Commencez par valider toutes les modifications de code en cours et ensuite, exécutez cette commande :

git rm -r --cached .

Cela supprime tous les fichiers modifiés de la base de données indice (zone de transit), puis courez :

git add .

Engagez-vous :

git commit -m ".gitignore is now working"

Pour annuler git rm --cached filename utiliser git add filename .

Assurez-vous de valider tous les changements importants avant de lancer le programme git add . Sinon, vous perdrez toutes les modifications apportées aux autres fichiers.

Faites attention, lorsque vous poussez ce fichier vers un dépôt et que vous le tirez d'un autre dépôt dans un état où ces fichiers sont toujours suivis, les fichiers seront SUPPRIMÉS.

278 votes

Veillez à valider toutes vos modifications avant, sinon vous perdrez le contrôle sur tous les fichiers modifiés.

2 votes

Cela ne semble pas rester sur une poussée ou un clone propre. Des idées ?

8 votes

@TravisWebb Vous devez d'abord vous assurer que vous avez configuré .gitignore. De plus, j'ai tendance à ne pas supprimer tous les fichiers de l'index, seulement ceux dont j'ai besoin en utilisant des Fileglobs comme *.o.

643voto

dyodji Points 1899

Si vous essayez d'ignorer les modifications apportées à un fichier qui est déjà suivi dans le référentiel (par exemple, un fichier dev.properties que vous devriez modifier pour votre environnement local mais que vous ne voudriez jamais enregistrer ces modifications), ce que vous devez faire est le suivant :

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

Si vous voulez recommencer à suivre les changements

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

Voir Page de manuel de git-update-index(1) .

Jetez également un coup d'œil à la skip-worktree y no-skip-worktree pour update-index si vous avez besoin que cela persiste après un git-reset ( via )


Mise à jour : Puisque les gens ont demandé, voici un alias pratique (et mis à jour depuis le commentaire ci-dessous) pour voir quels fichiers sont actuellement "ignorés" (--assume-unchanged) dans votre espace de travail local

$ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"

16 votes

C'est génial ! Brillamment utile. Savez-vous s'il existe un moyen d'obtenir une liste de tous les fichiers "en attente" ?

14 votes

Ça va marcher pour toi : git ls-files -v Si le caractère imprimé est une minuscule, le fichier est marqué assume-unchanged. voir : stackoverflow.com/a/2363495/677381 et : git-scm.com/docs/git-ls-files

0 votes

Cela ne fonctionne que si l'une de vos télécommandes n'a pas modifié le fichier en question de manière contradictoire avec ce que vous avez.

370voto

pagetribe Points 5071

Pour supprimer le suivi d'un fichier qui a déjà été ajouté/initialisé à votre référentiel, c'est-à-dire arrêter le suivi du fichier mais ne pas le supprimer de votre système, utilisez : git rm --cached filename

8 votes

C'était le moyen idéal de supprimer les quelques fichiers que j'avais ajoutés, validés, mais dont j'ai réalisé plus tard qu'ils n'avaient pas besoin d'être suivis. Après avoir ajouté ces fichiers à .gitignore, j'ai pu faire cela et les supprimer parfaitement.

9 votes

Conseil : par exemple, si vous ajoutez *.config à votre .gitignore vous pouvez faire git rm --cached *.config pour arrêter de suivre tous les *.config des fichiers.

62 votes

Notez également que cela supprimera les fichiers des autres dépôts vers lesquels vous avez poussé, même s'ils restent sur votre système. Si vous ne faites qu'ignorer les changements de fichiers et ne voulez pas les supprimer des dépôts des autres utilisateurs, essayez d'utiliser git update-index --assume-unchanged file.name

89voto

Antony Stubbs Points 4236

Oui - .gitignore ignore uniquement les fichiers qui ne sont pas actuellement sous contrôle de version de git.

C'est-à-dire que si vous avez déjà ajouté un fichier appelé test.txt en utilisant git-add puis en ajoutant test.txt a .gitignore entraînera toujours des changements dans test.txt à suivre.

Vous devez git rm test.txt d'abord et valider ce changement. Ce n'est qu'ensuite que les modifications apportées à test.txt être ignorée.

12 votes

Ce n'est pas entièrement vrai, il est possible d'ignorer les changements dans un fichier suivi... voir ma réponse : stackoverflow.com/a/11366713/677381

0 votes

Git update-index --assume-unchanged <file> et git rm --caheced <file> ne fonctionnaient pas réellement pour moi. J'ai fait git rm <fichier> et j'ai créé un nouveau fichier après cela. <file> est ignoré avec succès. J'utilise la version 1.8.1 de git -- si c'était le problème.

0 votes

Votre syntaxe est mauvaise ici. c'est git rm test.txt et voici un lien vers une réponse plus complète stackoverflow.com/questions/12661306/

54voto

MikeJansen Points 737

Suppression des espaces à la fin du fichier .gitignore

Vérifiez également que vous n'avez pas d'espace à la fin de votre fichier .gitignore. J'en suis arrivé à cette question parce que je cherchais une réponse, puis j'ai eu l'impression que je devais ouvrir l'éditeur au lieu de simplement cat'ing .gitignore. J'ai supprimé un seul espace supplémentaire à la fin et pouf cela fonctionne maintenant :)

4 votes

J'ai eu exactement le même problème, :P. C'est aussi pour cela que je suis arrivé à cette question. C'est une bonne chose que vous l'ayez documenté ici. +1

3 votes

Si comme moi vous utilisez vi pour éditer rapidement .gitignore, utilisez ':set list' pour afficher les espaces blancs.

1 votes

Cela m'est arrivé quand j'ai fait un echo node_modules >> .gitignore (au moins sous Windows)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X