Eu tenho um repositório Git que é acessado no Windows e no OS X e que eu sei que já contém alguns arquivos com finais de linha CRLF. Até onde eu sei, existem duas maneiras de lidar com isso:
Defina
core.autocrlf
parafalse
qualquer lugar,Siga as instruções aqui (ecoadas nas páginas de ajuda do GitHub) para converter o repositório para conter apenas terminações de linhas LF e, posteriormente, definido
core.autocrlf
comotrue
no Windows einput
no OS X. O problema é que se eu tiver arquivos binários no repositório aquele:- não estão corretamente marcados como binários em gitattributes e
- por acaso contenham CRLFs e LFs,
eles serão corrompidos. É possível que meu repositório contenha esses arquivos.
Então, por que eu não deveria simplesmente desativar a conversão de final de linha do Git? Há uma série de advertências vagas na web sobre ter core.autocrlf
desligado causando problemas, mas muito poucos específicos queridos; o único que descobri até agora é que o kdiff3 não pode lidar com terminações CRLF (não é um problema para mim) e que alguns editores de texto têm problemas de final de linha (também não são um problema para mim).
O repositório é interno à minha empresa e, portanto, não preciso me preocupar em compartilhá-lo com pessoas com diferentes configurações de autocrlf ou requisitos de final de linha.
Existem outros problemas em deixar os finais de linha como eu desconheço?
fonte
autocrlf
para false.autocrlf
como falso. Estou procurando por razões para defini-lo como verdadeiro.autocrlf = input
: parece ser a resolução perfeita entre os dois extremos: você mantém seu repositório limpo de porcarias de CRLF, e os desenvolvedores localmente do Windows podem usar o que quiserem sem que seus arquivos locais tenham algo mágico feito automaticamente. (Eles podem querer LF localmente por vários motivos,true
na minha opinião , isso é ruim.) Não vejo desvantagens no usoautocrlf = input
.Respostas:
As razões única específicos para definir
autocrlf
atrue
são:git status
mostrar todos os seus arquivosmodified
devido à conversão automática de EOL ao clonar um repositório EOL Git baseado em Unix para um repositório do Windows (consulte o problema 83, por exemplo)A menos que você possa ver um tratamento específico que deve lidar com a EOL nativa, é melhor sair
autocrlf
parafalse
(git config --global core.autocrlf false
).Observe que essa configuração seria local (porque a configuração não é enviada de um repositório para outro)
Se você quer a mesma configuração para todos os usuários de clonagem que repo, confira " Qual é a melhor
CRLF
estratégia de tratamento com git? ", Usando otext
atributo no.gitattributes
arquivo .Exemplo:
Nota: a partir do git 2.8 (março de 2016), os marcadores de mesclagem não introduzirão mais o final de linha mista (LF) em um arquivo CRLF.
Consulte " Faça o Git usar CRLF em suas linhas de mesclagem" <<<<<<< HEAD "
fonte
autocrlf=false
. Por interesse, você sabe por que o git ainda faz a conversão de eol, mesmo se o autocrlf estiver definido como false?core.autocrlf=false
no meu cenário é se eu tivesse alguma ferramenta / editor que ficaria confuso com os finais de linha?false
, nunca fui um grande fã de coisas automáticas ou mágicas acontecendo em segundo plano. Basta usar\n
e emUTF-8
qualquer lugar e você ficará bem. Se algum maluco não entender que existem convenções, regras e esquecimentos para usarUTF-8
ou\n
, então alguém os converte manualmente e dá um tapa no rosto.core.eol
atributos em um.gitattributes
arquivo, em vez de usar essacore.autocrlf
configuração global que se aplica indiscriminadamente a todos os arquivos.Sou desenvolvedor .NET e uso o Git e o Visual Studio há anos. Minha forte recomendação é definir finais de linha como true. E faça isso o mais cedo possível durante a vida útil do seu Repositório.
Dito isto, eu odeio que o Git mude meus finais de linha. Um controle de origem deve salvar e recuperar apenas o trabalho que eu faço, NÃO deve modificá-lo. Sempre. Mas sim.
O que acontecerá se você não tiver todos os desenvolvedores definidos como verdadeiros, é UM desenvolvedor eventualmente definido como verdadeiro. Isso começará a alterar as terminações de linha de todos os seus arquivos para LF no seu repositório. E quando os usuários configurados como falsos, verificá-los, o Visual Studio avisa e solicita que você os altere. Você terá duas coisas que acontecem muito rapidamente. Primeiro, você receberá mais e mais desses avisos, quanto maior sua equipe, mais você recebe. A segunda coisa, e pior, é que ela mostrará que todas as linhas de todos os arquivos modificados foram alteradas (porque as terminações de cada linha serão alteradas pelo cara verdadeiro). Eventualmente, você não poderá mais acompanhar as alterações em seu repo. É MUITO mais fácil e limpo fazer com que todos se mantenham verdadeiros do que tentar manter todos falsos. Por mais horrível que seja viver com o fato de que seu controle de fonte confiável está fazendo algo que não deveria. Sempre.
fonte
\r\n
e você verá.true
"? Por que você permitiria isso em primeiro lugar? quando você os configura para acessar o repositório git, assim como você não permite poluir determinadas áreas com diferentes idiomas (para que qualquer pessoa que trabalhe nele possa lê-lo), ou apenas como você mantém ramos / mesclagens / rebotes / etc ao longo do escolhido política, eles devem ter uma regra clara: defina o crlf correto.Atualização 2 :
O Xcode 9 parece ter um "recurso" onde ele ignora as terminações de linha atuais do arquivo e, em vez disso, apenas usa sua configuração de final de linha padrão ao inserir linhas em um arquivo, resultando em arquivos com finais de linha mistos.
Tenho certeza de que esse bug não existia no Xcode 7; não tenho certeza sobre o Xcode 8. A boa notícia é que ele parece estar corrigido no Xcode 10.
Durante o tempo em que ele existiu, esse bug causou uma pequena quantidade de hilaridade na base de código a que me refiro na pergunta (usada até hoje
autocrlf=false
) e levou a muitas mensagens de confirmação de "EOL" e, eventualmente, à minha escrita de umpre-commit
gancho git para verificar para / impedir a introdução de terminações de linhas mistas.Atualização :
Nota: Como observado por VonC, a partir Git 2.8, marcadores de mesclagem irá não apresentar Unix de estilo linha-finais em um arquivo de estilo do Windows .
Original :
Um pequeno problema que eu notei nessa configuração é que, quando há conflitos de mesclagem, as linhas que o git adiciona para marcar as diferenças não têm finais de linha do Windows, mesmo quando o restante do arquivo possui, e você pode acabar com um arquivo com finais de linha mistos, por exemplo:
Isso não nos causa problemas (imagino que qualquer ferramenta que possa lidar com os dois tipos de final de linha também lida com final de linha misto - certamente todos os que usamos) -, mas é algo para estar ciente.
A outra coisa * que descobrimos é que, ao usar
git diff
para exibir alterações em um arquivo com finais de linha do Windows, as linhas adicionadas exibem seus retornos de carro, assim:* Ele realmente não merece o termo: "questão".
fonte