您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關GIT換行符相關操作是什么,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
關于“回車”(carriage return)和“換行”(line feed)這兩個概念的來歷和區別。在計算機還沒有出現之前,有一種叫做電傳打字機(Teletype Model 33)的玩意,每秒鐘可以打10個字符。但是它有一個問題,就是打完一行換行的時候,要用去0.2秒,正好可以打兩個字符。要是在這0.2秒里面,又有新的字符傳過來,那么這個字符將丟失。
于是,研制人員想了個辦法解決這個問題,就是在每行后面加兩個表示結束的字符。一個叫做“回車”,告訴打字機把打印頭定位在左邊界;另一個叫做“換行”,告訴打字機把紙向下移一行。
后來,計算機發明了,這兩個概念也就被般到了計算機上。那時,存儲器很貴,一些科學家認為在每行結尾加兩個字符太浪費了,加一個就可以。于是,就出現了分歧。Unix系統里,每行結尾只有“<換行>”,即“\n”;Windows系統里面,每行結尾是“ <回車><換行>”,即“\r\n”;Mac系統里,每行結尾是“<回車>”。一個直接后果是,Unix/Mac系統下的文件在Windows里打開的話,所有文字會變成一行;而Windows里的文件在Unix/Mac下打開的話,在每行的結尾可能會多出一個^M符號。
Windows創建的文件是 \n\r結束的, 而Linux等類Unix操作系統是\n結束的。所以Unix的文本到Windows會出現換行丟失(ultraedit這類軟件可以正確識別); 而反過來就會出現^M的符號了
Windows等操作系統用的文本換行符和Unix/Linux操作系統用的不同,Windows系統下輸入的換行符在Unix/Linux下不會顯示為“換行”,而是顯示為 ^M 這個符號(這是Linux等系統下規定的特殊標記,占一個字符大小,不是 ^ 和 M 的組合,打印不出來的)。Linux下很多文本編輯器(命令行)會在顯示這個標記之后,補上一個自己的換行符,以避免內容混亂(只是用于顯示,補充的換行符不會寫入文件,有專門的命令將Windows換行符替換為Linux換行符)。 Unix/Linux系統下的換行符在Windows系統的文本編輯器中會被忽略,整個文本會亂成一團。
Git 的“換行符自動轉換”功能聽起來似乎很智能、很貼心,因為它試圖一方面保持倉庫內文件的一致性(UNIX 風格),一方面又保證本地文件的兼容性(Windows 風格)。但遺憾的是,這個功能是有 bug 的,而且在短期內都不太可能會修正。
問題具體表現在,如果你手頭的這個文件是一個包含中文字符的 UTF-8 文件,那么這個“換行符自動轉換”功能 在提交時是不工作的(但簽出時的轉換處理沒有問題)。我猜測可能這個功能模塊在處理中文字符 + CRLF 這對組合時直接崩潰返回了。
例子: 你在 Windows 下用默認狀態的 Git 簽出一個文件,寫了一行中文注釋(或者這個文件本來就包含中文),然后存盤提交……不經意間,你的文件就被毀掉了。 因為你提交到倉庫的文件已經完全變成了 Windows 風格(簽出時把 UNIX 風格轉成了 Windows 風格但提交時并沒有轉換),每一行都有修改(參見本文開頭的示意圖),而這個修改又不可見(大多數 diff 工具很難清楚地顯示出換行符),這最終導致誰也看不出你這次提交到底修改了什么。 這還沒完。如果其他小伙伴發現了這個問題、又好心地把換行符改了回來,然后你又再次重演上面的悲劇,那么這個文件的編輯歷史基本上就成為一個謎團了。 由于老外幾乎不可能踩到這個坑,使得這個 bug 一直隱秘地存在著。
多平臺,多 IDE,團隊協作,跨平臺開發,這是大多數項目都會面臨的問題,所以防患于未然,要在項目之初就統一好換行符(項目中技術管理是一門藝術啊!)。
團隊需要確定一個統一的換行符標準(推薦使用 UNIX 風格,因為 Git 就是使用 UNIX 換行符)
前期準備工作:配置好使用的代碼編輯器與 IDE 達到兩項標準:
在新建文件時默認使用團隊統一的換行符標準
在打開文件時保持現有換行符格式不變(不要做自動轉換)
關閉之后,Git 就不會對你的換行符做任何手腳了,你可以完全自主地、可預期地控制自己的換行符風格。
下面主要針對不同的 Git 客戶端,分別介紹一下操作方法。
由 Git 官方出品,在安裝時就會向你兜售“換行符自動轉換”功能,估計大多數人在看完華麗麗的功能介紹之后會毫不猶豫地選擇第一項(自動轉換)。請千萬抵擋住誘惑,選擇最后一項(不作任何手腳)。
如果你已經做出了錯誤的選擇,也不需要重新安裝,可以直接使用命令行來修改設置。很簡單,直接打開這貨自帶的命令行工具 Git Bash,輸入以下命令,再敲回車即可: git config --global core.autocrlf false
TortoiseGit 作為主力客戶端,實際上是基于 Git for Windows 的一個 GUI 外殼,你在 Git for Windows 所做的設置會影響 TortoiseGit 的配置。
若未安裝 Git for Windows,可在 Windows 資源管理器窗口中點擊右鍵,選擇“TortoiseGit → Settings → Git”,進行設置。
GitHub 的 Windows 客戶端實際上也是一個殼,它自帶了一個便攜版的 Git for Windows。這個便攜版和你自己安裝的 Git for Windows 是相互獨立的,不過它們都會使用同一個配置文件(實際上就是當前用戶主目錄下的 .gitconfig 文件)。
所以如果你已經配置好了自己安裝的 Git for Windows,那就不用操心什么了。但如果你的機器上只裝過 GitHub 的 Windows 客戶端,那么最簡單的配置方法就是手工修改配置文件了。
進入當前用戶的主目錄,修改 .gitconfig
文件
在 [core]
區段找到 autocrlf
,將它的值改為 false
。如果沒找到,就在 [core]
區段中新增一行: autocrlf = false
事實上上面介紹的所有命令行或圖形界面的配置方法,最終效果都是一樣的,因為本質上都是在修改這個配置文件。
關閉了換行符自動轉換,擔心文件中帶入了 Windows 的回車換行符,Git 為防止這種你的失誤,提供了換行符檢查功能(core.safecrlf
),可以在提交時檢查文件是否混用了不同風格的換行符。這個功能的選項如下:
false
- 不做任何檢查
warn
- 在提交時檢查并警告
true
- 在提交時檢查,如果發現混用則拒絕提交
我建議使用最嚴格的 true
選項。
和 core.autocrlf
一樣,你可以通過命令行、圖形界面、配置文件三種方法來修改這個選項。具體操作就不贅述了,大家自己舉一反三吧。
改為 Unix 風格的換行符
關于GIT換行符相關操作是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。