Estou tentando fazer com que o git não mude quaisquer terminações de linha para qualquer operação. Infelizmente, parece que não importa o quê. Eu o reduzi ao seguinte caso de teste, que tem tantos mecanismos diferentes para desativar esse comportamento quanto pude encontrar.
- Comece com duas máquinas (computador Windows = A, computador Linux = B)
- Em ambas as máquinas:
git config --global core.autocrlf false
- Em ambas as máquinas:
git config --global core.eol crlf
(apenas no caso)
- Faça um novo repositório em A. De uma pasta vazia:
git init --shared
(em seguida, reexibir o.git
diretório criado )- Faça um novo arquivo
.gitignore
no repositório - Faça um novo arquivo
.gitattributes
no repositório com a única linha:* -text
git add .
, entãogit commit -m "initial commit"
para contornar, por exemplo, isso .git branch master_recv
- Adicionar controles remotos
- Faça um novo arquivo
document.txt
no repositório contendo CRLF - Commit:,
git add -A
entãogit commit -m "<something>"
- Observe que A's
document.txt
ainda contém CRLF (e excluí-lo e redefinir com--hard
retorna a versão ainda com CRLF)
- SCP todo o diretório para o computador B
- Adicionar um novo arquivo
new file
contendo CRLF - Commit:,
git add -A
entãogit commit -m "<something>"
- Observe que B's
document.txt
e B'snew file
ainda contêm CRLF
- Puxe o mestre de B para A:
git pull <remote> master:master_recv
- A's
document.txt
mudou para LF. O arquivo adicionadonew file
também contém LF.
O problema não ocorre se B for uma máquina Windows.
core.autocrlf
sempre sido falso? Parece que você já tem\n
terminações de linha em seu repositório? Não há configuração para alterar\n
em seu repositório\r\n
em seu diretório de trabalho.Respostas:
Dentro do seu projeto, deve haver um
.gitattributes
arquivo. Na maioria das vezes, a aparência deve ser a seguinte (ou esta captura de tela ):Mude
* text=auto
para* text=false
para desativar o manuseio automático (veja a captura de tela ).Como isso:
Se seu projeto não tem um arquivo .gitattributes, então as terminações de linha são definidas por suas configurações git. Para alterar suas configurações git, faça o seguinte:
Vá para o arquivo de configuração neste diretório:
1) C: \ ProgramData \ Git \ config
2) Abra o arquivo de configuração no Notepad ++ (ou qualquer editor de texto de sua preferência)
3) Altere "autocrlf =" para falso.
fonte
* text=false
não remove a definição do texto: deixa o texto definido para o valor da string false. Isso tem o mesmo efeito que deixar o texto não especificado (não especificamente não definido). Usar* -text
fornece a configuração especial não definida. Desativar o atributo text em um caminho diz ao git para não tentar nenhuma conversão de fim de linha no check-in ou check-out.* text=false
não surtiu efeito. Por favor, corrija a resposta!Uma solução simples é:
git config --global core.autocrlf false
git add --renormalize .
Se houver conversões feitas automaticamente, isso significa que há uma
.gitattributes
core.eol
diretiva no repo.Com Git 2.8+ (março de 2016) , verifique se ainda há transformação eol com:
fonte
autocrlf
HOJE! não definidoautocrlf
é equivalente afalse
. Você ficou atrás dos movimentos da moda em Git1.8.5.2
.Eu descobri. Parece que o programa SCP estava convertendo as terminações de linha. Percebi isso quando tentei deliberadamente fazer um arquivo com terminações LF e depois observei que ele apareceu como CRLF quando baixado.
Como essa foi a solução para mim, estou aceitando a resposta, mas as pessoas do futuro também devem consultar as outras respostas para uma solução mais geral.
fonte
De gitattributes (5) Página do manual tópico "Efeitos"
core.autocrlf
no novo (1.7.2+) Git não usadocore.eol
e configuração correta | desconfiguração do atributo de texto considerado como forma mais confiávelfonte
.gitattributes
arquivo, eu desativei explicitamente tudo como texto, certo? Além disso, não vejo uma opção para não fazer conversão (emboracrlf
possa não ter efeito).text
e evitar qualquer conversão, você deve definir .gitattributes como* -text
e não para* text=false
.false
não é um valor válido paratext
attribute - git não o reconhecerá e voltará para sua configuração autocrlf padrão. Além disso, depois de alterar otext
valor, você deve fazer backup de todos os arquivos de seu repositório local, fazer um commit e, em seguida, restaurar os arquivos com final de linha corretos conforme necessário e confirmá-los de volta. Então seu fim de linha nunca mais será modificado pelo git.