untracked - global gitignore git




Ignorer les fichiers déjà validés dans un référentiel Git (14)

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?


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

Au lieu:

  1. Déplacez le fichier hors du répertoire contrôlé par git
  2. Vérifiez le retrait dans git
  3. Replacez le fichier dans le répertoire contrôlé par git

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

Fonctionne aussi avec les annuaires!


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 rm -r --cached .

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. Cela 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.


Il existe une autre suggestion, peut-être pour les types lents comme moi =). Placez le fichier .gitignore dans la racine de votre référentiel, pas dans le dossier .git . À votre santé!


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.

à la rescousse ... Comment retourner 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.


Oui, le système .gitignore ignore uniquement les fichiers ne se .gitignore pas sous contrôle de version à partir de git.

Par exemple, si vous avez déjà ajouté un fichier appelé test.txt aide de git-add , l'ajout de test.txt à .gitignore provoquera toujours le .gitignore 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.


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 de ne pas le supprimer de votre système, utilisez: git rm --cached filename


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                      

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


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 enregistrer dans 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 la page de manuel de git-update-index (1) .

Consultez également les options skip-worktree et no-skip-worktree pour update-index si vous avez besoin que cela persiste après une réinitialisation de git ( via ).

Mise à jour: Puisque les gens le demandent, voici un alias pratique (et mis à jour depuis commenté ci-dessous) permettant de 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:]]"

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 ...


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://.com/a/11451916/406592


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." , ce que vous n'avez bien sûr pas.


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.





git-rm