Estou molhando os pés com o Git e tenho o seguinte problema:
Minha árvore de origem do projeto:
/
|
+--src/
+----refs/
+----...
|
+--vendor/
+----...
Eu tenho um código (atualmente MEF) na minha filial de fornecedores que eu compilaremos lá e depois moveremos as referências para /src/refs
onde o projeto as seleciona.
Meu problema é que tenho meu .gitignore
conjunto para ignorar *.dll
e *.pdb
. Eu posso fazer um git add -f bar.dll
para forçar a adição do arquivo ignorado, o que é bom, o problema é que não consigo descobrir a lista de quais arquivos existem que são ignorados.
Quero listar os arquivos ignorados para garantir que não esqueça de adicioná-los.
Eu li a página de manual git ls-files
e não consigo fazê-la funcionar. Parece-me que git ls-files --exclude-standard -i
deve fazer o que eu quero. o que estou perdendo?
git clean
truque), como demonstrado aqui . Além disso, recomendo o exemplo "excluir-de" no seu resumo, pois esse fato não presta atenção a nenhum arquivo .gitignore. Peço isso especialmente porque esta página é a principal resposta do Google.git config --global alias.ls ls-files --exclude-standard
, e isso faz a resposta a esta perguntagit ls -i
.Respostas:
Notas:
git status --ignored
.gitignore
git clean -ndX
funciona em gits mais velhos, exibindo uma pré-visualização do que arquivos ignorados poderia ser removido (sem remover qualquer coisa)Também interessante (mencionado no qwertymk de resposta ), você também pode usar o
git check-ignore -v
comando, pelo menos no Unix ( não funciona em um CMD do Windows sessão)O segundo exibe a regra real da
.gitignore
qual faz com que um arquivo seja ignorado no seu repositório git.No Unix, usando " O que se expande para todos os arquivos no diretório atual recursivamente? " E um bash4 +:
(ou um
find -exec
comando)Nota: https://stackoverflow.com/users/351947/Rafi B. sugere nos comentários para evitar a globstar (arriscada) :
Certifique-se de excluir os arquivos da
.git/
subpasta.Resposta original 42009)
deve funcionar, exceto que seu código fonte indica:
exc_given
?Acontece que ele precisa de mais um parâmetro após o
-i
para realmente listar qualquer coisa:Tentar:
(mas isso listaria apenas o objeto em cache (não ignorado), com um filtro, para que não seja exatamente o que você deseja)
Exemplo:
Na verdade, no meu arquivo 'gitignore' (chamado 'excluir'), encontro uma linha de comando que pode ajudá-lo:
Assim....
deve fazer o truque.
Conforme mencionado na página do manual ls-files ,
--others
é a parte importante, para mostrar arquivos não armazenados em cache, não confirmados e normalmente ignorados.--exclude_standard
não é apenas um atalho, mas uma maneira de incluir todas as configurações padrão de "padrões ignorados".fonte
git status --ignored
parece que também mostram arquivos untracked: github.com/git/git/blob/master/Documentation/RelNotes/...git check-ignore -v *
funciona muito bem, pois mostra onde a configuração foi aplicada. Obrigado.shopt -s globstar
depois que ele funcione.git check-ignore -v $(find . -type f -print)
Existe uma maneira muito mais simples de fazer isso (git 1.7.6+):
Consulte Existe uma maneira de dizer ao git-status para ignorar os efeitos dos arquivos .gitignore?
fonte
error: unknown option 'ignored'
. Mesmo adicionar-s
como sugerido na postagem vinculada não funcionou.-s
. Você pode tentargit status -h
para ver se--ignored
é suportadogit clean -ndX
solução, porque a rara situação em que esquecemos erroneamente os sinalizadores terá um efeito irrevogável no repositório, pois os arquivos não rastreados são excluídos. Então é perigoso. Pelo contrário,git status --ignored
é sempre seguro, mesmo quando digitado erroneamente e é natural lembrar.Outra opção bastante limpa (sem trocadilhos):
Explicação:
Nota: Esta solução não mostrará arquivos ignorados que já foram removidos.
fonte
make clean
e muito útil em um servidor de compilação.git ls-files -o -i --exclude-standard
.git clean -dXn
sempre foi o que eu queria, mas não mostra arquivos ignorados que já foram removidos.git ls-files -o -i --exclude-standard
pode fazer isso. Então, isso pode estar causando a diferença.n
primeira, menos chance de excluir acidentalmente dessa maneira;git clean -ndX
n
Git, o padrão éfatal: clean.requireForce defaults to true and neither -n nor -f given; refusing to clean
. Ainda é bastante seguro, mas digitar on
primeiro é ainda mais seguro! :)Embora geralmente correta, sua solução não funciona em todas as circunstâncias. Suponha um dir de repo como este:
e um .gitignore como este:
Isso ignora o
doc
diretório e todos os arquivos abaixotmp
. O Git funciona conforme o esperado, mas o comando fornecido para listar os arquivos ignorados não. Vamos dar uma olhada no que o git tem a dizer:Observe que
doc
está faltando na lista. Você pode obtê-lo com:Observe a
--directory
opção adicional .Pelo que sei, não existe um comando para listar todos os arquivos ignorados de uma só vez. Mas não sei por
tmp/dir0
que não aparece.fonte
(git ls-files -oi --exclude-standard; git ls-files -oi --exclude-standard --directory) | perl -nle '$seen{$_}++||next;if(-d){system"find",$_,"-type","f"}else{print}'
Agora o Git tem essa funcionalidade integrada
Claro que você pode mudar a glob para algo como
**/*.dll
no seu casoReferência Git
fonte
git check-ignore **/*
para incluir arquivos em subdiretóriosDeve ser suficiente usar
como isso cobre tudo coberto por
portanto, o último é redundante.
Você pode facilitar isso adicionando um alias ao seu
~/.gitconfig
arquivo:Agora você pode apenas digitar
git ignored
para ver a lista. Muito mais fácil de lembrar e mais rápido de digitar.Se você preferir uma exibição mais sucinta da solução de Jason Geng, poderá adicionar um alias para isso assim:
No entanto, a saída mais detalhada é mais útil para solucionar problemas com os arquivos .gitignore, pois lista todos os arquivos que são ignorados. Você normalmente canaliza os resultados
grep
para ver se um arquivo que você espera ser ignorado está lá ou se um arquivo que você não deseja ignorar está lá.Então, quando você só quer ver uma exibição curta, é fácil lembrar e digitar
(
-s
Normalmente, isso pode ser deixado de lado.)fonte
git status --ignored
obras sobre Debian sid mas pode ser muito novo ... mas aparentemente ele foi adicionado devido à demanda popular ;-)Veja como imprimir a lista completa de arquivos na árvore de trabalho que correspondem aos padrões localizados em qualquer lugar nas várias fontes de gitignore do Git (se você estiver usando o GNU
find
):Ele verificará todos os arquivos na ramificação atual do repositório (a menos que você os tenha excluído localmente).
E também identifica as linhas de origem específicas do gitignore.
O Git continua a rastrear alterações em alguns arquivos que correspondem aos padrões do gitignore, simplesmente porque esses arquivos já foram adicionados. Útil, o comando acima exibe esses arquivos também.
Padrões de gitignore negativos também são correspondidos. No entanto, eles são facilmente distinguíveis na lista, porque começam com
!
.Se você estiver usando o Windows, o Git Bash inclui o GNU
find
(conforme revelado porfind --version
).Se a lista for longa (e você tiver
rev
), você poderá exibi-las por extensão (um pouco) também:Para mais detalhes, veja
man find
,man git-check-ignore
,man rev
, eman sort
.O objetivo de toda essa abordagem é que o Git (o software) está mudando rapidamente e é altamente complexo. Por outro lado, os GNU's
find
são extremamente estáveis (pelo menos, em seus recursos usados aqui). Portanto, qualquer pessoa que deseje ser competitivo, demonstrando seu profundo conhecimento do Git, responderá à pergunta de uma maneira diferente.Qual a melhor resposta? Essa resposta minimiza deliberadamente sua dependência do conhecimento do Git, visando atingir a meta de estabilidade e simplicidade por meio da modularidade (isolamento de informações) e foi projetada para durar muito tempo.
fonte
(estendendo as outras respostas)
Observe que
git check-ignore
usa o comprometido.gitignore
e não o da sua árvore de trabalho! Para jogar sem poluir seu histórico do git, você pode livremente tentar editá-lo e depois confirmar com umgit commit --amend
.Esse problema ocorre principalmente se você precisar de uma solução alternativa para o problema, pois o git não segue os diretórios. Entre no
.gitignore
:.keep
deve ser um arquivo de tamanho zero emdirtokeep
.O resultado será que tudo nos
dirtokeep
será ignorado, excetodirtokeep/.keep
, o que resultará também que odirtokeep
diretório será construído na clone / checkout.fonte
Supondo que existam alguns diretórios ignorados, por que não usar "git status node / logs /", que informará quais arquivos devem ser adicionados? No diretório, tenho um arquivo de texto que não faz parte da saída de status, por exemplo:
No mestre da filial
Sua filial está atualizada com 'origem / mestre'.
Arquivos não rastreados:
(use "git add ..." para incluir no que será confirmado)
.gitignore é:
*
! .gitignore
fonte