Eu tenho o comando find que exibe arquivos no meu projeto:
find . -type f -not -path './node_modules*' -a -not -path '*.git*' \
-a -not -path './coverage*' -a -not -path './bower_components*' \
-a -not -name '*~'
Como posso filtrar os arquivos para que não mostrem os que estão no .gitignore?
Eu pensei que eu uso:
while read file; do
grep $file .gitignore > /dev/null && echo $file;
done
mas o arquivo .gitignore pode ter padrões glob (também não funcionará com caminhos se o arquivo estiver em .gitignore), como posso filtrar arquivos com base em padrões que podem ter globs?
find-sh {} +
no final?find-sh
?find /tmp -exec sh -c ': "${non_existed_var:?foo}"' find-sh {} +
por exemploexiste um comando git para fazer exatamente isso: por exemplo
Como você declarou, ele fará um grep básico com a maioria das opções normais de grep, mas não pesquisará
.git
nem nenhum dos arquivos ou pastas no seu.gitignore
arquivo.Para mais detalhes, consulte
man git-grep
Sub-módulos:
Se você tiver outros repositórios git dentro desse repositório git (eles devem estar nos submódulos), use o sinalizador
--recurse-submodules
para pesquisar também nos submódulosfonte
Para mostrar os arquivos que estão no seu checkout e que são rastreados pelo Git, use
Este comando possui várias opções para mostrar, por exemplo, arquivos em cache, arquivos não rastreados, arquivos modificados, arquivos ignorados etc. Veja
git ls-files --help
.fonte
git ls-files
mas não acho, que tenha a opção de mostrar arquivos não rastreados, qual?-o
(outro). Por exemplo,git ls-files -o -X .gitignore
.gitignore
.git ls-files
produzirão ./foo.txt enquantofind
produziriam ./Foo.txtVocê pode usar uma matriz na qual o bash glob será executado.
Tendo arquivos como este:
E ter um
ignore
arquivo como esteUsando
O resultado será o seguinte:
Você pode usar qualquer técnica para manipular esses dados.
Pessoalmente, prefiro algo assim:
fonte
gitignore
é superconjunto debash
glob, você vai perder para algo como!file*
!file*
? Como padrão glob em ignorar arquivo ou como nome de arquivo?gitignore
aceito padrão de arquivo como!file*
para excluir arquivos começar comfile
, e também estrela dupla**
.gitignore
possui vários recursos, os quais podem não ser tão fáceis de implementar diretamente no Bash: git-scm.com/docs/gitignore . Embora ignora que consistem em apenas globs simples devem ser factível em Bash simples, sem awk ou tal!
como não? Talvez o globing estendido possa lidar com essa situação. Sobre o doublestar, o bash pode lidar com issoshopt -s globstar
.