Posso obter uma lista de arquivos marcados com --assume inalterado?

325

O que eu marquei como --assume-unchanged? Existe alguma maneira de descobrir o que eu escondi usando essa opção?

Examinei o .git/diretório e não vejo nada parecido com o que eu esperaria, mas deve estar em algum lugar. Esqueci o que marquei dessa maneira há algumas semanas e agora preciso documentar esses detalhes para futuros desenvolvedores.

Rob Wilkerson
fonte

Respostas:

449

Você pode usar git ls-files -v. Se o caractere impresso estiver em minúsculas, o arquivo será marcado como assumido como inalterado.

Para imprimir apenas os arquivos inalterados, use:

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

Para adotar seu programador preguiçoso, transforme isso em um alias do git . Edite seu .gitconfigarquivo para adicionar este trecho:

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

Agora, digitar git ignoredlhe dará uma saída como esta:

h path/to/ignored.file
h another/ignored.file
Andrew Aylett
fonte
42
arquivos git ls -v | grep ^ [az]
Matt R
17
Meu sistema operacional aparentemente possui uma configuração de agrupamento estranha, portanto o comando de Matt não funcionou para mim. Aqui está o que eu adicionei na [alias]seção da minha .gitconfig:ignored = !git ls-files -v | grep "^[[:lower:]]"
Abe Voelker
15
O motivo [az] não funciona é que o shell o expande como curinga; se o diretório atual contiver um arquivo que corresponda a esse padrão (ou seja, uma única letra minúscula), a expansão será o nome do arquivo. Tente adicionar aspas, por exemplo, "[az]"
DomQ
7
arquivos git ls -v | grep -e "^ [az]"
Amir Ali Akbari
12
Os aliases sugeridos funcionam para encontrar arquivos inalterados no diretório atual e abaixo. Se você quer uma lista de todos os arquivos "assumir-inalteradas" no repositório, você vai precisargit ls-files -v `git rev-parse --show-toplevel` | grep "^[a-z]"
Trebor rude
65

One Liner

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

Usar aliases

IMHO, git hiddené melhor para arquivos marcados como --assume-unchanged:

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

Aqui está uma lista de aliases relacionados que tenho em ~/.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 \"^!!\"

Para fazê-lo funcionar em subdiretórios e argumentos de suporte :

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

Por exemplo:

 # cd target
 # git ignored classes

Sobre o status do arquivo

Para mim, a maioria dos arquivos ocultos é marcada com sinalizador h, embora na verdade existam vários outros sinalizadores, de acordo com o manual 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)).

Sobre 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
fonte
1
Aliases fáceis de lembrar :) Obrigado
PlagueHammer
1
Aqui estão algumas variantes mais flexíveis: hidden = "!f() { git ls-files -v \"$@\" | grep \"^[a-z]\"; }; f"e ignored = "!f() { git status -s --ignored \"$@\" | grep \"^!!\"; }; f". Isso permite, por exemplo, git ignored -- PATH1 PATH2listar apenas arquivos ignorados em certos caminhos (útil quando você tem muitos arquivos ignorados).
SLS
Obrigado pelo apelido
MOHRE
22

Este comando funciona de forma mais consistente para mim. Ele imprimirá apenas os arquivos listados como 'assumir inalterados'.

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

Eu usei isso muitas vezes em ambientes diferentes e funciona perfeitamente.

earl3s
fonte
5
No prompt do Windows, use em grep "^h"vez de aspas simples
beautifulcoder
7

Solução PowerShell, usando Select-String \ sls

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

Solução de linha de comando do Windows usando findstr :

git ls-files -v | findstr /B h
Vova
fonte