.gitignore exclui arquivos no diretório, mas não em alguns diretórios


98
application/cache/*
application/cache/folder/*
application/cache/folder/onemorefolder/*

Isso não parece estar funcionando. Quando eu clono o projeto, não há nenhuma "application/cache"pasta ou "application/cache/folder"pasta, etc ...

Gostaria que os arquivos nas pastas de cache não fossem armazenados em cache, mas sim as pastas, para que as permissões das pastas sejam transferidas e existam.

Respostas:


220

Git não rastreia pastas, apenas arquivos, então se você ignorar tudo em uma pasta, Git não terá nada para rastrear. Você pode adicionar um .gitignorearquivo para cada diretório ( application/cache, application/cache/folder, application/cache/folder/onemorefolder/) com o seguinte conteúdo:

*
!.gitignore

Em seguida, você pode adicionar esses diretórios e apenas o .gitignorearquivo em cada diretório será adicionado - mas isso significa que os diretórios agora serão rastreados (ou seja, criados durante a clonagem).


7
Os arquivos .gitignore usados ​​para essa finalidade podem estar vazios.
— kevpie

2
Eles podem estar vazios, se as pastas forem ignoradas por um .gitignorearquivo superior . Neste caso, é exatamente minha resposta.
— KingCrunch de

4
mais sensato e simples é usar um arquivo chamado .gitkeep, então você não precisa colocar nada no arquivo .gitignore.
— Ouriço de

3
@kevpie Existem outros arquivos na pasta e ele não deseja que sejam rastreados. Se o arquivo .gitignore estiver vazio, esses arquivos aparentemente serão rastreados.
— maliayas de

com o mesmo propósito, eu uso em .gitkeepvez de .gitignore. faz mais sentido para mim
— Éderson T. Szlachta

22

Git não rastreia diretórios vazios. Basta adicionar alguns arquivos de espaço reservado vazios nas pastas que você deseja enviar.

touch application/cache/.keep
git add -f application/cache/.keep

Faça isso também com cada pasta "vazia". Posteriormente, você pode ignorar esses arquivos, eles realmente existem apenas para garantir que o git crie esses diretórios no clone. As entradas em .gitignoreevitam que outros arquivos dentro das pastas sejam rastreados (a menos que você force com git add -f;)).


16

Talvez haja outra maneira mais limpa de fazer isso. Em vez de ter arquivos sub .gitignore nas pastas que deseja manter. Você pode colocá-lo na raiz .gitignore da seguinte maneira:

application/cache/*
application/cache/folder/*
application/cache/folder/onemorefolder/*
!*.gitkeep

Agora apenas crie e confirme arquivos .gitkeep vazios nos diretórios conforme listado acima. A pasta será monitorada com os arquivos .gitkeep, mas nenhum conteúdo será monitorado.


2
ou apenas !*.gitkeep:)
— Éderson T. Szlachta

A questão era como ignorar o conteúdo das pastas, mas manter as próprias pastas. Portanto, acredito que minha resposta se mantém e apenas ter! *. Gitkeep não vai ignorar o conteúdo das pastas.
— Joel Duckworth

3

você pode colocar um arquivo .gitignore em cada um deles (como mipadi disse) ou fazer algo parecido com seu arquivo .gitingnore raiz

/assets/*/
/assets/*.*

Isso funciona bem para mim


Isso funciona, mas apenas se o repo estiver usando extensões de arquivo. Algo como root/LICENSE-FILEnão será excluído.
— Brett Zamir

2

O Visual Studio não gostou da resposta aceita. Tive que adicionar uma nova linha antes de * para fazer funcionar.

# Ignore all files in this folder.
*
!.gitignore
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.