Posso ottenere un elenco di file contrassegnati --assume-invariato?


325

Cosa ho contrassegnato come --assume-unchanged? C'è un modo per scoprire cosa ho nascosto con quell'opzione?

Ho scavato nella .git/directory e non vedo nulla di simile a quello che mi aspetterei, ma deve essere da qualche parte. Ho dimenticato cosa ho segnato in questo modo qualche settimana fa e ora ho bisogno di documentare quei dettagli per i futuri sviluppatori.

Risposte:


449

È possibile utilizzare git ls-files -v. Se il carattere stampato è in minuscolo, il file è contrassegnato come invariato.

Per stampare solo i file invariati utilizzare:

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

Per abbracciare il tuo programmatore pigro, trasformalo in un alias git . Modifica il tuo .gitconfigfile per aggiungere questo frammento:

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

Ora digitando git ignoredti darà un output in questo modo:

h path/to/ignored.file
h another/ignored.file

42
git ls-files -v | grep ^ [az]
Matt R

17
Apparentemente il mio sistema operativo ha una strana configurazione delle regole di confronto, quindi il comando di Matt non ha funzionato per me. Ecco cosa ho aggiunto nella [alias]sezione del mio .gitconfig:ignored = !git ls-files -v | grep "^[[:lower:]]"
Abe Voelker,

15
Il motivo per cui [az] non funziona è che la shell lo espande come carattere jolly; se la directory corrente contiene un file che corrisponde a quel modello (cioè una singola lettera minuscola), l'espansione di questo è il nome del file. Prova ad aggiungere virgolette, ad esempio "[az]"
DomQ

7
git ls-files -v | grep -e "^ [az]"
Amir Ali Akbari

12
Gli alias suggeriti funzionano per trovare file invariati nella directory corrente e in basso. Se si desidera un elenco di tutti i file "presupponi invariati" nel repository, è necessariogit ls-files -v `git rev-parse --show-toplevel` | grep "^[a-z]"
Trebor Rude,

65

Una fodera

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

Usa alias

IMHO, git hiddenè meglio per i file contrassegnati come --assume-unchanged:

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

Ecco un elenco di alias correlati che ho in ~/.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 \"^!!\"

Per farlo funzionare in sottodirectory e argomenti di supporto :

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

Per esempio:

 # cd target
 # git ignored classes

Informazioni sullo stato del file

Per me la maggior parte dei file nascosti sono contrassegnati con flag h, anche se in realtà ci sono molte altre flag secondo il manuale di 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)).

Circa 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

1
Simpatici alias facili da ricordare :) Grazie
PlagueHammer,

1
Ecco alcune varianti più flessibili: hidden = "!f() { git ls-files -v \"$@\" | grep \"^[a-z]\"; }; f"e ignored = "!f() { git status -s --ignored \"$@\" | grep \"^!!\"; }; f". Ciò consente, ad esempio, git ignored -- PATH1 PATH2di elencare solo i file ignorati in determinati percorsi (utile quando si hanno molti file ignorati).
Sls

Grazie per lo pseudonimo
MOHRE,

22

Questo comando funziona in modo più coerente per me. Stamperà solo i file elencati come 'assume invariato'.

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

L'ho usato molte volte in diversi ambienti e funziona perfettamente.


5
Nel prompt di Windows, utilizzare al grep "^h"posto delle virgolette singole
beautifulcoder

7

Soluzione PowerShell, usando Select-String \ sls

git ls-files -v | sls -pattern ^h -casesensitive

3

Soluzione da riga di comando di Windows utilizzando findstr :

git ls-files -v | findstr /B h
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.