如何告诉 TortoiseHg 文件不是二进制文件?

Posted

技术标签:

【中文标题】如何告诉 TortoiseHg 文件不是二进制文件?【英文标题】:How do I tell TortoiseHg that a file is not binary? 【发布时间】:2011-08-10 04:17:02 【问题描述】:

最近有人向我们的 Mercurial 存储库添加了 PowerShell (.ps1) 脚本。该文件是纯文本文件,但 TortoiseHg 似乎认为它是二进制文件并显示一条消息:“未显示文件或差异:文件是二进制文件”。

如何告诉 TortoiseHg ps1 文件是文本文件而不是二进制文件。我使用的是 TortoiseHg 2.0.3 版本

【问题讨论】:

我很想看到一个不依赖于更改文件编码的答案。我们跟踪一个我们无法更改的商业工具的项目文件,并将文件保存在 UCS-2 中; TortoiseHg 声称这些文件是二进制文件,并选择不显示差异。 @ChrisPhillips - 如果您能找到|write 用于无人值守重新编码文件的工具,您可以(尝试)对这些文件使用encode|decode tricks 【参考方案1】:

文件采用 UCS-2 编码,我使用 notepad++ 将其转换为 UTF-8。

现在完成了,mercurial 似乎将文件识别为文本并正确执行差异。

是时候再次read这个了!

this 可能也值得一看,因为 UCS-2 似乎与 UTF-16 密切相关。根据该链接,它已经超越了它,但从 2000 年之前就一直在努力将 Windows 从 UCS-2 迁移到 UTF-16!

【讨论】:

【参考方案2】:

很抱歉回复了这么久的帖子,但出于历史目的,一些 cmets 是有序的。

首先,底层代码存储库 (mercurial) 将所有文件视为二进制文件,就修订而言。您在这里失去的只是查看差异的能力,仍然跟踪物理差异,并且由于乌龟无法显示它们,这些变化的性质并没有变得更大。 (相比之下,JPEG 二进制文件即使对于小的像素变化也有很大的二进制差异;而这些文件的差异相对较小。)

其次,即使 Tortoise 无法显示差异,如果您正确设置 mercurial.ini 文件,kdiff3 也可以。在您的主目录中,您可能有一个 mercurial.ini 文件,即使只是为了记录您的用户名。如果将其扩展为包含合并模式。在此处查找合并模式:http://www.selenic.com/mercurial/hgrc.5.html

在那里,您将看到如何告诉 mercurial 应该使用 kdiff3 显示这些文件中的差异,即使 mercurial 认为它们是二进制的。 Tortoise 仍然不会在工作台上显示差异,但是您可以右键单击文件并向父级显示差异,您会看到差异很好。它并不完美,但总比没有好。

【讨论】:

【参考方案3】:

使用 notepad++ 有助于将 UCS-2 编码转换为 UTF-8。

但是,当我使用它时,例如转换 XML (Visual Studio csproj) 文件,不要忘记将 XML 编码从 utf-16 更改为 utf-8,例如:

<?xml version="1.0" encoding="utf-8"?>

【讨论】:

以上是关于如何告诉 TortoiseHg 文件不是二进制文件?的主要内容,如果未能解决你的问题,请参考以下文章

TortoiseHG:添加目录树中的所有文件

当我进行初始提交时,出现错误 255。 Mercurial TortoiseHg

如何让 Windows 上的 TortoiseHg (Mercurial) 使用生成的私钥文件(由 Puttygen 生成)?

你如何获得最新版本的TortoiseHg

TortoiseHg:删除被忽略的文件

如何使用TortoiseHg工作台连接到存储库?