Mercurial和Word或PDF文档

31

是否可以使用Mercurial版本控制来跟踪Word或PDF文件?是否存在任何限制或问题?

4个回答

58

可以。

你将能够为MS Word文档进行有意义的差异比较。

  • 如果你已经安装了TortoiseHg并且设置了一个存储库,

    右键单击要检查差异的文件。

  • 在上下文菜单中,点击TortoiseHg > Visual Diffs。

  • 在Visual Diffs对话框中,选择docdiff,而不是kdiff3。

  • 在Visual Diffs对话框中双击文件。

MS Word将打开一个比较结果Word文档,显示当前版本和先前版本之间的更改作为已跟踪的更改。


非常酷!一个问题:我只能在有未提交的更改时进行视觉差异比较,它只会将我的当前更改与上次提交进行比较。是否有一种方法可以指定要比较的两个版本? - Jason Down
您可以右键单击任何修订版本并执行“与本地文件比较”@JasonDown,以便与当前工作目录进行比较。 - Edward

6

是的,但你当然无法以任何有意义的方式进行差异化比较。因此,在合并过程中这些文件将被视为二进制文件。

Mercurial 完全可以跟踪二进制文件:

Mercurial通常不会对文件内容做出任何假设。因此,Mercurial的大多数功能都能很好地处理任何类型的文件。

无论文件类型如何,Mercurial都会存储二进制差异。 PDF/Word文件的问题在于对它们进行微小更改通常会导致其在磁盘上的二进制表示发生巨大变化。.docx文件以zipped xml格式存储,由于压缩,存档内部的单个位反转就足以使zip存档看起来完全不同。

如果您的仓库不会太大,那么使用Mercurial时可能不会遇到任何问题。


1
除非二进制文件的小改动会导致大的二进制变化,否则每个版本的二进制差异将与文件大小相同。我会使用XML格式而不是二进制格式。 - jk.
1
@jk:你说得对,事实上我假设他使用的是Office 2007格式,唯一的问题是据我所知它在内部被压缩了。但人们往往会过于频繁地责怪版本控制系统不能正确处理二进制文件。 - Johannes Rudolph
2
如果我使用“另存为”将Word文件保存为XML格式,会怎样? - andrew0007
1
然后您将在hg中获得高效的存储,并且可以概念上使用普通文本合并来合并文档,虽然似乎有特殊的单词合并工具可用,这些工具可能(或可能不)更好。 - jk.

6

小心建议

cmd.pdfdiff = [\path\to\diffpdf.exe]
opts.pdfdiff= -a $local $other

在extdiff环境中,$local和$other没有任何意义。而是将字符串"$local"和"$other",而不是文件名,传递给"diffpdf.exe"。我曾经吃了这个亏。

cmd.pdfdiff = [\path\to\diffpdf.exe]
opts.pdfdiff= -a

将会生效,两个文件将作为参数跟随“-a”传递。参考 https://www.mercurial-scm.org/wiki/ExtdiffExtension 页面的解释,每个自定义 diff 命令分为两部分:“cmd” 和 “opts”。 cmd.xxx 选项定义了将要运行的可执行程序的名称,并且 opts.xxx 定义了一组命令行选项,这些选项将被插入到命令中的程序名称和要进行差异比较的文件/目录之间。

1

对于PDF文件,我能够使用GPL许可的DiffPDF来比较不同版本的PDF文件。

我在我的mercurial.ini文件中添加了以下内容:

[extdiff]
cmd.pdfdiff = [\path\to\diffpdf.exe]
opts.pdfdiff= -a $local $other

[diff-patterns]
**.pdf=pdfdiff

现在当我在tortoisehg中点击pdf文件(或在cmd行中使用),它会打开两个文件进行比较。由于我的pdf文件往往包含图像,因此我使用外观比较器(中的-a)。如果您主要处理文本,则可以改用-w

它默认使用高亮显示来显示差异。我更喜欢使用“Src Xor Dest”选项来显示差异,但我不认为有一个命令行选项可以实现这一点。


3
DiffPDF不是GPL许可证:DiffPDF是一个商业的Windows图形用户界面(GUI)应用程序... - Robert Boehne

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