[ NOTA : Este não é o usual "O Git ainda rastreia arquivos que acabei de adicionar ao .gitignore!" problema. Isso é o oposto disso.]
Eu tenho uma estrutura de diretório completa de um site em um repositório Git. O CMS que eu uso vem por padrão com um arquivo .gitignore:
# Ignore paths that contain user-generated content.
sites/*/files/
sites/*/private/
Observe que todos os diretórios sites / * / files estão excluídos. Mas a maneira que eu faço meus sites, há uma subpasta particular que eu quero ser incluído no repo. Então, depois de iniciar o meu repo com o .gitignore acima, eu o alterei para isso:
# Ignore paths that contain user-generated content.
sites/*/files/
!sites/*/files/content/
!sites/*/files/content/*
sites/*/private/
Pelo meu entendimento, os padrões negados que adicionei acima devem significar que os sites / * / files / content / e seu conteúdo estão incluídos no repo, mas o resto dos sites / * / arquivos é ignorado. E quando lembro de atualizar meu arquivo .gitignore antes de fazer meu primeiro commit, ele funciona como planejado.
Mas quando me esqueço de atualizar o .gitignore até mais tarde, como costumo fazer, não consigo fazer com que o Git adicione os novos arquivos sem forçá-lo a ignorar completamente o arquivo .gitignore. Eu corro isso:
> git add sites/default/files/content/
E recupere isso:
The following paths are ignored by one of your .gitignore files:
sites/default/files
Use -f if you really want to add them.
fatal: no files added
Por que sim, Git, esse diretório é ignorado na linha 2 do .gitignore, mas as linhas 3 e 4 dizem para abrir uma exceção para a pasta específica sobre a qual eu perguntei!
Estou ciente de que posso usar -f para adicioná-lo diretamente, mas depois tenho que fazer isso de novo e de novo em qualquer commit futuro que adicione arquivos a esse diretório.
Existem paginas todos mais de the web que falam sobre como atualizar .gitignore não faz o Git ignorar arquivos já rastreados, mas não consigo encontrar nada que fale sobre como ele não faz o Git rastrear recentemente arquivos com exceção.
Muitos lugares dizem que git update-index
pode ser usado para resolver problemas como esse, mas não consigo fazer isso funcionar para mim. Tem cerca de um milhão de bandeiras possíveis, então talvez eu não tenha encontrado o caminho certo (ou combinação de vários).
TL; DR : Como posso fazer o Git observar novas exclusões no meu arquivo .gitignore?