1001Ferramentas
📜 Dev

Gerador de .gitattributes

Gera .gitattributes para normalizar line endings, marcar binários, configurar diff e linguagem da estatística do GitHub (linguist).

O arquivo que decide como o Git trata cada tipo de arquivo

O .gitattributes é menos conhecido que o .gitignore e resolve outra classe de problema. Enquanto o ignore diz o que não entra no repositório, o attributes diz como o Git deve tratar o que já entrou: quais arquivos são texto e podem ter a quebra de linha normalizada, quais são binários e não devem ser comparados linha a linha, e quais devem ficar de fora da estatística de linguagens.

Marque as opções que fazem sentido para o projeto e a página monta o arquivo. A regra mais valiosa costuma ser a primeira: text=auto eol=lf normaliza a quebra de linha para LF dentro do repositório, independentemente do sistema de quem commita. Isso encerra o clássico diff que mostra o arquivo inteiro modificado só porque alguém abriu num editor do Windows.

As demais opções cuidam de imagem, PDF e áudio, marcados como binários para o Git não tentar montar diff nem mesclar conteúdo; de pastas de dependência e de saída de build, marcadas como vendored e generated para não distorcerem a barra de linguagens do GitHub; e de documentação, marcada como tal. Salve o resultado como .gitattributes na raiz. Em arquivos já commitados com CRLF, é preciso rodar git add --renormalize . uma vez para a mudança valer.

Perguntas frequentes

Qual a diferença entre text=auto e core.autocrlf?
A configuração core.autocrlf vale para a máquina de quem a definiu e some quando outra pessoa clona. O .gitattributes viaja junto com o repositório, então a regra vale para todo mundo, inclusive para o CI. Quando os dois existem, o attributes tem prioridade.
Marcar como binary muda o arquivo?
Não muda o conteúdo. O que muda é o comportamento: o Git para de tentar converter quebra de linha, não gera diff textual e trata conflito como "escolha uma das versões". É exatamente o que você quer para PNG e PDF, que ficariam corrompidos com normalização de linha.
Para que serve linguist-vendored?
A barra de linguagens que o GitHub mostra no topo do repositório é calculada pelo linguist. Se a pasta vendor ou uma biblioteca de terceiros entra na conta, um projeto Python pode aparecer como 80% JavaScript. Marcar como vendored ou generated tira esses arquivos da estatística, sem removê-los do repositório.

Ferramentas Relacionadas