Gostaria de ter linhas no meu .gitignore
arquivo que ignorassem um diretório inteiro e seus subdiretórios, além de quaisquer arquivos (e suas estruturas de pastas) que terminam em .pdf
No momento eu uso;
outputs/*
!outputs/**/*.pdf
e isso exclui o diretório de saídas e então parece incluir uma seleção aleatória de subdiretórios e .csv's e .png's.
A estrutura de pastas não é fixa para os arquivos PDF (pode ter 1 ou 8 subdiretórios), mas eu quero manter os arquivos .pdf apenas nessa outputs/
pasta. Para ser sincero, achei que o que eu tinha era o certo!
Usarei esse layout como exemplo.
Podemos ver exatamente como o Git está interpretando o arquivo ignore com
git check-ignore -v
.O problema é que
outputs/*
ele ignora todos os subdiretórios de output/ e o Git não se preocupa em procurar dentro dos diretórios ignorados. Precisamos deixar de ignorar os subdiretórios de outputs/ com!outputs/**/
.Ops, também deixamos de ignorar os arquivos CSV nos subdiretórios! Isso ocorre porque
outputs/*
ignora apenas o primeiro nível de outputs/. Para ignorar tudo em outputs/, altereoutputs/*
paraoutputs/**
.E agora funciona.
No entanto , eu recomendaria não misturar artefatos de compilação com arquivos gerados que você deseja manter. Em vez disso, altere seu processo de compilação para gravar esses arquivos PDF em outro lugar. Assim, seu .gitignore se torna mais simples e a limpeza das saídas é mais fácil.
rm -rf outputs/*