Mercurial:Windows和Linux之间文件名中的非ASCII字符问题

5

我在一个Samba服务器上有一个中央Hg仓库,还有两个工作副本,一个在Ubuntu上,另一个在Windows 7上。一切都很正常,直到我不小心在项目中添加了一个文件,文件名中包含俄语字母。我是在Linux下完成的。Mercurial欣然接受了它,在Linux中一切正常。然而,我发现我无法再将变更集拉到Windows上。对于hg pull,我得到了如下输出:

pulling from ...
searching for changes
adding changesets
transaction abort!
rollback completed
abort: empty or missing revlog for figures/interfDðÁsign.svg

存在问题的文件名应该是interfDеsign,其中包含Cyrillic字符“е”。

我已经在Linux中将文件重命名、提交并推送更改,甚至可以在Windows中通过hg in查看到这个更改。但我无法拉取它!是否有任何方法可以解决这个问题并使存储库再次与Windows兼容?


在Windows上,你使用的是NTFS对吧? - xanatos
2个回答

2

3
抱怨:我试用的每个版本控制系统都有一些限制,这是可能的吗?难道很难想象人们会有100MB的文件,或者希望使用Unicode来命名文件,或者希望重命名文件或复制现有文件,或者有需要进行版本控制的空目录吗?是的,我知道做一个版本控制系统是一件困难的事情,但至少你应该尝试覆盖“通常基础”,尤其是如果你不是第一个进入“市场”的人。 - xanatos
这些 .py 文件“正确”吗?第一次我尝试使用右键另存为直接下载它们。如果你使用“获取源代码”并保存 zip 文件,会更容易些。你正在使用“最新”的 hg 版本吗?我正在使用最新版本,并且在安装扩展后能够正常使用 hg(第一次文件损坏并出现错误,但当我纠正了文件后就可以工作了),但我没有 Linux 机器来运行一些测试。 - xanatos
报告结果。1)我使用的是Windows系统。2)我使用的是Hg 1.9.1版本(比较新但不是最新的)。已更新至1.9.2版本。3)我最初使用hg clone https://bitbucket.org/stefanrusek/hg-fixutf8获取了该扩展,正如建议的那样。现在我已按照xanatos的建议,通过bitbucket的“获取源代码”链接进行了操作。4)使用新的Hg和新获取的扩展后,hgrc中的扩展路径必须更改以包括py文件本身(之前只需要路径即可,尽管不知道为什么)。errno 22的问题已经消失。 - texnic
通过以上更新,文件名问题已经消失。注意:我没有更正文件名。我只是执行了 hg pull 然后执行了 hg update --clean。不知道是否符合预期以及是否需要做其他操作。但目前问题已经解决。 - texnic
1
@texnic 关于包含 filename.py 文件名的部分已经在链接页面中写明(最后:fixutf8 = path/to/fixutf8.py):-) - xanatos
显示剩余2条评论

0

我发现了另一个解决方案,或者说是一种变通方法。使用转换扩展,可以更改名字不佳的文件,即纠正很久以前犯的错误。在这种特定情况下,它运行得很好。当然,应该注意项目中没有依赖于错误命名文件,并且某些提交信息可能会失去意义。

这种方法的优点是其他人不必安装非标准扩展程序,仅仅为了能够检查包含非常错误的文件名的旧变更集。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接