Gardez les fichiers ignorés hors de l'état de git

133

Je voudrais empêcher Git d'afficher les fichiers ignorés dans git status, car avoir des tonnes de documentation et de fichiers de configuration dans la liste des fichiers modifiés mais non mis à jour rend la liste à moitié inutile.

Est-il normal que Git affiche ces fichiers?

J'ai mis les informations ignorées dans un .gitignorefichier dans le répertoire racine du référentiel Git et elles ne sont pas ajoutées lors de l'utilisation, git add .mais il semble qu'elles ne soient pas entièrement ignorées non plus, car elles apparaissent dans la liste susmentionnée et n'apparaissent pas dans la liste imprimé par git ls-files --others -i --exclude-standard. Seuls les fichiers correspondant aux modèles ~/.gitignores'affichent là-haut.

Serait-ce parce qu'à un stade antérieur je ne les ai pas ignorés et qu'ils ont donc été commis au moins une fois?

Knuton
la source

Réponses:

231

Comme je l'ai trouvé dans cet article , .gitignorene fonctionne que pour les fichiers non suivis. Si vous avez ajouté des fichiers au référentiel, vous pouvez:

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

ou supprimez-les du référentiel en

git rm --cached <file>

Éditer

Cet article explique cela aussi

MBO
la source
4
update-index a fonctionné pour moi. Problème similaire où l'état de git montre des fichiers ignorés ... très ennuyeux. +1
Abe Petrillo
3
J'ai encore ce problème. Aucune des commandes ci-dessus n'a fonctionné pour moi. Dans les deux cas, git dit qu'il n'a aucune connaissance des fichiers en question mais qu'ils apparaissent toujours dans l'état de git :(
Cfreak
5
@Cfreak Affiche-t git status -- <file>-il "Modifications non préparées pour la validation" ou "Fichiers non suivis" pour votre fichier? Le premier est si vous avez déjà un fichier dans l'index et que j'aurais besoin de plus d'informations pour résoudre votre problème (mieux vaut créer une question séparée avec les messages git affichés et poster simplement un lien vers celui-ci dans un commentaire). Le dernier est pour les fichiers qui ne sont pas (encore) suivis par git, mais qui ne sont pas dans le .gitignorefichier et peuvent être librement ajoutés à l'index.
MBO
1
@MBO - oui c'est le cas. Je vous remercie! Votre commentaire m'a aidé à trouver cette réponse: stackoverflow.com/questions/594757/… qui a fonctionné pour moi.
Cfreak
1
La première option fonctionne comme un charme. J'ai déjà essayé le second, et cela a provoqué la mise en scène des fichiers comme "supprimés" et je ne voulais certainement pas cela.
Carrm
16

J'ai également eu ce problème, c'est probablement parce que vous avez ajouté votre répertoire / fichiers ignorés à .gitignore après qu'ils aient été marqués comme "à suivre" par GIT dans un flux de validation initial.

Vous devez donc effacer le cache de suivi git comme ceci:

git rm --cached -r [folder/file name]

Une explication plus détaillée peut être lue ici: http://www.frontendjunkie.com/2014/12/stop-git-from-tracking-changes-to.html

La commande ci-dessus a également supprimé les restes du dossier / des fichiers de votre origine GIT distante. Ainsi, vos dépôts GIT deviennent propres.

newbreedofgeek
la source
11

Le problème peut être que ce fichier est toujours dans le cache git. Pour résoudre ce problème, vous devez réinitialiser le cache git.

Réinitialisez le cache git. Cela supprime tout de l'index.

git rm -r --cached . 

Ajoutez à nouveau tous les fichiers:

git add . 

Commettre:

git commit -m ".gitignore was fixed." 
Ramis
la source
2

Cela fonctionne sûrement,

git rm --cached -r [folder/file name]

Usman
la source
1

Je suppose que vous ne voulez pas ajouter de répertoire tmp (plateforme Visual Studio)

1- ajoutez des lignes ci-dessous à votre fichier local .gitignore

## ignore tmp
/tmp/
./tmp/

3- sauvegarder et supprimer le dossier tmp localement. (Sauvegarder ailleurs. Par exemple sur le bureau?)

4- Validez les changements en local plutôt que Sync avec distant (par exemple, github).

Après ces étapes, votre répertoire tmp ne sera plus téléchargé.

Kursat Turkay
la source
0

De man git-lsfiles :

-i, --ignored
Show ignored files in the output. Note that this also reverses any exclude list present.

Personnellement, j'ai tendance à garder les fichiers doxygen dans mon arbre source, alors j'ai simplement ajouté ceci à mon .gitignore (qui se trouve dans le répertoire le plus haut de mon arbre source):

docs/*

J'espère que cela pourra aider.

BastiBen
la source
0

Les étapes suivantes ne fonctionnent que pour les fichiers non suivis . Cette information est applicable pour la configuration suivante:

Platform: linux

Git version: git version 1.8.3.1

Placez la liste des fichiers à ignorer dans le fichier "exclure" présent à l'emplacement suivant.

<path till .git directory>/.git/info/exclude

Contenu initial du fichier "exclure"

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~

Contenu final du fichier "exclure"

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~


*.tar
*.gch
ar dur
la source
0

Selon la réponse acceptée, vous pouvez supposer que le fichier est inchangé , de sorte que tout ce que vous faites sur votre machine locale ne soit pas engagé dans votre branche distante.

Quelque chose comme git update-index --assume-unchanged src/main/resources/config.properties où src / main.resources / config.properties est un exemple de chemin pour trouver ce fichier dans votre projet.

Maintenant, si vous voulez supprimer complètement le fichier de votre référentiel, vous pouvez utiliser à la remove cachedplace de `git rm --cached

Ce scénario pourrait être applicable dans la situation suivante:

Supposons que j'ai un fichier dans lequel je stocke les mots de passe. J'ai initialement validé ce fichier avec des détails erronés, juste pour que mes collègues aient le même fichier sur leurs machines. Cependant, j'ai maintenant ajouté mes détails corrects sur ma machine locale. Comment puis-je éviter que ce fichier ne soit à nouveau commis accidentellement avec les détails du mot de passe désormais corrects?

Francislainy Campos
la source
-1

comme ça

git --ignored myfolder

Et affichera l'état uniquement pour mon dossier

Alex
la source