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

2

Eu tenho alguns arquivos C ++ bastante longos e git diff --check está relatando que há alguns retornos de carro ^M em aproximadamente 15 linhas diferentes. Isso está em uma máquina com Windows 7. Depois de pesquisar várias soluções, ou seja, Advanced Save Options do Visual Studio ou EOL Conversions do Notepad ++, todas elas parecem estar modificando todas as linhas, não apenas as que o Git está reclamando. Isso resulta em um diff de cada linha sendo substituída.

Isso pode acontecer porque todas as alterações anteriores nesses arquivos também tiveram retornos de carro ^M e confirmações anteriores a ele ignoraram qualquer aviso de retorno de carro?

A execução de git config core.autocrlf retorna true, mas a preparação de um arquivo não faz nada quando eu executar git diff --cached --check para esse arquivo depois de testá-lo.

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

    
por Fasih Awan 04.12.2013 / 20:52

4 respostas

0

15 linhas?

No notepad ++, escolha substituir. Escolheu estendido. Procure por \ r (que é ^ M) e substitua por nada (a menos que você queira uma nova linha, em seguida, substitua por \ n). Como você não quer 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.

    
por 04.12.2013 / 21:33
1

Use dos2unix <file> se estiver na linha de comando. Ele consertará as terminações de linha necessárias 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 diff antes de confirmar.

É melhor evitar acabar com finais de linha mistos em arquivos. Isso pode dificultar a mesclagem e a história a seguir.

Alguns editores não mudam de estilo, mas acho que, mesmo que um ^ M seja arquivado, alguns editores assumirão o estilo dos e alterarão todos os finais de linha quando escreverem.

Normalmente, é possível encontrar configurações para os editores, o que fará com que o editor continue com o estilo desejado. As configurações de finalização e tabulação de linha também são geralmente definidas dependendo do estilo.

    
por 22.03.2014 / 19:20
1

O Git pode fazer isso automaticamente com git config --global core.autocrlf true . Mas isso acontece no momento do checkout ou do commit. Portanto, o git não mostrará as mudanças preparadas, mas deve tranquilamente converter a IF se o seu editor introduzir novos finais de linha indesejados.

Acho que use dos2unix se as terminações de linha indesejadas já estiverem no repositório.

Para detalhes, veja a resposta aqui: link e leia link

    
por 22.03.2014 / 19:38
0

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

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

    
por 14.06.2017 / 02:57