J'ai un référentiel Git déjà initialisé auquel j'ai ajouté un fichier .gitignore
. Comment puis-je actualiser l'index de fichiers afin que les fichiers que je veux ignorer soient ignorés?
Pour extraire un fichier unique déjà ajouté/initialisé dans votre référentiel, , c'est-à-dire , arrête de suivre le fichier mais ne le supprime pas de ton système utilise: git rm --cached filename
Pour désarchiver tous les fichiers qui se trouvent maintenant dans votre .gitignore
:
Commencez par valider toutes les modifications de code en attente, puis exécutez la commande suivante:
git rm -r --cached .
Cela supprime tous les fichiers modifiés de l'index (zone intermédiaire), puis lance simplement:
git add .
Engagez-le:
git commit -m ".gitignore is now working"
Pour annuler git rm --cached filename
, utilisez git add filename
.
Assurez-vous de valider toutes vos modifications importantes avant d'exécuter
git add .
Sinon vous perdrez toutes les modifications apportées aux autres fichiers.
Si vous essayez d'ignorer les modifications apportées à un fichier déjà suivi dans le référentiel (par exemple, un fichier dev.properties que vous auriez besoin de modifier pour votre environnement local mais que vous ne voudriez jamais archiver ces modifications), procédez comme vous le souhaitez. est:
git update-index --assume-unchanged <file>
Si vous voulez recommencer à suivre les modifications
git update-index --no-assume-unchanged <file>
Voir git-update-index (1) Page de manuel .
Jetez également un coup d’œil aux options skip-worktree
et no-skip-worktree
pour update-index si vous avez besoin que cela persiste après un git-reset ( via )
Mise à jour: Puisque les gens le demandent, voici un alias pratique (et mis à jour depuis commenté 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:]]"
Pour extraire un fichier qui a déjà été ajouté/initialisé dans votre référentiel, c’est-à-dire arrêter de le suivre, mais ne pas le supprimer de votre système, utilisez: git rm --cached filename
Oui - .gitignore
le système ignore uniquement les fichiers ne se trouvant pas sous contrôle de version de git.
C'est à dire. Si vous avez déjà ajouté un fichier appelé test.txt
à l'aide de git-add
, ajouter test.txt
à .gitignore
entraînera toujours le suivi des modifications apportées à test.txt
.
Vous devez d’abord git rm test.txt
et valider ce changement. Alors seulement, les modifications apportées à test.txt
seront ignorées.
Supprimer les espaces finaux dans .gitignore
Assurez-vous également que votre .gitignore ne contient aucun espace de fin. Je me suis posé cette question parce que je cherchais une réponse, puis j’ai eu l’impression amusante d’ouvrir le rédacteur en chef au lieu de simplement féliciter. Suppression d'un seul espace supplémentaire à la fin et poof cela fonctionne maintenant :)
j'ai suivi ces étapes
git rm -r --cached .
git add .
git reset HEAD
ensuite, git supprimera tous les fichiers (* .swp dans mon cas) qui devraient être ignorés.
Si vous souhaitez arrêter le suivi du fichier sans le supprimer de votre système local, ce que je préfère pour ignorer le fichier config/database.yml
. Essayez simplement:
git rm --cached config/database.yml
# this will delete your file from git history but not from your local system.
ajoutez maintenant ce fichier au fichier .gitignore
et validez les modifications. Et à partir de maintenant, toutes les modifications apportées à config/database.yml ne seront pas suivies par git.
$ echo config/database.yml >> .gitignore
Merci
Des réponses complexes partout!
Il suffit d'utiliser le suivant
git rm -r --cached .
Il supprimera les fichiers que vous essayez d'ignorer de l'origine et non du maître de votre ordinateur!
Après cela, il suffit de commettre et Push!
Pour ne supprimer que quelques fichiers spécifiques du suivi:
git update-index --assume-unchanged path/to/file
Si jamais vous voulez recommencer à le suivre:
git update-index --no-assume-unchanged path/to/file
Comme le dit dav_i, pour conserver le fichier dans le référentiel tout en le supprimant des modifications sans créer de commit supplémentaire, vous pouvez utiliser:
git update-index --assume-unchanged filename
Ne sachant pas très bien ce que faisait la commande 'réponse', je l'ai exécutée, à mon grand désarroi. Il supprime récursivement tous les fichiers de votre dépôt Git.
Stackoverflow à la rescousse ... Comment inverser un "git rm -r."?
git reset HEAD
Fait le truc, puisque j'avais des fichiers locaux non validés que je ne voulais pas écraser.
Aucune des réponses n'a fonctionné pour moi.
Au lieu:
Après avoir déplacé le fichier, git l'ignorera.
Fonctionne aussi avec les répertoires!
Il y a peut-être une autre suggestion pour les types lents comme moi =) Mettez le fichier . Gitignore dans la racine de votre référentiel not dans le dossier . Git. À votre santé!
un autre problème que j'ai eu était que j'ai placé un commentaire en ligne.
tmp/* # ignore my tmp folder (this doesn't work)
cela marche
# ignore my tmp folder
tmp/
Si les fichiers sont déjà sous contrôle de version, vous devez les supprimer manuellement.
Grâce à votre réponse, j'ai pu écrire ce petit one-liner pour l'améliorer. Je l'ai couru sur mon .gitignore et repo, et n'ai eu aucun problème, mais si quelqu'un voit des problèmes criants, s'il vous plaît commenter. Ceci devrait git rm -r --cached
de .gitignore
:
cat $ (git rev-parse --show-toplevel) /. gitIgnore | sed "s // $ //" | grep -v "^ #" | xargs -L 1 -I {} trouver $ (git rev-parse --show-toplevel) -name "{}" | xargs -L 1 git rm -r --cached
Notez que vous aurez beaucoup de fatal: pathspec '<pathspec>' did not match any files
. C'est juste pour les fichiers qui n'ont pas été modifiés.
Un autre problème non mentionné ici est que si vous avez créé votre .gitignore dans le bloc-notes Windows, 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 sur ANSI dans le bloc-notes (ou créez le fichier sous Linux comme je l'ai fait).
De ma réponse ici: https://stackoverflow.com/a/11451916/406592
J'ai trouvé un problème étrange 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 au format Mac (\ r). Donc, après avoir sauvegardé le fichier avec la fin de ligne correcte (dans vi using: set ff = unix), tout a fonctionné comme un charme!
Sur mon serveur serveur Linux (pas vrai sur mon mac dev dev), 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 je voulais partager ...
Si vous devez arrêter de suivre beaucoup 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 souhaitez 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, tel que:
git ls-files -i --exclude-standard -- ${FOLDER} | xargs -L1 git rm
Une chose à garder également à l'esprit si .gitignore
ne semble pas ignorer les fichiers non suivis, c'est que vous ne devriez pas avoir de commentaires sur la même ligne que les ignorés. Donc ça va
# ignore all foo.txt, foo.markdown, foo.dat, etc.
foo*
Mais cela ne fonctionnera 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."
, que vous n’avez bien sûr pas.".