簡體   English   中英

git:編輯文件導致^ M在使用git diff時出現

[英]git: editing a file cause ^M to appear when using git diff

我在本地git倉庫中有幾個源文件。 這些文件是從遠程git倉庫中提取的。 當我執行“$ git status”時,我會看到以下內容:

$git status

# On branch master
nothing to commit, working directory clean

但是,當我編輯任何源文件(使用vim或gedit)時,^ M總是被添加到我添加的行的末尾。 換句話說,在我進行更改后,我看到以下內容:

$git status

# On branch master
# Changes not staged for commit: 
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   sourcefile1.c
#
no changes added to commit (use "git add" and/or "git commit -a")

$git diff sourcefile1.c
...
+ This is a test line ^M
...

我不知道為什么會這樣,但它似乎與我使用的編輯器無關,也不與git本身有關。 我知道有一種方法可以強制git忽略^ M ,但我真的想知道出了什么問題,為什么要插入這些^ M,以及如何阻止它發生。

我在Linux內核3.11.0上使用Ubuntu

我感謝任何幫助。

當你執行git-diff時,如果在行尾有一個CR(^ M),它會發出警告。 這被認為是“空白錯誤”並且默認情況下將以紅色顯示,而不管是否存在真正的差異。 您可以通過創建包含該行的.gitattributes文件來使其關閉

* whitespace=cr-at-eol

這不會影響文件內容,只是禁用git-diff的警告。

你沒有說文件最初是否有CRLF行結尾,但是Vim很可能不會在沒有警告的情況下將它從Unix轉換為DOS行結尾。 我在git中發現行結束轉換是一個真正的痛苦和混亂,只需通過添加一行就可以在.gitattributes關閉它們

* -text

這會阻止git進行任何魔法轉換,並將其留給您。

您可能希望檢查工作目錄中的所有文件,以查看它們當前具有哪些行結尾(Vim應該在狀態欄中告訴您)。 在標准化之后還可以看到幾個可以從一個轉換為另一個的git別名的Git行結尾 如果這是一個僅限Linux的倉庫,那么將所有內容一次性轉換為Unix格式可能是一個好主意。

我曾經遇到過這個問題,我能用“dos2unix”程序解決它。 我認為FDinoff是正確的,因為vim使用dos行結尾,因為該文件最初具有dos格式。 要將其更改回unix格式,請安裝dos2unix(如果您還沒有)。 對於Ubuntu,您可以通過以下方式執行此操作:

sudo apt-get install dos2unix

然后使用此命令轉換文件格式,例如

dos2unix sourcefile1.c

在此之后,如果文件格式實際上是問題,則在添加新行時不應該看到^ M.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM