Puis-je obtenir une liste des fichiers marqués --assume-inchangés?

325

Comment ai-je marqué --assume-unchanged? Existe-t-il un moyen de savoir ce que j'ai caché en utilisant cette option?

J'ai fouillé dans le .git/répertoire et je ne vois rien qui ressemble à ce à quoi je m'attendais, mais il doit être quelque part. J'ai oublié ce que j'ai marqué de cette façon il y a quelques semaines et maintenant je dois documenter ces détails pour les futurs développeurs.

Rob Wilkerson
la source

Réponses:

449

Vous pouvez utiliser git ls-files -v. Si le caractère imprimé est en minuscules, le fichier est marqué comme inchangé.

Pour imprimer uniquement les fichiers inchangés, utilisez:

git ls-files -v | grep '^[[:lower:]]'

Pour embrasser votre programmeur paresseux, transformez-le en un alias git . Modifiez votre .gitconfigfichier pour ajouter cet extrait:

[alias]
    ignored = !git ls-files -v | grep "^[[:lower:]]"

Maintenant, taper git ignoredvous donnera une sortie comme celle-ci:

h path/to/ignored.file
h another/ignored.file
Andrew Aylett
la source
42
git ls-files -v | grep ^ [az]
Matt R
17
Mon système d'exploitation a apparemment une configuration de classement étrange, donc la commande de Matt n'a pas fonctionné pour moi. Voici ce que j'ai ajouté dans la [alias]section de mon .gitconfig:ignored = !git ls-files -v | grep "^[[:lower:]]"
Abe Voelker
15
La raison pour laquelle [az] ne fonctionne pas est que le shell le développe en tant que caractère générique; si le répertoire courant contient un fichier qui correspond à ce modèle (c'est-à-dire une seule lettre minuscule), l'expansion de celui-ci est le nom du fichier. Essayez d'ajouter des guillemets, par exemple "[az]"
DomQ
7
git ls-files -v | grep -e "^ [az]"
Amir Ali Akbari
12
Les alias suggérés fonctionnent pour rechercher des fichiers inchangés dans le répertoire actuel et ci-dessous. Si vous voulez une liste de tous les fichiers "supposés inchangés" dans le référentiel, vous aurez besoin degit ls-files -v `git rev-parse --show-toplevel` | grep "^[a-z]"
Trebor Rude
65

Bon mot

git ls-files -v | grep "^[a-z]"

Utiliser des alias

À mon humble avis, git hiddenest préférable pour les fichiers marqués comme --assume-unchanged:

git config --global alias.hidden '!git ls-files -v | grep "^[a-z]"'

Voici une liste des alias associés que j'ai dans ~/.gitconfig:

[alias]
  hide = update-index --assume-unchanged
  unhide = update-index --no-assume-unchanged
  unhide-all = update-index --really-refresh
  hidden = !git ls-files -v | grep \"^[a-z]\"
  ignored = !git status -s --ignored | grep \"^!!\"

Pour le faire fonctionner dans les sous - répertoires et les arguments de support :

  hidden = "!f(){ git -C \"$GIT_PREFIX\" ls-files -v \"$@\" | grep \"^[a-z]\";}; f"
  ignored = "!f(){ git -C \"$GIT_PREFIX\" status -s --ignored \"$@\" | grep \"^!!\";}; f"

Par exemple:

 # cd target
 # git ignored classes

À propos de l'état du fichier

Pour moi, la plupart des fichiers cachés sont marqués d'un drapeau h, bien qu'il existe en fait plusieurs autres drapeaux selon le manuel de git-ls-files-v:

-v
    Similar to -t, but use lowercase letters for files that are 
marked as assume unchanged (see git-update-index(1)).

À propos de git ls-files-t:

This option (-t) identifies the file status with the following tags 
(followed by a space) at the start of each line:

H   cached
S   skip-worktree
M   unmerged
R   removed/deleted
C   modified/changed
K   to be killed
?   other
ryenus
la source
1
Beaux
1
Voici quelques variantes plus flexibles: hidden = "!f() { git ls-files -v \"$@\" | grep \"^[a-z]\"; }; f"et ignored = "!f() { git status -s --ignored \"$@\" | grep \"^!!\"; }; f". Cela permet, par exemple, git ignored -- PATH1 PATH2de ne répertorier que les fichiers ignorés dans certains chemins (utile lorsque vous avez beaucoup de fichiers ignorés).
sls
Merci pour l'alias
MOHRE
22

Cette commande fonctionne de manière plus cohérente pour moi. Il n'imprimera que les fichiers répertoriés comme «supposés inchangés».

git ls-files -v|grep "^h"

Je l'ai utilisé beaucoup de fois dans différents environnements et cela fonctionne parfaitement.

earl3s
la source
5
Dans l'invite Windows, utilisez grep "^h"au lieu de guillemets simples
beautifulcoder
7

Solution PowerShell, utilisant Select-String \ sls

git ls-files -v | sls -pattern ^h -casesensitive
Thowk
la source
3

Solution de ligne de commande Windows utilisant findstr :

git ls-files -v | findstr /B h
Vova
la source