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

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

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

  缺陷

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

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

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

  踩坑

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

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

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

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

  防范

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

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

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

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

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

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

  Git for Windows

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

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