最近有人在我们的Mercurial存储库中添加了PowerShell(.ps1)脚本。该文件是纯文本,但TortoiseHg似乎认为它是二进制文件并显示一条消息:“文件或差异未显示:文件是二进制文件”。
如何告诉TortoiseHg ps1文件是文本而不是二进制文件。我正在使用版本TortoiseHg 2.0.3
答案 0 :(得分:28)
文件以UCS-2编码编码,我使用notepad ++将其转换为UTF-8。
现在已经完成了,mercurial似乎将文件识别为文本并正确执行差异。
是时候再次read这个了!
由于UCS-2似乎与UTF-16密切相关,因此值得关注this。根据该链接,它可以超越它,但是自2000年以来,将Windows从UCS-2转移到UTF-16的努力一直在进行!
答案 1 :(得分:5)
很抱歉回复了一篇如此陈旧的帖子,但出于历史目的,我们会提出一些意见。
首先,底层代码库(mercurial)将所有文件视为二进制文件,直到修订版为止。你在这里失去的一切就是能够看到差异,物理差异仍然被追踪,而这些变化的本质并不是因为龟无法展示它们。 (相比之下,JPEG二进制文件即使对于小像素更改也具有较大的二进制差异;而这些文件的差异相对较小。)
其次,即使Tortoise无法显示差异,kdiff3也可以适当地设置你的mercurial.ini文件。在您的主目录中,您可能有一个mercurial.ini文件,即使只是为了记录您的用户名。如果将其展开以包含合并模式。在这里查看合并模式:http://www.selenic.com/mercurial/hgrc.5.html。
在那里,你会看到如何告诉mercurial这些文件中的差异应该用kdiff3显示,即使mercurial认为它们是二进制的。 Tortoise仍然不会在工作台上显示差异,但您可以右键单击该文件并向父级显示差异,您将看到差异就好了。它并不完美,但它总比没有好。
答案 2 :(得分:1)
使用notepad ++有助于将UCS-2编码转换为UTF-8。
但是,当我使用它来转换XML(Visual Studio csproj)文件时,不要忘记将XML编码从utf-16更改为utf-8,如:
<?xml version="1.0" encoding="utf-8"?>