Como alterar as configurações de final de linha

582

Existe um arquivo ou menu que permita alterar as configurações de como lidar com as terminações de linha?

Eu li que existem 3 opções:

  1. Faça checkout no estilo Windows, confirme no estilo Unix

    O Git converterá LF em CRLF ao verificar arquivos de texto. Ao confirmar arquivos de texto, o CRLF será convertido em LF. Para projetos de plataforma cruzada, esta é a configuração recomendada no Windows ("core.autocrlf" está definido como "true")

  2. Faça o checkout como está, confirme no estilo Unix

    O Git não realizará nenhuma conversão ao verificar arquivos de texto. Ao confirmar arquivos de texto, o CRLF será convertido em LF. Para projetos de plataforma cruzada, esta é a configuração recomendada no Unix ("core.autocrlf" está definido como "input").

  3. Fazer check-out como está, confirmar como está

    O Git não realizará nenhuma conversão ao fazer check-out ou confirmar arquivos de texto. A escolha dessa opção não é recomendada para projetos de plataforma cruzada ("core.autocrlf" está definido como "false")

qwertymk
fonte
5
possível duplicação de Como forçar o git a usar LF em vez de CR + LF no Windows?
Alastair Irvine
3
Qual destes é o padrão?
Stephen Stephen
2
Não importa, parece que o padrão é verdadeiro, o que eu acho apropriado.
Stephen Stephen
19
Na verdade, acho que a terceira opção funciona melhor. Caso contrário, eu já estive em situações em que edito scripts batch e sh na mesma plataforma (Windows / Linux) e os confirmo, e o Git "corrige" automaticamente os finais de linha de uma plataforma ... Não, eu prefiro ser autodidata consciente das terminações de linha e confirme / faça o check-out exatamente como estão.
precisa saber é o seguinte
1
@ Neutrino Eu gostaria que isso fosse verdade, mas um exemplo de IDE que mexe com as terminações de sua linha (e não oferece uma opção de configuração razoável para desativar isso) é o Visual Studio.
Cássio Renan

Respostas:

530

A maneira normal de controlar isso é com git config

Por exemplo

git config --global core.autocrlf true

Para obter detalhes, role para baixo neste link para o Pro Git até a seção "core.autocrlf"


Se você quiser saber em que arquivo este é salvo, você pode executar o comando:

git config --global --edit

e o arquivo de configuração global do git deve abrir em um editor de texto, e você pode ver de onde esse arquivo foi carregado.

CodingWithSpike
fonte
17
trueou falsesão apenas duas opções, o instalador tem três
qwertymk
49
inputé a 3ª opção (conforme indicado no link que forneci). As 3 opções são true| false| input
CodingWithSpike
2
Aqui está outra boa pergunta SO sobre o assunto: stackoverflow.com/questions/3206843/…
CodingWithSpike
31
Na verdade, se você reler sua própria pergunta, nos trechos copiados / colados: "1 ... ("core.autocrlf" is set to "true") ... 2 ... ("core.autocrlf" is set to "input") ... 3 ... ("core.autocrlf" is set to "false")"então você basicamente respondeu sua própria pergunta? :)
CodingWithSpike
2
Esta é a maneira antiga de contornar isso. Veja o arquivo .gitattributes.
eftshift0
176

Formato de final de linha usado no SO

  • Windows: par CR(retorno de carro \r) e LF(LineFeed \n)
  • OSX, Linux: LF(LineFeed \n)

Podemos configurar o git para corrigir automaticamente os formatos de final de linha para cada sistema operacional de duas maneiras.

  1. Configuração global do Git
  2. Usar .gitattributesarquivo

Configuração Global

No Linux / OSX
git config --global core.autocrlf input

Isto irá corrigir qualquer CRLFpara LFquando você comete.

No Windows
git config --global core.autocrlf true

Isso garantirá que, quando você fizer o checkout no Windows, todos LFserão convertidos emCRLF

