Removendo retornos de carro (^M) de certas linhas sem modificar todas as linhas

Removendo retornos de carro (^M) de certas linhas sem modificar todas as linhas

Tenho alguns arquivos C++ bastante longos e git diff --checkestou relatando que há alguns retornos de carro ^Mem cerca de 15 linhas diferentes. Isso está em uma máquina com Windows 7. Depois de pesquisar várias soluções, ou seja, Advanced Save Optionsas conversões EOL do Visual Studio ou do Notepad ++, todas parecem estar modificando cada linha, não apenas aquelas das quais o Git está reclamando. Isso resulta em um git diff de cada linha sendo substituída.

Isso poderia ocorrer porque todas as alterações anteriores nesses arquivos também tiveram retornos de carro ^Me as confirmações anteriores ignoraram quaisquer avisos de retorno de carro?

A execução git config core.autocrlfretorna verdadeiro, mas a preparação de um arquivo não faz nada quando executo git diff --cached --checkesse arquivo após a preparação.

Existe alguma maneira de removê-los? Ir manualmente para a fila e tentar mudar não parece estar ajudando.

Responder1

15 linhas?

No notepad++, escolha substituir. Escolha estendido. Procure por \r (que é ^M) e substitua por nada (a menos que você queira uma nova linha, substitua por \n). Como você não deseja que todos os ^M sejam substituídos, não pressione substituir todos, escolha aqueles que deseja substituir.

Se você usar o bloco de notas normal do Windows, os ^M aparecerão como caixas. Você pode remover as caixas. Feio, mas funciona.

Responder2

Usardos2unix <file>se estiver na linha de comando. Ele corrigirá os finais de linha necessários ou não fará nada se nada for necessário. Faça um find . -name "*.cpp" -exec dos2unix {} +para fazer vários arquivos. Em seguida, compare com git diffantes do commit.

É melhor evitar acabar com finais de linha mistos nos arquivos. Isso pode tornar estranho a fusão e o acompanhamento do histórico.

Alguns editores não mudarão o estilo, mas acho que se pelo menos um ^M entrar no arquivo, alguns editores assumirão o estilo dos e alterarão todos os finais de linha quando escreverem o arquivo.

Geralmente é possível encontrar configurações para editores que farão com que o editor fique com o estilo desejado. O final de linha e as configurações de tabulação também são geralmente definidas dependendo do estilo.

Responder3

O Git pode fazer isso automaticamente com o git config --global core.autocrlf true.Mas isso acontece na hora do checkout ou na hora do commit.Portanto, o git não mostrará as alterações preparadas, mas deverá cuidar silenciosamente da conversão SE o seu editor introduzir alguns novos finais de linha indesejados.

Acho que use dos2unix se os finais de linha indesejados já estiverem no repositório.

Para detalhes, veja a resposta aqui: https://stackoverflow.com/questions/10418975/how-to-change-line-ending-settingse leiahttp://git-scm.com/book/en/Customizing-Git-Git-Configuration#Formatting-and-Whitespace

Responder4

em uma máquina Windows você pode fazer, por exemplo:

for /r %f in (*.js) do "c:\Program Files\git\usr\bin\dos2unix.exe" %f

isso removerá CRs de todos os arquivos com extensão .js do diretório atual para baixo

informação relacionada