我需要修改 Git 版本控制下的來源。來源是 Visual Studio 專案文件,這使得它們成為 Microsoft 原生的。我想要避免空格問題,包括行尾遊戲。
我在emacs下查看了修改前的文件,^M
顯然不存在。
然後我從 Linux 機器上的腳本執行了以下命令:
sed -i 's/odbc32.lib //g' *.vcproj
sed -i 's/odbccp32.lib //g' *.vcproj
當我看到這些變化時:
$ 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"
...
如何在不添加無關空格的情況下執行替換?
答案1
如今,emacs 會自動偵測檔案中使用的行結尾,因此您將看不到檔案是否有\n
或\r
或\r\n
行結尾。 emacs 中的任何編輯都將保留並模仿行結尾。
要真正查看文件的內容,您可以嘗試cat -vet
顯示控製字符,包括^M
、製表符 ( ^I
) 和行尾 ( $
)。
請注意,git
可以配置為在工作目錄和物件資料庫之間移動文字檔案時自動轉換\r\n
為\n
或反之亦然。看到這個文章和這個文章檢查你的 git 是如何配置的,全域和每個儲存庫以及如何更改它。
很難看出如何sed
引入\r
.我假設你使用的是 Unix 系統。
在工作目錄的頂部檢查以下命令是否未顯示任何內容:
git config core.eol
git config core.autocrlf
find . -name .gitattributes -o -name attributes
運行原始的未編輯檔案cat -vet
並檢查是否所有、部分或沒有行以 3 個字元結尾^M$
。