Edite o arquivo no local sem modificar as terminações da linha


0

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. Quero evitar problemas de espaço em branco, incluindo jogos de final de linha.

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

Em seguida, 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 olho para as mudanças:

$ 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 executo uma substituição sem adicionar espaços em branco externos?

Respostas:


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 tem \nou / \rou \r\nterminações de linha. Quaisquer edições no emacs preservarão e imitarão os finais da linha.

Para realmente ver o que o arquivo possui, você pode tentar o cat -vetque mostra os caracteres de controle ^M, incluindo tabs ( ^I) e o final da linha ( $).

Note-se que gitpode ser configurado para converter automaticamente \r\npara \nou vice-versa, quando se movendo arquivos de texto entre o diretório de trabalho e banco de dados objeto. 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 sedpoderia ter introduzido o \r. Estou assumindo que você esteja em um sistema Unix.


Na parte superior do 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 cat -vete verifique se todas, algumas ou nenhuma das linhas termina com os três caracteres ^M$.


"Estou assumindo que você esteja em um sistema Unix ..." - sim (mais ou menos). Estou em um sistema Linux, não no Unix: "...
executei

Para voltar à pergunta original: "Como executo uma substituição sem adicionar espaços em branco externos?" . Eu não acho que isso seja fornecido em sua resposta.
JWW

Na parte superior do diretório de trabalho, você pode tentar os seguintes comandos: git config core.eol git config core.autocrlf find . -name .gitattributes -o -name attributese se eles mostrarem alguma coisa, adicione os resultados à sua pergunta. Além disso, cat -vet cryptest.vcprojantes da edição mostra as terminações de linha como 3 caracteres ^M$em todas as linhas, apenas algumas ou nenhuma.
Meu19 /
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.