.gitignore – Saiba como ignorar arquivos no Git facilmente

Logotipo do GitUma coisa que todo iniciante de Git costuma fazer é comittar tudo o que há no projeto no repositório. Isso inclui dependências, arquivos compilados, arquivos temporários, e assim vai. Entretanto, com o tempo, esse tipo de arquivos tendem a ser modificados, e tendem a bagunçar muito mais do que deveriam o repositório. Como se isso não fosse o suficiente, à cada clone feito, é necessário lidar com uma quantidade muito maior de dados, pois não há como clonar um repositório no git sem clonar todos os arquivos (você pode até customizar o que vai ser baixado ou não, mas, dada uma branch, você precisa baixar todos os arquivos da branch para conseguir usá-la), o que tende a causar problemas ainda mais significativos ao decorrer do tempo. Por causa disso, hoje vou falar um pouco sobre o .gitignore e como criá-lo, um arquivo simples que lista o que o Git deve ignorar quando você estiver trabalhado no repositório, de forma que seja possível evitar a adição de arquivos indesejados no repositório sem dificuldades, tornando os arquivos indesejados totalmente invisíveis ao Git.

A criação do arquivo .gitignore é bem simples. Basta criar um arquivo chamado… .gitignore. Sim, o ponto no inicio do nome pois o arquivo .gitignore é naturalmente oculto (ao menos para sistemas Linux), e é ele que o Git procura em cada pasta do repositório git, aplicando as regras presentes neste arquivo para todos os arquivos, pastas e sub-pastas localizados na pasta no qual o .gitignore está (que normalmente é a raiz do próprio repositório).

Mas..que regras são essas? Simples! São globs – que, como a Wikipédia o define, são simples padrões especificando conjuntos de nomes de arquivos a partir de wildcards (ou seja, asteriscos) – separados por linha (um glob por linha, no caso). Assim, o arquivo abaixo é um arquivo .gitignore válido, por exemplo:

Como você pode ver acima, com esse arquivo definimos 4 regras: Uma que ignora todos os arquivos da pasta vendor/, outro que ignora todos os arquivos .class, outro que ignora todos os arquivos *.so e, por fim, uma regra que ignora os arquivos da pasta bower_components/, usada por padrão pelo Bower (clique para ver um tutorial básico de uso do Bower).

Mas, que tipos de arquivos são ideais para não serem colocados no repositório?

  • Arquivos compilados, como .so e .class;
  • Dependências gerenciadas por gerenciadores de dependências, como o Bower, mencionado acima (NOTA: Seus arquivos de configuração, como o bower.json, DEVEM ser persistidos no repositório);
  • Arquivos temporários de build;
  • Arquivos privados locais (como por exemplo, arquivos que guardam dados secretos no container de injeção de dependências);
  • Arquivos pessoais salvos pela IDE;

E esses são apenas alguns exemplos para que você tenha ideia do que deve ser ignorado! Em alguns casos, outros arquivos também devem ser alterados, como os criados como cache automaticamente por alguns frameworks, por exemplo, e é um pouco difícil (mas não raro) que um mesmo .gitignore seja compartilhado por mais de um projeto.

Mas, como saber que arquivos ignorar? Bom, para isso, depende de vários fatores:

  • Linguagem de programação escolhida;
  • Framework usado;
  • Gerenciadores de dependências usados;
  • IDE/editor de texto usado;

Entre outros inúmeros fatores. Mas..como, afinal, criar um .gitignore que funcione bem e resolva seus problemas?

Bom, para isso, jovem gafanhoto, você só precisa de três passos bem simples:

1) Acessar o endereço http://gitignore.io;

2) Colocar no único campo de texto disponível nesse site o nome de todos os projetos que você usa para o desenvolvimento do projeto. Usa Bower? Bota lá! Usa Sublime Text? Só escreve! Usa PHP? Tranquilo, escreve lá! E assim vai..

3) Clicar no botão “Generate” e salvar o arquivo na pasta do repositório do seu projeto com o nome .gitignore;

Pronto! Agora,  com o arquivo adicionado na pasta do repositório do seu projeto, está tudo certo, né? Bem, não exatamente. Dependendo da situação do seu repositório, alguns procedimentos podem ser necessários. Veja:

  • Se o seu repositório não possuir arquivos cobertos pelo .gitignore já comittados, basta adicionar o .gitignore usando git add .gitignore e git commit -m “Adds .gitignore file” (a mensagem você que escolhe, só estou fornecendo uma sugestão :P);
  • Se o seu repositório já possuir arquivos cobertos pelo .gitignore já comittados, será necessário executar o comando git rm -r –cached substituindo <arquivos cobertos> pelos arquivos que devem ser removidos do repositório e, depois de fazer essa operação, só então executar git add .gitignore e git commit -m “Adds .gitignore file“;

Importante notar que, no segundo caso, se você rodar um tradicional git add . (ou similar) depois do git rm -r –cached e os arquivos que foram cobertos pelo .gitignore serão re-adicionados, ou seja, após o git rm -r –cached , execute apenas o git add .gitignore e então commite!

Com isso, você já conseguir trabalhar mais tranquilo com o Git, sabendo que os arquivos que não devem ir pro repositório simplesmente não vão ser considerados pelo Git e portanto facilitando o seu trabalho.

Bom, por hoje é isso. Se você gostou do post, compartilhe com seus amigos e não deixe de acompanhar o blog. Ah, e se tiver sugestões maneiras de post, mande para mim!

Até a próxima!