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.