Arquivo .gitattributes

É uma boa ideia manter um .gitattributesarquivo, pois não queremos que todos da nossa equipe definam sua configuração. Esse arquivo deve permanecer no caminho raiz do repositório e, se existir, o git o respeitará.

* text=auto

Isso tratará todos os arquivos como arquivos de texto e será convertido na linha do SO que termina no checkout e volta ao LFcommit automaticamente. Se você quiser contar explicitamente, use

* text eol=crlf
* text eol=lf

O primeiro é para checkout e o segundo é para commit.

*.jpg binary

Trate todas as .jpgimagens como arquivos binários, independentemente do caminho. Portanto, nenhuma conversão é necessária.

Ou você pode adicionar qualificadores de caminho:

my_path/**/*.jpg binary
Jasnan
fonte
3
E o OS X, que usa CR(retorno de carro) sozinho?
JWW
23
MacOS legado (ou seja, MacOS 9 e anterior) usado CRsozinho, mas o OS X geralmente usa LF.
Zachary Ware
2
Posso usar * text eol=lfduas vezes para fazer o checkout LFno Windows?
mbomb007
1
De acordo com a configuração da documentação gitattributes , o * text=autogit decide se o conteúdo é texto ou não. Forçar todos os arquivos a serem texto deve ser * textapenas.
Adrian W
Como defino eol=crarquivos no Mac OS 9 e em outras plataformas herdadas?
NobleUplift 30/08/19
36

Para uma solução de configuração de repositório, que pode ser redistribuída a todos os desenvolvedores, confira o atributo de texto no arquivo .gitattributes . Dessa forma, os desenvolvedores não precisam definir manualmente suas próprias terminações de linha no repositório e, como repositórios diferentes podem ter estilos de final de linha diferentes, o core global.autocrlf não é o melhor, pelo menos na minha opinião.

Por exemplo, desmarcar esse atributo em um determinado caminho [ . - texto] forçará o git a não tocar nas terminações da linha ao fazer check-in e check-out. Na minha opinião, esse é o melhor comportamento, pois a maioria dos editores de texto modernos pode lidar com ambos os tipos de terminações de linha. Além disso, se você como desenvolvedor ainda deseja fazer a conversão de final de linha ao fazer check-in, ainda pode definir o caminho para corresponder a determinados arquivos ou definir o atributo eol (em .gitattributes) em seu repositório.

Verifique também este post relacionado, que descreve o arquivo .gitattributes e o atributo de texto com mais detalhes: Qual é a melhor estratégia de manipulação de CRLF (retorno de carro, avanço de linha) com o Git?

Fazi
fonte
. - textis not a valid attribute name: .gitattributes:1por favor colocarcat .gitattributes
jangorecki 15/04
3

Para mim, o que fez o truque foi executar o comando

git config auto.crlf false

dentro da pasta do projeto, eu queria especificamente para um projeto.

Esse comando alterou o arquivo no caminho {nome_do_projeto} / .git / config (fyi .git é uma pasta oculta) adicionando as linhas

[auto]
    crlf = false

no final do arquivo. Suponho que mudar o arquivo também faça o mesmo truque.

Entusiasta de viagens e códigos
fonte
1

Se você deseja converter de volta os formatos de arquivo que foram alterados para o formato UNIX do formato PC.

(1) É necessário reinstalar o GIT da tartaruga e, na seção "Conversão final de linha", verifique se você selecionou a opção "Fazer check-in como está - faça check-in como está".

(2) e mantenha as configurações restantes como estão.

(3) quando a instalação estiver concluída

(4) escreva todas as extensões de arquivo que são convertidas para o formato UNIX em um arquivo de texto (extensions.txt).

ex:*.dsp
   *.dsw

(5) copie o arquivo no seu clone Execute o seguinte comando no GITBASH

while read -r a;
do
find . -type f -name "$a" -exec dos2unix {} \;
done<extension.txt
Nishanth
fonte