让Mercurial和TortoiseHg支持中文文件名/UTF-8

时间:2021-09-07 20:19:07

Mercurial是优秀的分布式版本管理系统,与Git并列为最有希望的分布式VCS。TortoiseHg模仿TortoiseSVN,为Mercurial提供了一个直观的操作界面,而且青出于蓝,功能更加强大和方便。

 

遗憾的是,Mercurial在Windows下不能很好的支持非英文文件名和目录名。Mercurial在Windows下使用系统编码,在简体中文系统中使用GB2312作为文件名编码。这带来两个问题:

  • 创建的库不能在其他语言(如繁体中文)的Windows系统上使用,反之亦然。非ASCII的文件名都会出现乱码,或者提示出错。
  • 创建的库不能在Linux下使用,反之亦然。

实际上,在Linux系统上不存在此问题,因为Linux下默认使用UTF-8编码,完全支持Unicode。

 

FixUTF8是一个Mercurial的扩展插件,力图解决Windows下多语言文件名的问题。可惜的是,插件还不完善,存在部分问题,如merge会出错。我修改了部分常见问题,并创建了一个分支:http://bitbucket.org/tinyfish/hg-fixutf8。当前版本在激活mq插件的同时工作得不错,大部分常用命令可以正常使用。激活扩展插件需要修改%USERPROFILE%\mercurial.ini,加入如下内容:

[extensions]

fixutf8=D:\hg-fixutf8\fixutf8.py

mq=


虽然Mercurial的命令行设计得不错,但与TortoiseHg相比就是不够易用了。很遗憾的发现,TortoiseHg当前不支持FixUTF8扩展,并且曾经声称不会支持……只好自力更生了。我对TortoiseHg做了一些修改,特别是ShellExt,使其完整的支持Unicode。经测试常见功能都可以正常使用。修改代码的分支在:http://bitbucket.org/tinyfish/tortoisehg.winutf8。Downloads中有编译完成的版本,需要先安装TortoiseHg原版,然后执行压缩包中的Deploy.cmd替换文件。

 

下载页面:

http://bitbucket.org/tinyfish/tortoisehg.winutf8/downloads

 

TortoiseHg截图:

让Mercurial和TortoiseHg支持中文文件名/UTF-8