git 換行問題 Git 處理換行符問題

2021-10-12 15:22:54 字數 1725 閱讀 9831

ps:最近又換回了 linux mint,作為乙個 linux 桌面黑,有點尷尬。。。:)

換行符是 *nux 與 windows 系及其他系的各種不相容問題的代表之一,於是,在不同平台使用 git 時經常碰到 git status 列出一大串修改過的檔案,git diff 檢視一下其實只是換行符問題。不多扯了,直接上解決方案:

方案1: 增加 .gitattribute 檔案

在 repo 目錄下新建 .gitattribute 檔案,內容為:

* text eol=lf

方案2: 修改 git 配置

git config --global core.autocrlf false

git config --global core.safecrlf true

如果只需要修改當前倉庫,去掉 --global。

方案3: 行政命令

下令:一律使用 unix 換行符,違者男的穿裙子,女的不許穿!

參考:問題:

windows 下使用 git 沒問題,在 cygwin **現檔案全部被修改問題。執行 git diff 看到變化是 ^m,即 linux 與 win 的換行符區別。

解決:git config --global core.autocrlf true

關於換行符 git 有兩個重要的配置,如下:

換行符的問題 autocrlf and safecrlf

windows(rn)、linux(n)和macos(r)三個主流系統的換行符各不相同,這樣在跨平台合作的時候就容易出現換行符的問題。

git 提供了 autocrlf 和 safecrlf 兩個引數來解決這個問題。但這兩個引數如果沒用好,就會影響開發。

例如,出現這種情況:

a和b兩個開發人員,a使用lf(n)做換行符,b使用crlf(rn)做換行符,且都沒有開啟 autocrlf 引數,那麼a在遷出b的檔案,並使用自己的編輯器開啟之後就會發現,雖然沒有對檔案做任何修改,但它的狀態是modified。這是由於a的編輯器自動將b的檔案中的所有換行符替換成了(lf),這與版本庫中的(crlf)不同。

讓我們來看看 autocrlf 引數的作用:

# 簽出時將換行符轉換成crlf,籤入時轉換回 lf。

git config --global core.autocrlf true

#簽出時不轉換換行符,籤入時轉換回 lf

git config --global core.autocrlf input

#簽出簽入均不轉換

git config --global core.autocrlf false

這些選項在torgoisegit中也可以設定。

我的建議是在無論在什麼系統下程式設計,都把所有人的編輯器的換行符模式設定成unix格式,然後把autocrlf設定成false,這樣一勞永逸。

畢竟除了windows記事本這類軟體外,已經很少有文字編輯器不支援換行符設定了。

如果你把換行符搞亂了,在乙個檔案中既包含windows風格的換行符也包含unix風格換行符,那麼 safecrlf 就可以發揮作用了:

# 拒絕提交包含混合換行符的檔案

git config --global core.safecrlf true

# 允許提交包含混合換行符的檔案

git config --global core.safecrlf false

# 提交包含混合換行符的檔案時候給出警示

git config --global core.safecrlf warn

git 換行問題 git 換行符問題

最近在windows下使用git,發現不時沒有修改過的檔案要提交,對比發現檔案全部修改,但找不到不一樣的地方,baidu後懷疑是換行符的問題,因為windows和linux的換行符不一樣,這個和git客戶端配置有關係,如果每個人客戶端配置不一樣同樣會出現該問題.關於不同系統的換行符問題 unix l...

Git 換行符自動轉換問題

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!以前都是在linux上工作,所以在使用git的時候沒有碰到檔案行分隔符的問題,現在突然轉到windows上使用git,發現原來是unix檔案行結束符的檔案在使用git diff的時候顯示檔案所有行都被修改。導致這個問題的原因是git自作聰明的 換行...

git換行符自動轉換

將專案從svn上遷移到git遇到了乙個問題,就是git clone專案,發現金鑰之類的檔案比原來要大了,金鑰檔案也沒有辦法使用了。後來發現 當你clone檔案時,git試圖將unix換行符 lf 替換為windows的換行符 crlf 當你在提交檔案時,它又試圖將crlf替換為lf。解決這個問題很簡...