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.

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

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

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.


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

3

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

git ls-files -v | findstr /B h
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.