Commande Git pour afficher les fichiers spécifiques sont ignorés par .gitignore
Je reçois mes pieds dans l'eau sur git et ont le problème suivant:
Mon projet arborescence source:
/
|
+--src/
+----refs/
+----...
|
+--vendor/
+----...
J'ai le code (actuellement MEF) dans ma branche vendeur que je vais compiler et puis il y déplacer les références dans /src/refs
qui est l'endroit où le projet prend de.
Mon problème est que j'ai mon .gitignore
configuré pour ignorer les *.dll
et *.pdb
. Je peux faire un git add -f bar.dll
de forcer l'ajout de la ignorés fichier qui est ok, le problème est que je n'arrive pas à comprendre à la liste de ce qu'il existe des fichiers qui sont ignorés.
Je veux lister les fichiers ignorés pour s'assurer que je n'oublie pas de les ajouter.
J'ai lu la page de man git ls-files
et ne peut pas le faire fonctionner. Il me semble que git ls-files --exclude-standard -i
devrait faire ce que je veux. Ce qui me manque?
- Ces jours, vous ne pouvez pas utiliser git-ls-fichiers mais plutôt git ls-files
- Je vous supplie de vérifier riyad, en réponse comme les corriger, puisque c'est le seul qui avoue il n'y a aucune garantie pour ce faire, utilisez uniquement les commandes git (y compris les
git clean
truc) comme l'a démontré le ici. Aussi, je recommande à l'encontre de la "exclude-from" par exemple dans votre résumé depuis que les faits ne fait pas attention à tout .gitignore fichiers. Je pose cette question surtout parce que cette page est le top de Google de réponse. - Point rapide sur "Résumé de ce qui fonctionne": le "Git ls-files" l'homme page explique que le "i" signifie inclure des fichiers exclus pour les ls de sortie. J'ai eu le même malentendu, jusqu'à ce que j'ai lu 'lentement'. 😉
- Les réponses devraient aller dans une réponse post et non dans une édition de la question.
- J'ai
git config --global alias.ls ls-files --exclude-standard
, et qui rend la réponse à cette questiongit ls -i
. - Vous devez mettre à jour votre réponse, stackoverflow.com/a/12080920/812919 pour le bénéfice des futurs lecteurs, si possible.
- Les réponses appartiennent à réponses, pas de questions. Résumant les réponses à la question veut dire que le vote, la modération, &c. sur les réponses se perd de sa valeur.
git status --ignored
est celle que je préfère: git-scm.com/docs/git-status#Documentation/...
Vous devez vous connecter pour publier un commentaire.
Notes:
git status --ignored
(comme détaillé dans "Est-il un moyen d'indiquer à git-le statut d'ignorer les effets de
.gitignore
fichiers?")git clean -ndX
fonctionne sur les anciens gits, l'affichage d'un aperçu de ce que les fichiers ignorés pourraient être supprimés (sans rien enlever)Aussi intéressant (mentionné dans qwertymk's réponse), vous pouvez également utiliser le
git check-ignorer -v
de commande, au moins sur Unix (ne fonctionne pas dans un CMD Windows session)Le second affiche la règle de la
.gitignore
qui en fait un fichier pour être ignoré dans votre repo git.Sur Unix, à l'aide de "Ce qui s'étend à tous les fichiers dans le répertoire de façon récursive?" et un bash4+:
(ou un
find -exec
commande)Réponse originale à cette question 42009)
devrait fonctionner, sauf son code source indique:
exc_given
?Il s'avère qu'il faut un paramètre plus après la
-i
effectivement rien de liste:Essayer:
(mais cela ne ferait que la liste de vos cache (non pris en compte) de l'objet, avec un filtre, donc ce n'est pas tout à fait ce que vous voulez)
Exemple:
En fait, dans mon "gitignore fichier (appelé "exclure"), je trouve une ligne de commande qui pourrait vous aider:
Donc....
devrait faire l'affaire.
Comme mentionné dans le ls-fichiers page de man,
--others
est la partie importante, afin de vous montrer non mis en cache, non-engagé, normalement les fichiers ignorés.--exclude_standard
n'est pas seulement un raccourci, mais un moyen de l'inclure tous standard "ignoré les modèles" paramètres".git status --ignored
semble également montrer sans traces de fichiers: github.com/git/git/blob/master/Documentation/RelNotes/...git check-ignore -v *
fonctionne très bien, car il montre l'endroit où la config appliquée. Je vous remercie.shopt -s globstar
après il faut travailler.Il y a un moyen beaucoup plus simple de le faire (git 1.7.6+):
Voir Est-il un moyen d'indiquer à git-le statut d'ignorer les effets de l' .gitignore fichiers?
error: unknown option 'ignored'
. Même en ajoutant des-s
comme suggéré dans le post n'a pas fonctionné.-s
. Vous pouvez essayer degit status -h
pour voir si--ignored
est pris en chargegit clean -ndX
solution, car la situation rare quand on oublie à tort les drapeaux auront irrévocable de l'effet sur le référentiel, puisque sans traces les fichiers sont supprimés. Donc, c'est dangereux. Au contrairegit status --ignored
est toujours en sécurité, même lorsque, à tort, tapé à la machine et il est naturel de se souvenir.cmd
plutôt que de PowerShell pour exécuter cette. si vous avez l'intention de lire la sortie de la console comme le rouge foncé texte est difficile à lire sur un fond bleu foncé.Une autre option qui est assez propre (Pas de mauvais jeu de mots.):
Explication:
Remarque: Cette solution ne sera pas afficher les fichiers ignorés qui ont déjà été supprimées.
make clean
et très utile sur un serveur de build.git ls-files -o -i --exclude-standard
.git clean -dXn
a toujours été ce que je voulais, mais ne montre pas ignoré les fichiers qui ont déjà été supprimés.git ls-files -o -i --exclude-standard
pourrait le faire. Donc, ce que pourrait être la cause de la différence.n
d'abord, moins de chance de suppression accidentelle de cette façon;git clean -ndX
n
, Git par défautfatal: clean.requireForce defaults to true and neither -n nor -f given; refusing to clean
. Encore assez fort, mais en tapant len
première est encore plus sûr! 🙂git clean -nxdf
fonctionne le mieux pour moi, je ne sais pas la différence.Alors que généralement correcte de votre solution ne fonctionne pas dans toutes les circonstances.
Supposons une pension de dir comme ceci:
et un .gitignore comme ceci:
Ignore la
doc
répertoire et tous les fichiers ci-dessoustmp
.Git fonctionne comme prévu, mais la commande pour lister les fichiers ignorés ne le fait pas.
Permet d'avoir un oeil à ce que git est-à-dire:
Avis que
doc
est absent de la liste.Vous pouvez vous le procurer:
Avis supplémentaires
--directory
option.De ma connaissance, il n'existe pas de un commande à la liste de tous les fichiers ignorés à la fois.
Mais je ne sais pas pourquoi
tmp/dir0
ne pas s'afficher du tout.(git ls-files -oi --exclude-standard; git ls-files -oi --exclude-standard --directory) | perl -nle '$seen{$_}++||next;if(-d){system"find",$_,"-type","f"}else{print}'
Git a maintenant cette fonctionnalité intégrée dans
Bien sûr, vous pouvez modifier le globe de quelque chose comme
**/*.dll
dans votre casGit De Référence
git check-ignore **/*
pour inclure des fichiers dans des sous-répertoiresIl devrait être suffisant d'utiliser
comme qui couvre tout ce qui est couvert par
par conséquent, ce dernier est redondant.
Vous pouvez rendre cela plus facile en ajoutant un alias à votre
~/.gitconfig
fichier:Maintenant, vous pouvez simplement taper
git ignored
pour voir la liste. Beaucoup plus facile à retenir, et plus rapide à taper.Si vous préférez la plus succincte de l'affichage de Jason Geng la solution, vous pouvez ajouter un alias pour que de cette façon:
Cependant, le plus prolixe de sortie est plus utile pour la résolution des problèmes avec votre .gitignore fichiers, comme des listes de tous les simples de coton-pickin' fichier est ignoré. Vous le feriez normalement pipe les résultats par le biais
grep
pour voir si un fichier que vous attendez d'être ignoré, c'est là-dedans, ou si un fichier que vous ne voulez pas être ignorer est là.Puis, quand vous voulez juste pour voir un affichage court, il est assez facile à retenir et à taper
(Le
-s
peuvent normalement être laissé.)git status --ignored
fonctionne sur Debian sid, mais peut-être pas... mais apparemment, il a reçu ajoutés en raison de la demande populaire 😉Voici comment imprimer la liste complète des fichiers dans l'arbre de travail qui correspondent à des motifs situé n'importe où dans Git multiples gitignore sources (si vous utilisez GNU
find
):Il va vérifier tous les fichiers dans la branche du référentiel (sauf si vous avez supprimé localement).
Et d'identifier le particulier gitignore les lignes de source, en tant que bien.
Git continue de suivre l'évolution de certains fichiers qui correspondent à gitignore modèles, tout simplement parce que ces fichiers ont été ajoutés déjà. Avantageusement, la commande ci-dessus affiche les fichiers, trop.
Négatif gitignore motifs sont également jumelés. Toutefois, ceux-ci sont facilement reconnaissables dans la liste, parce qu'ils commencent avec
!
.Si vous utilisez Windows, Git Bash GNU
find
(comme l'a révélé parfind --version
).Si la liste est longue (et vous avez
rev
), vous pouvez les afficher en extension (un peu), trop:Pour plus de détails, voir
man find
,man git-check-ignore
,man rev
, etman sort
.Le point de l'ensemble de cette approche est que Git (le logiciel) est en train de changer rapidement et est très complexe. En revanche, GNU
find
est extrêmement stable (au moins, dans ses fonctions utilisées ici). Ainsi, toute personne qui désire être concurrentiel par l'affichage de leurs connaissances approfondies de Git de répondre à la question d'une manière différente.Quelle est la meilleure réponse? Ce réponse délibérément réduit sa dépendance à Git de la connaissance, vers la réalisation de l'objectif de stabilité et de simplicité grâce à sa modularité (isolation d'information), et est conçu pour durer une long temps.
(en étendant les autres réponses)
Note,
git check-ignore
utilise le commis.gitignore
et non pas le seul dans votre arbre de travail! Pour jouer avec elle sans polluer votre historique de git, vous pouvez essayer gratuitement le modifier, puis de valider avec ungit commit --amend
.Ce problème se produit principalement si vous avez besoin d'une solution de contournement du problème, que git ne suivez pas les répertoires. Entrez dans le
.gitignore
:.keep
doit être un fichier de longueur nulle dansdirtokeep
.Le résultat sera que tout dans
dirtokeep
sera ignorée, saufdirtokeep/.keep
, ce qui aura pour effet de ledirtokeep
répertoire sera construit sur un clone/checkout.En supposant il y a quelques ignorer les répertoires, pourquoi ne pas utiliser "git status node/logs/" qui va vous dire quels sont les fichiers à ajouter? Dans le répertoire, j'ai un fichier texte qui ne fait pas partie de la sortie de statut, par exemple:
Sur la branche master
Votre branche est à jour avec 'origin/master'.
Sans traces de fichiers:
(utilisez "git add ..." à inclure dans ce qui va être commis)
.gitignore est:
*
!.gitignore