Preciso modificar as fontes no controle de versão do Git. As fontes são arquivos de projeto do Visual Studio, o que os torna nativos da Microsoft. Eu queroevitarproblemas de espaço em branco, incluindo jogos de finalização de linha.
Eu olhei os arquivos antes da modificação no emacs, e o^M
claramente 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 faço uma substituição sem adicionar espaços em branco estranhos?
Responder1
Hoje em dia, o emacs detectará automaticamente os finais de linha usados em um arquivo e, portanto, você não verá se um arquivo possui \n
ou \r
ou \r\n
finais de linha. Quaisquer edições no emacs preservarão e imitarão os finais de linha.
Para realmente ver o que o arquivo contém, você pode tentar cat -vet
mostrar caracteres de controle, incluindo ^M
, guias ( ^I
) e o final da linha ( $
).
Observe que git
pode ser configurado para converter automaticamente \r\n
ou \n
vice-versa ao mover arquivos de texto entre o diretório de trabalho e o banco de dados de objetos. Veja issoartigoe istoartigopara 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
. Presumo que você esteja em um sistema Unix.
No topo 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 cat -vet
e verifique se todas, algumas ou nenhuma das linhas terminam com os 3 caracteres ^M$
.