Tenho visto perguntas semelhantes ( 1 , 2 e 3 ), mas não consigo obter uma solução adequada delas.
Preciso ignorar todos os arquivos em uma pasta específica, exceto para um tipo de arquivo específico. A pasta é um subdiretório do caminho raiz. Deixe-me nomear a pasta Resources
. Já que não quero complicar as coisas, deixe-me ignorar os arquivos em todas as pastas nomeadas Resources
onde quer que estejam.
Esta é a solução mais comum (em todas as perguntas duplicadas)
# Ignore everything
*
# Don't ignore directories, so we can recurse into them
!*/
# Don't ignore .gitignore
!.gitignore
# Now exclude our type
!*.foo
O problema com essa solução é que ela para de rastrear arquivos recém-adicionados (uma vez que *
ignora todos os arquivos). Não quero ficar excluindo cada tipo de arquivo. Eu quero um comportamento normal onde se qualquer novo arquivo for adicionado, git status
mostre-o.
Finalmente encontrei uma solução aqui . A solução é adicionar outro .gitignore
arquivo na Resources
pasta. Isso funciona corretamente.
Posso conseguir o mesmo com um arquivo para ignorar? Acho que ter muitos arquivos para ignorar em diferentes diretórios é um pouco desajeitado.
Isso é o que estou tentando alcançar:
# Ignore everything under Resources folder, not elsewhere
Resources
# Don't ignore directories, so we can recurse into them
!*Resources/
# Now exclude our type
!*.foo
Mas isso dá a saída oposta. Ele ignora *.foo
tipos e rastreia outros arquivos.
DirectoryName1/** DirectoryName1/**/*
para cada um deles. Primeiro removem diretórios, mas você precisa do segundo para remover todos os tipos de arquivo.A melhor resposta é adicionar um arquivo Resources / .gitignore em Resources contendo:
Se você não quiser ou não puder adicionar esse arquivo .gitignore, há uma solução deselegante:
Você precisará editar esse padrão se adicionar diretórios mais profundos do que o especificado.
fonte
Isso pode parecer estúpido, mas verifique se você ainda não adicionou a pasta / arquivos que está tentando ignorar ao índice antes. Se você fez isso, não importa o que você colocou em seu arquivo .gitignore, as pastas / arquivos ainda serão testados.
fonte
git rm --cached <path to files>
para limpar esses arquivos ignorados do git enquanto ainda os deixa no sistema de arquivos.Ou estou fazendo errado ou a resposta aceita não funciona mais com o git atual.
Na verdade, encontrei a solução adequada e a publiquei quase na mesma questão aqui . Para mais detalhes acesse aqui.
Solução:
fonte
!/Resources/**/
foi crucial para que o git não ignore os subdiretórios.