Je mouille les pieds avec Git et j'ai le problème suivant:
Mon arbre source de projet:
/
|
+--src/
+----refs/
+----...
|
+--vendor/
+----...
J'ai du code (actuellement MEF) dans ma branche fournisseur que je vais compiler là-bas et ensuite déplacer les références dans /src/refs
lesquelles le projet les récupère.
Mon problème est que j'ai mon .gitignore
jeu à ignorer *.dll
et *.pdb
. Je peux faire un git add -f bar.dll
pour forcer l'ajout du fichier ignoré, ce qui est correct, le problème est que je n'arrive pas à répertorier les fichiers qui sont ignorés.
Je veux lister les fichiers ignorés pour m'assurer de ne pas oublier de les ajouter.
J'ai lu la page de manuel git ls-files
et je ne peux pas la faire fonctionner. Il me semble que ça git ls-files --exclude-standard -i
devrait faire ce que je veux. Qu'est-ce que je rate?
git clean
astuce) comme démontré ici . Aussi, je déconseille l'exemple "exclure de" dans votre résumé car cela ne fait en fait pas attention aux fichiers .gitignore. Je pose cette question surtout parce que cette page est la meilleure réponse de Google.git config --global alias.ls ls-files --exclude-standard
, et cela fait la réponse à cette questiongit ls -i
.Réponses:
Remarques:
git status --ignored
.gitignore
git clean -ndX
fonctionne sur Gits anciens, l' affichage d' un aperçu de ce que les fichiers ignorés pourraient être supprimés (sans enlever quoi que ce soit)Également intéressant (mentionné dans la réponse de qwertymk ), vous pouvez également utiliser la commande, au moins sur Unix ( ne fonctionne pas dans une session Windows CMD )
git check-ignore -v
Le second affiche la règle réelle du
.gitignore
qui fait qu'un fichier doit être ignoré dans votre dépôt git.Sous Unix, en utilisant " Qu'est-ce qui s'étend à tous les fichiers du répertoire courant de manière récursive? " Et un bash4 +:
(ou une
find -exec
commande)Remarque: https://stackoverflow.com/users/351947/Rafi B. suggère dans les commentaires d' éviter la globstar (risquée) :
Assurez-vous cependant d'exclure les fichiers du
.git/
sous - dossier.Réponse originale 42009)
devrait fonctionner, sauf que son code source indique:
exc_given
?Il s'avère qu'il a besoin d'un paramètre supplémentaire après le
-i
pour répertorier quoi que ce soit:Essayer:
(mais cela ne listerait que votre objet mis en cache (non ignoré), avec un filtre, donc ce n'est pas tout à fait ce que vous voulez)
Exemple:
En fait, dans mon fichier 'gitignore' (appelé 'exclude'), je trouve une ligne de commande qui pourrait vous aider:
Donc....
devrait faire l'affaire.
Comme mentionné dans la page de manuel ls-files ,
--others
est la partie importante, afin de vous montrer les fichiers non mis en cache, non validés, normalement ignorés.--exclude_standard
n'est pas seulement un raccourci, mais un moyen d'inclure tous les paramètres standard de "motifs ignorés".la source
git status --ignored
il semble également afficher les fichiers non suivisgit check-ignore -v *
fonctionne très bien, car il montre où la config s'est appliquée. Je vous remercie.shopt -s globstar
après cela.git check-ignore -v $(find . -type f -print)
Il existe une manière beaucoup plus simple de le faire (git 1.7.6+):
Voir Existe - t-il un moyen de dire à git-status d'ignorer les effets des fichiers .gitignore?
la source
error: unknown option 'ignored'
. Même l'ajout-s
comme suggéré dans le post lié n'a pas fonctionné.-s
. Vous pouvez essayergit status -h
de voir si--ignored
est pris en chargegit clean -ndX
solution, car la rare situation où l'on oublie par erreur les drapeaux aura un effet irrévocable sur le référentiel, car les fichiers non suivis sont supprimés. C'est donc dangereux. Au contraire, ilgit status --ignored
est toujours sûr, même lorsqu'il est mal tapé et il est naturel de s'en souvenir.Une autre option qui est assez propre (sans jeu de mots.):
Explication:
Remarque: Cette solution n'affichera pas les fichiers ignorés qui ont déjà été supprimés.
la source
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 n'affiche pas les fichiers ignorés qui ont déjà été supprimés.git ls-files -o -i --exclude-standard
pourrait faire ça. Donc, c'est peut-être ce qui cause la différence.n
première, moins de chance de supprimer accidentellement de cette façon;git clean -ndX
n
, Git soit par défautfatal: clean.requireForce defaults to true and neither -n nor -f given; refusing to clean
. Toujours assez sûr, mais taper len
premier est encore plus sûr! :)Bien que généralement correcte, votre solution ne fonctionne pas en toutes circonstances. Supposons un répertoire de repo comme celui-ci:
et un .gitignore comme celui-ci:
Cela ignore le
doc
répertoire et tous les fichiers ci-dessoustmp
. Git fonctionne comme prévu, mais la commande donnée pour lister les fichiers ignorés ne fonctionne pas. Voyons ce que git a à dire:Notez qu'il
doc
manque dans la liste. Vous pouvez l'obtenir avec:Remarquez l'
--directory
option supplémentaire .D'après mes connaissances, il n'y a pas de commande unique pour répertorier tous les fichiers ignorés à la fois. Mais je ne sais pas pourquoi
tmp/dir0
n'apparaît pas du tout.la source
(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
Bien sûr, vous pouvez changer le glob en quelque chose comme
**/*.dll
dans votre casRéférence Git
la source
git check-ignore **/*
inclure des fichiers dans des sousIl devrait être suffisant d'utiliser
car cela couvre tout ce qui est couvert par
ce dernier est donc 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 à mémoriser et plus rapide à taper.Si vous préférez l'affichage plus succinct de la solution de Jason Geng, vous pouvez ajouter un alias pour cela comme ceci:
Cependant, la sortie plus détaillée est plus utile pour résoudre les problèmes avec vos fichiers .gitignore, car elle répertorie tous les fichiers de sélection de coton qui sont ignorés. Vous devriez normalement diriger les résultats
grep
pour voir si un fichier que vous prévoyez d'ignorer se trouve dedans, ou si un fichier que vous ne voulez pas ignorer est là.Ensuite, lorsque vous voulez juste voir un court affichage, il est assez facile de se souvenir et de taper
(Le
-s
peut normalement être laissé de côté.)la source
git status --ignored
fonctionne sur Debian Sid mais peut être très nouveau… mais apparemment, il a été ajouté en raison de la demande populaire ;-)Voici comment imprimer la liste complète des fichiers dans l'arborescence de travail qui correspondent aux modèles situés n'importe où dans les multiples sources gitignore de Git (si vous utilisez GNU
find
):Il vérifiera tous les fichiers de la branche actuelle du référentiel (sauf si vous les avez supprimés localement).
Et il identifie également les lignes source gitignore particulières.
Git continue de suivre les changements dans certains fichiers qui correspondent aux modèles de gitignore, simplement parce que ces fichiers ont déjà été ajoutés. Utilement, la commande ci-dessus affiche également ces fichiers.
Les motifs négatifs de gitignore sont également appariés. Cependant, ceux-ci se distinguent facilement dans la liste, car ils commencent par
!
.Si vous utilisez Windows, Git Bash inclut GNU
find
(comme révélé parfind --version
).Si la liste est longue (et vous avez
rev
), vous pouvez également les afficher par extension (un peu):Pour plus de détails, voir
man find
,man git-check-ignore
,man rev
etman sort
.L'intérêt de toute cette approche est que Git (le logiciel) évolue rapidement et est très complexe. En revanche, les GNU
find
est extrêmement stable (au moins, dans ses fonctionnalités utilisées ici). Ainsi, quiconque souhaite être compétitif en affichant sa connaissance approfondie de Git répondra à la question d'une manière différente.Quelle est la meilleure réponse? Cette réponse minimise délibérément sa dépendance à l'égard des connaissances Git, pour atteindre l'objectif de stabilité et de simplicité grâce à la modularité (isolation des informations), et est conçue pour durer longtemps .
la source
(prolongeant les autres réponses)
Remarque,
git check-ignore
utilise le commit.gitignore
et non celui de votre arbre de travail! Pour jouer avec sans polluer votre historique git, vous pouvez librement essayer de le modifier, puis vous engager 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 suit pas les répertoires. Entrez dans
.gitignore
:.keep
devrait être un fichier de longueur nulledirtokeep
.Le résultat sera que tout en
dirtokeep
sera ignorée, excepterdirtokeep/.keep
, ce qui se traduira aussi que ledirtokeep
répertoire sera construit sur le clone / caisse.la source
En supposant qu'il existe quelques répertoires ignorés, pourquoi ne pas utiliser "git status node / logs /" qui vous dira quels fichiers doivent être ajoutés? Dans le répertoire, j'ai un fichier texte qui ne fait pas partie de la sortie d'état, par exemple:
Sur le maître de succursale
Votre succursale est à jour avec «origine / maître».
Fichiers non suivis:
(utilisez "git add ..." pour inclure dans ce qui sera validé)
.gitignore c'est:
*
! .gitignore
la source