{"meta":{"title":"Configurando o Git para lidar com finais de linha","intro":"Para evitar problemas com diffs, é possível configurar o Git para operar adequadamente com delimitadores de linhas.","product":"Introdução","breadcrumbs":[{"href":"/pt/get-started","title":"Introdução"},{"href":"/pt/get-started/git-basics","title":"Noções básicas do Git"},{"href":"/pt/get-started/git-basics/configuring-git-to-handle-line-endings","title":"Manusear delimitadores de linha"}],"documentType":"article"},"body":"# Configurando o Git para lidar com finais de linha\n\nPara evitar problemas com diffs, é possível configurar o Git para operar adequadamente com delimitadores de linhas.\n\n## Sobre os finais de linha\n\nToda vez que você pressiona <kbd>return</kbd> no seu teclado, você insere um caractere invisível denominado delimitadores de linha. Os diferentes sistemas operacionais gerenciam as quebras de linha de maneira diferente.\n\nQuando você estiver colaborando em projetos com o Git e GitHub, o Git poderá produzir resultados inesperados se, por exemplo, você estiver trabalhando em um computador Windows e seu colaborador tiver feito uma alteração no macOS.\n\nVocê pode configurar o Git para gerenciar as quebras de linha automaticamente, para que você possa colaborar efetivamente com pessoas que usam diferentes sistemas operacionais.\n\n## Configurações globais para delimitadores de linhas\n\nO comando `git config core.autocrlf` é usado para alterar a forma como o Git lida com quebras de linha. É um argumento único.\n\n<div class=\"ghd-tool mac\">\n\nNo macOS, basta passar `input` para a configuração. Por exemplo:\n\n```shell\n$ git config --global core.autocrlf input\n# Configure Git to ensure line endings in files you checkout are correct for macOS\n```\n\n</div>\n\n<div class=\"ghd-tool windows\">\n\nNo Windows, basta passar `true` para a configuração. Por exemplo:\n\n```shell\n$ git config --global core.autocrlf true\n# Configure Git to ensure line endings in files you checkout are correct for Windows.\n# For compatibility, line endings are converted to Unix style when you commit files.\n```\n\n</div>\n\n<div class=\"ghd-tool linux\">\n\nNo Linux, basta passar `input` para a configuração. Por exemplo:\n\n```shell\n$ git config --global core.autocrlf input\n# Configure Git to ensure line endings in files you checkout are correct for Linux\n```\n\n</div>\n\n## Configurações por repositório\n\nOpcionalmente, você pode configurar um arquivo `.gitattributes` para gerenciar como o Git lê finais de linha em um repositório específico. Quando você faz commit desse arquivo em um repositório, ele substitui a configuração `core.autocrlf` para todos os colaboradores do repositório. Isso garante um comportamento consistente para todos os usuários, independentemente das configurações e do ambiente Git.\n\nO arquivo `.gitattributes` deve ser criado na raiz do repositório e comitado como qualquer outro arquivo.\n\nUm arquivo `.gitattributes` se parece com uma tabela com duas colunas:\n\n* À esquerda está o nome do arquivo para o Git fazer a correspondência.\n* À direita está a configuração de final de linha que o Git deve usar para esses arquivos.\n\n### Exemplo\n\nVeja um arquivo `.gitattributes` de exemplo. Você pode usá-lo como um modelo para os seus repositórios:\n\n```text\n# Set the default behavior, in case people don't have core.autocrlf set.\n* text=auto\n\n# Explicitly declare text files you want to always be normalized and converted\n# to native line endings on checkout.\n*.c text\n*.h text\n\n# Declare files that will always have CRLF line endings on checkout.\n*.sln text eol=crlf\n\n# Denote all files that are truly binary and should not be modified.\n*.png binary\n*.jpg binary\n```\n\nVocê observará que os arquivos são combinados – `*.c`, `*.sln`, `*.png` –, separados por um espaço e, em seguida, obtém uma configuração – `text`, `text eol=crlf`, `binary`. Iremos analisar algumas possíveis configurações abaixo.\n\n* `text=auto` O Git vai manipular os arquivos da forma que achar melhor. Essa é uma boa opção padrão.\n\n*               `text eol=crlf` O Git sempre converterá delimitadores de linha em `CRLF` no check-out. Você deve usar isso para arquivos que devem manter finais `CRLF`, mesmo no OSX ou Linux.\n\n*               `text eol=lf` O Git sempre converterá delimitadores de linha em `LF` no check-out. Você deve usar isso para arquivos que devem manter os delimitadores LF, mesmo no Windows.\n\n* `binary` O Git entenderá que os arquivos especificados não são texto e não deverá tentar alterá-los. A configuração `binary` também é um alias para `-text -diff`.\n\n## Atualizar um repositório após alterar delimitadores de linha\n\nDepois de definir a opção `core.autocrlf` ou fizer commit de um arquivo `.gitattributes`, o Git altera automaticamente as terminações de linha para corresponder à nova configuração. Você pode descobrir que o Git relata alterações em arquivos que você não modificou.\n\nPara garantir que todas as terminações de linha em seu repositório correspondam com a nova configuração, faça backup dos arquivos com o Git e remova e restaure todos os arquivos para normalizar as terminações de linha.\n\n1. Antes de adicionar ou confirmar alterações, verifique se o Git aplicou a configuração corretamente. Por exemplo, o Git determina automaticamente se os arquivos em um repositório são arquivos binários ou de texto. Para evitar a corrupção de arquivos binários em seu repositório, recomendamos que você marque explicitamente arquivos como binários em `.gitattributes`. Para obter mais informações, confira [gitattributes – Definir atributos por caminho](https://www.git-scm.com/docs/gitattributes#_marking_files_as_binary) na documentação do Git.\n1. Para evitar a perda de alterações locais em arquivos no repositório, adicione e confirme todas alterações pendentes executando os comandos a seguir.\n\n   ```shell copy\n   git add . -u\n   git commit -m \"Saving files before refreshing line endings\"\n   ```\n\n1. Para atualizar todos os arquivos no branch atual de modo a refletir a nova configuração, execute o comando a seguir.\n\n   ```shell copy\n   git add --renormalize .\n   ```\n\n1. Para exibir os arquivos reescritos e normalizados, execute o comando a seguir.\n\n   ```shell copy\n   git status\n   ```\n\n1. Opcionalmente, para confirmar todas alterações pendentes no repositório, execute o comando a seguir.\n\n   ```shell copy\n   git commit -m \"Normalize all the line endings\"\n   ```\n\n## Leitura adicional\n\n* [Personalizando o Git – Atributos Git](https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes) no livro Pro Git\n* [git-config](https://git-scm.com/docs/git-config) nas páginas de manual do Git\n* [Introdução – Configuração do Git pela primeira vez](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup) no livro Pro Git\n* [Mind the End of Your Line](http://adaptivepatchwork.com/2012/03/01/mind-the-end-of-your-line/) de [Tim Clem](https://github.com/tclem)"}