Posso pensar em pelo menos duas situações em que você gostaria de ter vários .gitignore
arquivos em diferentes (sub) diretórios.
Diretórios diferentes têm tipos diferentes de arquivos a serem ignorados. Por exemplo, o .gitignore
diretório no topo do seu projeto ignora os programas gerados, enquanto Documentation/.gitignore
ignora a documentação gerada.
Ignorar arquivos dadas apenas em determinada (sub) anuário (você pode usar /sub/foo
em .gitignore
, embora).
Lembre-se de que os padrões no .gitignore
arquivo se aplicam recursivamente ao (sub) diretório em que o arquivo está e a todos os seus subdiretórios, a menos que o padrão contenha '/' (por exemplo, o padrão name
se aplica a qualquer arquivo nomeado name
no diretório especificado e a todos os seus subdiretórios, ao /name
passo que o arquivo com esse nome apenas no diretório especificado).
Documentation/**/*.html
(note que quaisquer âncoras reduzir o padrão; o/foo
é usado para arquivo âncora diretamente no diretório)Como uma observação tangencial, um caso em que a capacidade de ter vários
.gitignore
arquivos é muito útil é se você deseja um diretório extra em sua cópia de trabalho que nunca pretende confirmar. Basta colocar um byte.gitignore
(contendo apenas um asterisco) nesse diretório e ele nunca será exibidogit status
etc.fonte
printf \* > .gitignore
(a limpeza é automática quando você exclui o diretório). Estou certo de que há situações em que.git/info/exclude
é a escolha mais apropriada, mas não muitas.Você pode ter vários
.gitignore
, cada um, é claro, em seu próprio diretório.Para verificar qual a regra gitignore é responsável por ignorar um arquivo, uso
git check-ignore
:git check-ignore -v -- afile
.E você pode ter uma versão diferente de um
.gitignore
arquivo por ramificação: eu já vi esse tipo de configuração para garantir que uma ramificação ignore um arquivo enquanto a outra ramificação não: veja essa pergunta, por exemplo .Se o seu repositório incluir vários projetos independentes, seria melhor referenciá-los como submódulos .
Essas seriam as melhores práticas reais, permitindo que cada um desses projetos seja clonado independentemente (com seus respectivos
.gitignore
arquivos), enquanto são referenciados por uma revisão específica em um projeto pai global.Veja a verdadeira natureza dos submódulos para obter mais.
Observe que, desde o git 1.8.2 (março de 2013), você pode fazer um
git check-ignore -v -- yourfile
para ver a qual execução do gitignore (a partir de qual.gitignore
arquivo) é aplicada 'yourfile
' e entender melhor por que esse arquivo é ignorado.Consulte " qual
gitignore
regra está ignorando meu arquivo? "fonte
Pro single
Fácil de encontrar.
Caçar regras de exclusão pode ser bastante difícil se eu tiver vários gitignore, em vários níveis no repositório.
Com vários arquivos, você também geralmente acaba com uma boa quantidade de duplicação.
Pro múltiplo
Escopos "conhecimento" para a parte da árvore de arquivos onde é necessário.
Como o Git rastreia apenas arquivos, um .gitignore vazio é a única maneira de confirmar um diretório "vazio".
(E antes do Git 1.8, a única maneira de excluir um padrão como
my/**.example
era criarmy/.gitignore
o padrão**.foo
. Esse motivo não se aplica agora, como você pode fazer/my/**/*.example
.)Eu prefiro um único arquivo, onde posso encontrar todas as exclusões. Nunca perdi o diretório .svn por diretório e também não perdi o diretório .gitignore.
Dito isto, vários gitignores são bastante comuns. Se você os usar, pelo menos seja consistente no uso deles para torná-los razoáveis para trabalhar. Por exemplo, você pode colocá-los nos diretórios apenas um nível da raiz.
fonte
empty
para esse assunto) é mais comum.Há muitas situações em que você deseja cometer um diretório a sua repo Git, mas sem os arquivos nele, por exemplo, a
logs
,cache
,uploads
diretórios etc.Então, o que eu sempre faço é adicionar um
.gitignore
arquivo nesses diretórios com o seguinte conteúdo:Com esse
.gitignore
arquivo, o Git não rastreia nenhum arquivo desses diretórios, mas ainda permite que eu adicione o.gitignore
arquivo e, portanto, o próprio diretório ao repositório.fonte