2021-05-12 14:32:11
消除Git diff中^M的差異
在Windows上把一個剛commit的資料夾上傳到了Ubuntu。在Ubuntu上使用git status
檢視,發現很多檔案都被紅色標注,表示剛剛修改未add。在Windows上明明是working tree clean
,同一個資料夾用FTP傳到了Ubuntu,怎麼會修改檔案內容呢?
於是,用git diff
檢視檔案差異,每一行結尾都有^M
標註。百度了一下,了解了原因:
這是由於換行符在不同的作業系統上定義的區別造成的。
Windows用CR LF來定義換行,Linux用LF。CR全稱是Carriage Return ,或者表示為r, 意思是回車。 LF全稱是Line Feed,它才是真正意義上的換行表示符。為什麼Windows新增一個CR和LF組合表示,我並不清楚。不過如果用git diff的時候看到^M字元,就說明兩個檔案在換行符上有所差別。
比如從我的Windows開發的同時那邊拿來一個目錄,就會發現幾乎所有的檔案都被修改過了。其實並不是這樣,都是由於檔案多了CR後造成的。
GitHub的幫助網站上給出了一種**解決方案**:
在Windows的資料夾上新建一個
.gitattributes
檔案檔案內容如下:
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto
# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.c text
*.h text
# Declare files that will always have CRLF line endings on checkout.
*.sln text eol=crlf
*.css text eol=crlf
*.js text eol=crlf
*.md text eol=crlf
*.txt text eol=crlf
*.sql text eol=crlf
*.php text eol=crlf
# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
其中,幫助網站上有詳細介紹了
text
關鍵字。eol=crlf
表示使用CRLF換行。根據Ubuntu上哪些型別的檔案被標紅, 便在
.gitattributes
上將text
屬性設定為eol=crlf
。儲存檔案。
檢視一下狀態:
git status
,發現.gitattributes
修改未暫存暫存:
git add .gitattributes
提交:
git commit -m "Add a .gitattributes file
接下來上傳到Ubuntu上,
.gitattributes
就發揮了作用。使用git status
檢視,整個工作區都清靜了。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2016-10/136329.htm
相關文章