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

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

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

  缺陷

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

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

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

  踩坑

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

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

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

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

  防范

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

  在新建文件時默認(rèn)使用團(tuán)隊(duì)統(tǒng)一的換行符標(biāo)準(zhǔn)

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

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

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

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

  Git for Windows

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

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