Eu quero forçar o git a fazer checkout de arquivos no Windows usando apenas LF
não CR+LF
. Verifiquei as duas opções de configuração, mas não consegui encontrar a combinação certa de configurações.
Quero que ele converta todos os arquivos LF
e os mantenha LF
nos arquivos.
Observação: usei, autocrlf = input
mas isso apenas repara os arquivos quando você os confirma. Eu quero forçá-lo a fazê-los usar LF
.
Provavelmente eu não estava tão claro: o repositório já está usando, LF
mas os arquivos retirados usando o msysgit estão usando CR+LF
e eu quero forçar o msysgit a obtê-los com LF
: forçar finais de linha do Unix .
>git config --list | grep crlf
core.autocrlf=input
autocrlf=input
é a opção correta. Obviamente, ele não protege você de arquivos que realmente possuemcr+lf
no repositório ou a criação de arquivos comcr+lf
outra ferramenta antes de adicioná-los ao git. Para quais problemas você está enfrentando isso não funciona?LF
mas quando os obtenho no Windows, o msysgit os converte emCR+LF
.autocrlf
definido comoinput
, git está deixando oslf
feeds de linha em paz. Você pode postar a saída degit config
?Respostas:
O OP acrescentou em sua pergunta:
Um primeiro passo simples ainda estaria em um
.gitattributes
arquivo:(conforme observado nos comentários do neto , referindo-se à
.gitattributes
conversão de fim de linha ), para evitar qualquerCRLF
conversão para arquivos com a corretaeol
.E sempre recomendei
git config --global core.autocrlf false
desativar qualquer conversão (que se aplicaria a todos os arquivos com versão)Consulte Práticas recomendadas para configuração git de plataforma cruzada?
Desde o Git 2.16 (primeiro trimestre de 2018), você pode
git add --renormalize .
aplicar essas.gitattributes
configurações imediatamente.Mas um segundo passo mais poderoso envolve um driver de filtro gitattribute e adiciona um passo borrado
Sempre que você atualizasse sua árvore de trabalho, um script poderia, apenas para os arquivos especificados em
.gitattributes
, forçar aLF eol
e qualquer outra opção de formatação que você deseja impor.Se o
clear
script " " não fizer nada, você (depois do commit) transformará seus arquivos, aplicando exatamente o formato que você precisa seguir.fonte
.txt
extensão. É preferível estabelecer isso primeiro e testá-lo em um grupo específico, antes de generalizar para *, e adicionar uma regra negativa!*.xyz ...
para excluir alguns poucos arquivos dessa regra..gitattributes
linhas devem ler:*.txt text eol=lf
conforme git-scm.com/docs/gitattributes.gitattributes
temos que fazergit add --renormalize .
A maneira correta de obter terminações LF no Windows é primeiro definir
core.autocrlf
comofalse
:Você precisa fazer isso se estiver usando o msysgit, porque ele o define
true
nas configurações do sistema.Agora o git não fará nenhuma linha finalizando a normalização. Se você deseja que os arquivos com check-in sejam normalizados, faça o seguinte: Configure
text=auto
em.gitattributes
para todos os arquivos:E defina
core.eol
paralf
:Agora você também pode alternar repositórios únicos para crlf (no diretório de trabalho!) Executando
Depois de fazer a configuração, você pode querer que o git normalize todos os arquivos no repositório . Para fazer isso, vá para a raiz do seu repositório e execute estes comandos:
Se agora você deseja que o git também normalize os arquivos em seu diretório de trabalho , execute estes comandos:
fonte
git diff --cached --name-only -z | xargs -0 git add
git diff --cached --name-only
?git clone --config core.autocrlf=false <repo path>
.Volto a essa resposta com bastante frequência, embora nenhuma delas seja certa para mim. Dito isto, a resposta certa para mim é uma mistura dos outros.
O que eu acho que funciona é o seguinte:
Para repos que foram retirados após a definição dessas configurações globais, tudo será verificado como o que estiver no repositório - espero
LF
(\n
). QualquerCRLF
será convertido para apenasLF
no check-in.Com um repo existente que você já efetuou check-out - que possui as terminações de linha corretas no repo, mas não sua cópia de trabalho - você pode executar os seguintes comandos para corrigi-lo:
Isso excluirá (
rm
) recursivamente (r
) sem aviso (-f
), todos os arquivos, exceto aqueles que você editou (--cached
), do diretório atual (.
). Emreset
seguida, todos esses arquivos retornam a um estado em que eles têm suas terminações de linha verdadeiras (correspondendo ao que está no repositório).Se você precisar corrigir as terminações de linha de arquivos em um repositório, recomendo pegar um editor que permita fazer isso em massa, como IntelliJ ou Sublime Text, mas tenho certeza de que qualquer um bom provavelmente suportará isso.
fonte
Notepad++
também mostra o final da linha do arquivo aberto atualmente no canto inferior direito. Um clique direito nesse campo permitirá alterar as terminações da linha.core.autocrlf input
opção substitui acore.eol
configuração, portanto, a configuração de ambos é redundante. (Veja git-scm.com/docs/git-config )Contexto
Se vocês
você pode fazer isso começando com o git 2.10. 2.10 ou posterior é necessário, porque 2.10 corrigiu o comportamento de text = auto juntamente com eol = lf . Fonte .
Solução
Coloque um
.gitattributes
arquivo na raiz do seu repositório git com o seguinte conteúdo:Comprometa-o.
Ajustes opcionais
Você também pode adicionar um
.editorconfig
na raiz do seu repositório para garantir que as ferramentas modernas criem novos arquivos com as terminações de linha desejadas.fonte
core.autocrlf=input
é a configuração certa para o que você deseja, mas pode ser necessário fazer umgit update-index --refresh
e / ou umgit reset --hard
para que a alteração seja efetivada.Com
core.autocrlf
definido comoinput
, o git não aplicará a conversão de nova linha no check-out (portanto, se você tiver LF no repositório, receberá LF), mas garantirá que, no caso de você estragar e introduzir alguns CRLFs no trabalho copiar de alguma forma, eles não vão entrar no repositório.fonte
Você pode encontrar a solução para esse problema em: https://help.github.com/en/github/using-git/configuring-git-to-handle-line-endings
Descrição simplificada de como você pode resolver esse problema no Windows:
Configurações globais para finais de linha O comando git config core.autocrlf é usado para alterar como o Git lida com finais de linha. É preciso um único argumento.
No Windows, você simplesmente passa fiel à configuração. Por exemplo: C:> git config --global core.autocrlf true
Boa sorte, espero ter ajudado.
fonte