Publicamos atualizações frequentes em nossa documentação, e a tradução desta página ainda pode estar em andamento. Para obter as informações mais recentes, acesse a documentação em inglês. Se houver problemas com a tradução desta página, entre em contato conosco.

Esta versão do GitHub Enterprise será descontinuada em Esta versão do GitHub Enterprise foi descontinuada em 2020-01-22. No patch releases will be made, even for critical security issues. For better performance, improved security, and new features, upgrade to the latest version of GitHub Enterprise. For help with the upgrade, contact GitHub Enterprise support.

Configurar o Git para uso com delimitadores de linha

Para evitar problemas com diffs, é possível configurar o Git para operar adequadamente com delimitadores de linhas.

Todas as vezes que você pressiona return no seu teclado, na verdade você está inserindo um caractere invisível denominado delimitador de linha. Historicamente, sistemas operacionais diferentes trataram os delimitadores de linhas de forma distintas.

Quando você visualiza as alterações em um arquivo, o Git opera os delimitadores de linhas à sua própria maneira. Como você está colaborando com projetos no Git e no GitHub Enterprise, o Git poderá produzir resultados inesperados se, por exemplo, você estiver trabalhando em uma máquina com Windows e seu colaborador fez uma alteração no OS X.

Configurações globais para delimitadores de linhas

O comando git config core.autocrlf é utilizado para alterar a forma como o Git trabalha com delimitadores de linhas. É um argumento único.

No OS X, você simplesmente introduz input (entrada) na configuração. Como por exemplo:

$ git config --global core.autocrlf input
# Configura o Git no OS X para operar adequadamente com delimitadores de linhas

No Windows, você simplesmente introduz true na configuração. Como por exemplo:

$ git config --global core.autocrlf input true
# Configura o Git no Windows para lidar corretamente com delimitadores

No Linux, você simplesmente introduz input (entrada) na configuração. Por exemplo:

$ git config --global core.autocrlf input
# Configura o Git no Linux para operar adequadamente com delimitadores de linhas

No OS X e Linux, você normalmente deseja introduzir input (entrada) nesta configuração. No Windows, você normalmente deseja usar true. Por exemplo:

$ git config --global core.autocrlf input
# Configura o Git no OS X ou no Linux para lidar corretamente com delimitadores

$ git config --global core.autocrlf true
# Configura o Git no Windows para lidar corretamente com delimitadores

Configurações por repositórios

Como opção, é possível configurar a forma como o Git gerencia os delimitadores de linhas por repositório configurando um arquivo especial .gitattributes. É feito commit desse arquivo no repositório, o que anula a configuração core.autocrlf de um indivíduo, garantindo um comportamento consistente para todos os usuários, independentemente das configurações deles no Git. A vantagem de um arquivo .gitattributes é que as as configurações de linhas são associadas ao repositório. Você não precisa se preocupar se os colaboradores têm as mesmas configurações de linhas que você.

O arquivo .gitattributes deve ser criado na raiz do repositório e, como qualquer outro arquivo, com commit.

Um arquivo .gitattributes se parece com uma tabela de duas colunas:

  • À esquerda está o nome do arquivo para o Git fazer a correspondência.
  • À direita está a configuração do delimitador de linha que o Git deve usar para esses arquivos.

Exemplo

Segue aqui um exemplo de arquivo .gitattributes. Você pode usá-lo como modelo para seus repositórios:

# Defina o comportamento padrão, caso as pessoas não tenham configurado o core.autocrlf.
* text=auto

# Declare explicitamente os arquivos de texto que você deseja que sempre sejam normalizados e convertidos 
# em delimitadores de linha nativos ao fazer checkout.
*.c text
*.h text

# Declare os arquivos que sempre terão delimitadores de linha CRLF ao fazer checkout.
*.sln text eol=crlf

# Indique todos os arquivos que são verdadeiramente binários e que não devem ser modificados.
*.png binary
*.jpg binary

Você observará que os arquivos são correspondentes--*.c, *.sln, *.png--, separados por um espaço e recebem uma configuração--text, text eol=crlf, binary. Vamos ver algumas configurações possíveis abaixo.

"text=auto"
O Git vai operar os arquivos da forma que achar melhor. Essa é uma boa opção padrão.
"text eol=crlf"
O Git sempre converterá os delimitadores em "CRLF" ao fazer checkout. É recomendável usar isso para arquivos que precisam manter os delimitadores "CRLF", mesmo no OSX ou no Linux.
"text eol=lf"
O Git sempre converterá os delimitadores em "LF" ao fazer checkout. Você deve usar isso para arquivos que devem manter os delimitadores LF, mesmo no Windows.
"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".

Atualizar um repositório após alterar delimitadores de linha

Depois de configurar a opção core.autocrlf e fazer commit de um arquivo .gitattributes, você vai notar que o Git deseja fazer commit de arquivos que você não modificou. Neste ponto, o Git está ansioso para alterar os delimitadores de linhas em todos os arquivos para você.

A melhor maneira de configurar automaticamente os delimitadores no repositório é primeiro fazer backup dos arquivos com o Git, excluir todos os arquivos no repositório (exceto o diretório .git) e depois restaurar todos os arquivos de uma vez.

  1. Salva seus arquivos atuais no Git, assim seu trabalho não será perdido.

    $ git add . -u
    $ git commit -m "Saving files before refreshing line endings"
  2. Adiciona todos os seus arquivos alterados novamente e normaliza os delimitadores de linha.

    $ git add . --renormalize
  3. Mostra os arquivos regravados e normalizados.

    $ git status
  4. Faz commit das alterações em seu repositório.

    $ git commit -m "Normalize all the line endings"

Leia mais

Pergunte a uma pessoa

Não consegue encontrar o que procura?

Entrar em contato