Como rastrear diretórios, mas não seus arquivos com o Git?

Eu comecei recentemente usando o Git e estou tendo problemas com apenas uma coisa. Como posso rastrear diretórios sem rastrear seu conteúdo?

Por exemplo, o site em que estou trabalhando permite envios. Eu quero controlar o diretório de uploads para que ele seja criado quando se ramifica, etc. mas obviamente não os arquivos dentro dele (arquivos de teste enquanto no branch de desenvolvimento ou os arquivos reais no master).

No meu .gitignore eu tenho o seguinte:

  uploads /*.* 

Também tentei (que ignora todo o diretório):

  uploads / 

Esse diretório também pode conter subdiretórios (uploads / thumbs / uploads / videos /). Gostaria de poder rastreá-los, mas não de seus arquivos.

Isso é possível com o Git? Eu procurei em todos os lugares sem encontrar uma resposta.

O Git não rastreia diretórios, rastreia arquivos, então para conseguir isso você precisa rastrear pelo menos um arquivo. Então, supondo que o seu arquivo .gitignore é algo como isto:

 upload/* 

Você consegue fazer isso:

 $ touch upload/.placeholder $ git add -f upload/.placeholder 

Se você esquecer o -f verá:

 $ git add upload / .placeholder
 Os seguintes caminhos são ignorados por um dos seus arquivos .gitignore:
 Envio
 Use -f se você realmente quiser adicioná-los.
 fatal: nenhum arquivo adicionado

Então, quando você fizer o git status você verá:

 # No mestre de filial
 #
 # Initial commit
 #
 # Alterações a serem cometidas:
 # (use "git rm --cached ..." para unstage)
 #
 # novo arquivo: upload / .placeholder
 #

Obviamente você pode então fazer:

 $ touch upload/images/.placeholder $ git add -f upload/images/.placeholder 

Eu escrevi sobre isso aqui .

Adicione um .gitignore no diretório.

A melhor resposta que encontrei é include um arquivo .gitignore na sua pasta de upload com este conteúdo

 # Ignore everything in this directory * # Except this file !.gitignore 

Aqui você tem Como adicionar um diretório vazio a um repository Git?

A melhor solução até agora:

1) Crie um arquivo .gitignore

2) Escreva dentro:

 * */ !.gitignore 

3) Adicione o arquivo .gitignore à pasta desejada.

Fonte: https://stackoverflow.com/a/5581995/2958543