您的位置:軟件測試 > 開源軟件測試 > 開源配置管理工具 >
GitHub 第一坑:換行符自動轉(zhuǎn)換
作者:網(wǎng)絡轉(zhuǎn)載 發(fā)布時間:[ 2013/9/23 9:30:28 ] 推薦標簽:

  這個功能默認處于“自動模式”,當你在簽出文件時,它試圖將 UNIX 換行符(LF)替換為 Windows 的換行符(CRLF);當你在提交文件時,它又試圖將 CRLF 替換為 LF。

  (看明白了嗎?一個版本控制系統(tǒng)會在你不知不覺的情況下修改你的文件。這 TM 簡直酷斃了,對吧?)

  缺陷

  Git 的“換行符自動轉(zhuǎn)換”功能聽起來似乎很智能、很貼心,因為它試圖一方面保持倉庫內(nèi)文件的一致性(UNIX 風格),一方面又保證本地文件的兼容性(Windows 風格)。但遺憾的是,這個功能是有 bug 的,而且在短期內(nèi)都不太可能會修正。

  問題具體表現(xiàn)在,如果你手頭的這個文件是一個 包含中文字符的 UTF-8 文件,那么這個“換行符自動轉(zhuǎn)換”功能 在提交時是不工作的(但簽出時的轉(zhuǎn)換處理沒有問題)。我猜測可能這個功能模塊在處理中文字符 + CRLF 這對組合時直接崩潰返回了。

  這可能還不是的觸發(fā)場景(畢竟我沒有太多精力陪它玩),但光這一個坑已經(jīng)足夠了。

  踩坑

  這是一個相當大的坑,Windows 下的中文開發(fā)者幾乎都會中招。舉個例子,你在 Windows 下用默認狀態(tài)的 Git 簽出一個文件,寫了一行中文注釋(或者這個文件本來包含中文),然后存盤提交……不經(jīng)意間,你的文件被毀掉了。

  因為你提交到倉庫的文件已經(jīng)完全變成了 Windows 風格(簽出時把 UNIX 風格轉(zhuǎn)成了 Windows 風格但提交時并沒有轉(zhuǎn)換),每一行都有修改(參見本文開頭的示意圖),而這個修改又不可見(大多數(shù) diff 工具很難清楚地顯示出換行符),這終導致誰也看不出你這次提交到底修改了什么。

  這還沒完。如果其他小伙伴發(fā)現(xiàn)了這個問題、又好心地把換行符改了回來,然后你又再次重演上面的悲劇,那么這個文件的編輯歷史基本上成為一個謎團了。

  由于老外幾乎不可能踩到這個坑,使得這個 bug 一直隱秘地存在著。但在網(wǎng)上隨便搜一下,會發(fā)現(xiàn)受害者不止我一個,比如 這位大哥的遭遇 要比我慘痛得多。

  防范

  首先,不要著急去整 Git,先整好自己。你的團隊需要確立一個統(tǒng)一的換行符標準(推薦使用 UNIX 風格)。然后,團隊的成員們需要分頭做好準備工作——配置好自己的代碼編輯器和 IDE,達到這兩項要求:

  在新建文件時默認使用團隊統(tǒng)一的換行符標準

  在打開文件時保持現(xiàn)有換行符格式不變(即不做自動轉(zhuǎn)換)

  這樣一方面可以大程度保證項目代碼的規(guī)范一致,另一方面,即使現(xiàn)有代碼中遺留了一些不規(guī)范的情況,也不會因為反復轉(zhuǎn)換而導致混亂。(當然,作為一個強迫癥患者,我還是祝愿所有的項目從一開始步入嚴謹有序的軌道。)

  接下來,我們可以開始調(diào)教 Git 了。我的建議是, 完全關掉這個自作聰明的“換行符自動轉(zhuǎn)換”功能。關閉之后,Git 不會對你的換行符做任何手腳了,你可以完全自主地、可預期地控制自己的換行符風格。

  下面主要針對不同的 Git 客戶端,分別介紹一下操作方法。

  Git for Windows

  這貨由 Git 官方出品,在安裝時會向你兜售“換行符自動轉(zhuǎn)換”功能,估計大多數(shù)人在看完華麗麗的功能介紹之后會毫不猶豫地選擇第一項(自動轉(zhuǎn)換)。請千萬抵擋住誘惑,選擇后一項(不做任何手腳)。

上一頁12345下一頁
軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd