Essas mensagens são devido ao valor padrão incorreto core.autocrlf
no Windows.
O conceito de autocrlf
é manipular conversões de finais de linha de forma transparente. E faz!
Más notícias : o valor precisa ser configurado manualmente.
Boas notícias : isso deve ser feito apenas UMA vez por instalação do git (por configuração do projeto também é possível).
Como autocrlf
funciona :
core.autocrlf=true: core.autocrlf=input: core.autocrlf=false:
repo repo repo
^ V ^ V ^ V
/ \ / \ / \
crlf->lf lf->crlf crlf->lf \ / \
/ \ / \ / \
Aqui crlf
= marcador de fim de linha no estilo win, lf
= estilo unix (e mac osx).
(pré-osx cr
não afetado por nenhuma das três opções acima)
Quando esse aviso aparece (no Windows)
- autocrlf
= true
se você possui estilo unix lf
em um dos seus arquivos (= RARAMENTE),
- autocrlf
= input
se você possui estilo win crlf
em um dos seus arquivos (= quase SEMPRE),
- autocrlf
= false
- NUNCA!
O que esse aviso significa
O aviso " LF será substituído pelo CRLF " diz que você (tendo autocrlf
= true
) perderá o seu LF no estilo unix após o ciclo de confirmação da compra (ele será substituído pelo CRLF no estilo do Windows). O Git não espera que você use LF estilo unix no Windows.
O aviso " CRLF será substituído por LF " diz que você (tendo autocrlf
= input
) perderá seu CRLF no estilo do Windows após um ciclo de confirmação (ele será substituído pelo LF no estilo unix). Não use input
sob janelas.
Mais uma maneira de mostrar como autocrlf
funciona
1) true: x -> LF -> CRLF
2) input: x -> LF -> LF
3) false: x -> x -> x
onde x é CRLF (estilo Windows) ou LF (estilo Unix) e setas representam
file to commit -> repository -> checked out file
Como consertar
O valor padrão para core.autocrlf
é selecionado durante a instalação do git e armazenado em gitconfig ( %ProgramFiles(x86)%\git\etc\gitconfig
) em todo o sistema . Também há (em cascata na seguinte ordem):
- gitconfig "global" (por usuário) localizado em ~/.gitconfig
, ainda outro
- gitconfig "global" (por usuário) em $XDG_CONFIG_HOME/git/config
ou $HOME/.config/git/config
e
- gitconfig "local" (por repo) no .git/config
diretório de trabalho.
Portanto, escreva git config core.autocrlf
no diretório de trabalho para verificar o valor atualmente usado e
- adicionar autocrlf=false
à solução gitconfig do sistema # por sistema
- git config --global core.autocrlf false
# solução por usuário
- git config --local core.autocrlf false
# solução por projeto
Avisos
- as git config
configurações podem ser substituídas pelas gitattributes
configurações.
- a crlf -> lf
conversão ocorre apenas ao adicionar novos arquivos, os crlf
arquivos já existentes no repositório não são afetados.
Moral (para Windows):
- use core.autocrlf
= true
se você planeja usar este projeto no Unix também (e não deseja configurar seu editor / IDE para usar terminações de linha unix),
- use core.autocrlf
= false
se você planeja usar este projeto apenas no Windows ( ou você configurou seu editor / IDE para usar finais de linha unix),
- nunca use core.autocrlf
=, a input
menos que você tenha um bom motivo para ( por exemplo, se você estiver usando utilitários unix no Windows ou se tiver problemas com makefiles),
PS O que escolher ao instalar o git para Windows?
Se você não usar nenhum dos seus projetos no Unix, não concorde com a primeira opção padrão. Escolha o terceiro ( Checkout como está, confirme como está ). Você não verá esta mensagem. Sempre.
PPS Minha preferência pessoal é configurar o editor / IDE para usar finais no estilo Unix e definir core.autocrlf
como false
.