Edite o arquivo no local sem modificar os finais de linha

0

Eu preciso modificar fontes sob o controle de versão do Git. As fontes são arquivos de projeto do Visual Studio, o que os torna nativos da Microsoft. Eu quero evitar problemas de espaço em branco, incluindo jogos de término de linha.

Eu olhei os arquivos antes da modificação no emacs, e o ^M claramente não estava presente.

Eu então executei o seguinte a partir de um script de uma máquina Linux:

sed -i 's/odbc32.lib //g' *.vcproj
sed -i 's/odbccp32.lib //g' *.vcproj

Quando vejo as alterações:

$ git diff cryptest.vcproj
diff --git a/cryptest.vcproj b/cryptest.vcproj
index cec447d..9ae71ea 100644
--- a/cryptest.vcproj
+++ b/cryptest.vcproj
@@ -76,7 +76,7 @@
...
Name="VCLinkerTool"
-        AdditionalDependencies="odbc32.lib odbccp32.lib Ws2_32.lib"
+        AdditionalDependencies="Ws2_32.lib"^M
        SuppressStartupBanner="true"
...

Como faço uma substituição sem adicionar espaço em branco estranho?

    
por jww 18.07.2015 / 01:04

1 resposta

1

Hoje em dia, o emacs detectará automaticamente as terminações de linha usadas em um arquivo e, portanto, você não verá se um arquivo possui \n ou \r ou \r\n fins de linha. Qualquer edição no emacs preservará e imitará os finais de linha.

Para ver realmente o que o arquivo tem, tente cat -vet , que mostra caracteres de controle, incluindo ^M , guias ( ^I ) e fim de linha ( $ ).

Observe que git pode ser configurado para converter automaticamente \r\n para \n ou vice-versa ao mover arquivos de texto entre o diretório de trabalho e o banco de dados de objetos. Veja este artigo e este artigo para verificar como seu git está configurado, globalmente e por repositório e como você pode alterá-lo.

É difícil ver como sed poderia ter introduzido o \r . Estou assumindo que você está em um sistema Unix.

Na parte superior do seu diretório de trabalho, verifique se os seguintes comandos não mostram nada:

git config core.eol
git config core.autocrlf
find . -name .gitattributes -o -name attributes

Execute o arquivo original não editado por meio de cat -vet e verifique se todos, alguns ou nenhum dos as linhas terminam com os 3 caracteres ^M$ .

    
por 18.07.2015 / 13:04

Tags