问题
如果搜索git 中文文件名,搜到大堆的配置选项指导,如ls显示中文文件名,comment/log支持中文,等等,都是linux下可用。Windows下mysGit目前还没有直接支持中文文件名的。见 http://code.google.com/p/msysgit/issues/detail?id=80 韩国人提交的utf-8文件名问题从2008年到现在都没有处理(当人也有中国人提过类似的问题,合并到这个最早的来了).
开发人员认为优先级低,关注的人不够,有人提交了补丁也没有人验证处理...可见这个项目还没有什么亚洲人(中日韩)参与。
原因
原因还是字符编码的问题,git直接用UTF-8编码处理文件名,但是Windows是Unicode的,这个中间没有转换。见http://doyle.is-programmer.com/posts/10855.html
暂时解决办法
还没有人来直接解决的话,只有寻找“曲线救国”的方法,受这位哥们的提醒,通过网络共享解决: http://hi.baidu.com/likai3g/blog/item/cc2612c4e88473a28326ac69.html
让samba之类的网络协议去转换,我用的是colinux。就像在linux下访问windows共享文件一样,没问题
mount -t cifs -o username=xx,passord=yyy,iocharset=utf-8,uid=uuu,gid=uuu //server/share /mnt
//server/share是windows的共享目录
username/passord是访问共享目录的用户密码,是windows上的用户,不用在linux上建这个用户
uid=,gid=是配置共享目录在linux上所属的用户和组,是linux系统用户,不用在samba配置用户。
也就是说在这里不仅配置了字符集转换(linux的utf-8与unicode转换),而且配置了用户的转换,windows上//server/share共享给用户xxx,到linux上通过用户uuu可以访问/mnt
-
见man mount.cifs的说明,这个iocharset专门用来处于与server的unicode路径名称转换的。
iocharset
Charset used to convert local path names to and from Unicode. Unicode is used by default for network path names if the server supports it. If iocharset is not specified then the nls_default specified during the local client kernel build will be used. If server does not support Unicode, this parameter is unused.
colinux的cofs还不支持charset转换,也有人提过问题,但没处理...
通过samba共享的方式,已经可以用git svn来取svn的版本库了
还有问题?
可能有个问号出来了,都文件共享了,Git库建在linux上,再给Windows共享不就行了吗?
可能的一个原因是确实受不了svn的某些方面了,而且多数时候是在Windows下操作,操作版本库毕竟是少数,这时就不用一直开着linux了
接着可能出现samba相关的一些flush相关问题,如 http://code.google.com/p/msysgit/issues/detail?id=130
说明还是有不少人在用这个方式来在windows下尝试用Git,而且还有用git svn来在svn版本库下使用
不知道这个方法能否解决所有类似问题,我是在尝试cofs的时候搜到这个 http://marc.info/?l=git&m=123797834905157&w=2 时,core.fsyncobjectfiles = true 这个选项就配上了
Windows下的Git默认不支持中文文件名,由于字符编码问题导致。一个临时解决方案是通过网络共享,利用Samba进行UTF-8与Unicode的转换。用户可以使用Colinux挂载Windows共享目录,实现Git操作。然而,这种方法可能存在Samba的flush问题和其他兼容性挑战。

413

被折叠的 条评论
为什么被折叠?



