Mercurial 的中文檔名編碼問題

記錄一下對 Mercurial 測試中文檔名的結果。目前看起來似乎是有工具可以減少出問題的機會....

上一篇有網友點出 Mercurial 在處理檔案名稱的時候,某些中文字可能還是會有問題,例如:許、功、蓋。我實際測試了一下,的確如此。

後來我用 TortoiseHg 搭配 Win32MbcsExtension,發現先前碰到的中文檔名問題沒了。但是否所有中文檔名都能正確處理?我想還是沒能達到百分之百。

註:Git 目前在 Windows 環境下已經能正確處理中文檔名--至少我的測試結果是如此。

狀況描述

先前沒發現,是因為當我用 hg add 加入檔案,然後 hg commit 提交,最後以 hg push 推送的過程中都沒有出現任何錯誤訊息,而且大部分含有中文檔名的檔案都確實提交成功了。

少數沒有提交成功的檔案,檔名裡面可能有「許功蓋」等中文字。在使用 hg commit 命令來提交檔案時,這些檔案會被略過,而不是出現錯誤訊息。若針對這些檔案再次執行 commit 命令時,Mercurial 會顯示:「Nothing changed」。這會讓人以為所有的檔案都已經提交成功了。

使用 Win32MbcsExtension

後來發現有個外掛:WinMbcsExtension,就試了一下。

先到檔案庫所在資料夾上點右鍵,選 TortoiseHg > Global Setting 或 Repository Settings。在左邊面板中點選 Extensions,然後將右邊的 win32mbcs 項目打勾。參考下圖:


設定完成後,將所有 TortoiseHg 視窗關閉,之後再使用 TortoiseHg 或 hg 命令列來加入、提交、推送檔案,那些檔名包含「許功蓋」的檔案似乎都能正常處理了。參考下圖:


下圖是以 TortoiseHg 來提交檔案的畫面:


在啟用 Win32MbcsExtension 外掛之前,TortoiseHg 在 commit 這幾個檔案時都會出現錯誤訊息。現在都能順利提交了。

可是,這只限於 Windows 平台之間的檔案交換,對吧?

跨平台實驗

我試過把檔案庫用 hg clone 複製到 Windows 作業系統的其他資料夾,檔名都正常。可是如果把檔案推送至其他作業系統呢?例如我將檔案推送至 Bitbucket 伺服器,然後到 Butbucket 網站上查看檔案清單,結果如下圖:


有的中文檔名顯示正確,有的變成亂碼。但這似乎只是顯示上的問題而已,因為我後來又從 Butbucket 伺服器 clone 一份檔案庫回來,結果取回的檔案名稱都是正確的。

小結

網路上還找得到其他方案,例如 fixutf8,但我懶得試了,就先這樣頂著用看看。

其實這種加外掛的解決方案,我自己用起來還是「毛毛的」,畢竟很難保證百分之百解決。為了在 Bitbucket 網頁上也能看到正確檔名,我還是寧願把中文檔名全部換成英文檔名,比較安心。

1 則留言:

  1. Win32Mbcs算是眼下的正解。不跨平台的話基本上沒問題。

    因為 Mercurial 處理檔名編碼的做法就是「不處理」,所以Windows下用Big5命名的中文檔名,會被原封不動地用Big5推進版本庫。用非Big5平台去瀏覽就會看到亂碼(如網頁/Linux)。

    單就這點Git的確做的比較好。

    回覆刪除

技術提供:Blogger.
回頂端⬆️