我最近一直在玩弄,git
然后hg
突然我想到这种东西对文件很有用。
我有一个文档,我在 DOCX 中编辑并导出为 PDF。我尝试同时使用git
并hg
对其进行版本控制,结果发现hg
您最终只跟踪二进制文件,而差异化没有意义。虽然git
我可以有意义地区分 DOCX(还没有尝试过 PDF),但我想知道是否有比我现在做的更好的方法。(理想情况下,不必让 Word 进行比较将是最好的解决方案。)
我最近一直在玩弄,git
然后hg
突然我想到这种东西对文件很有用。
我有一个文档,我在 DOCX 中编辑并导出为 PDF。我尝试同时使用git
并hg
对其进行版本控制,结果发现hg
您最终只跟踪二进制文件,而差异化没有意义。虽然git
我可以有意义地区分 DOCX(还没有尝试过 PDF),但我想知道是否有比我现在做的更好的方法。(理想情况下,不必让 Word 进行比较将是最好的解决方案。)
这里有两个不同的概念——一个是“版本控制系统能否对文件的内容做出一些智能判断?” - 以便它可以仅存储修订之间的增量信息(并执行诸如将责任分配给文件的各个部分之类的事情)。
另一个是“我是否有一个文件比较工具,它对我在版本控制系统中拥有的文件类型很有用”。版本控制系统往往带有不如专用替代品的文件比较工具。但它们几乎总是可以链接到更好的差异程序 - 无论是针对所有文件类型还是特定文件。
因此,通常使用 Beyond Compare 作为通用比较工具,而 Word 作为专用 Word 文档比较器。
不同的版本控制系统在人们认为它们处理“二进制文件”的能力方面存在差异,但这通常与处理大文件和提供排他锁定有关,与文件比较有关。
http://tortoisehg.bitbucket.io/包含一个名为 docdiff 的插件,它集成了 Word 和 Excel diff'ing。
您可以使用 Beyond Compare 作为 hg 的外部差异工具。添加/更改您的用户 mercurial.ini 为:
[extdiff]
cmd.vdiff = c:/path/to/BCompare.exe
然后获取 docx 的 Beyond Compare文件查看器规则。
现在您应该可以在 Beyond Compare 中比较两个版本的 docx。
仅针对 docx,我在这里编译了多个地方的说明:https ://gist.github.com/nachocab/6429893
# download docx2txt by Sandeep Kumar
wget -O docx2txt.pl http://www.cs.indiana.edu/~kinzler/home/binp/docx2txt
# make a wrapper
echo '#!/bin/bash
docx2txt.pl $1 -' > docx2txt
chmod +x docx2txt
# make sure docx2txt.pl and docx2txt are your current PATH. Here's a guide
http://shapeshed.com/using_custom_shell_scripts_on_osx_or_linux/
mv docx2txt docx2txt.pl ~/bin/
# set .gitattributes (unfortunately I don't this can't be set by default, you have to create it for every project)
echo "*.docx diff=word" > .git/info/attributes
# add the following to ~/.gitconfig
[diff "word"]
binary = true
textconv = docx2txt
# add a new alias
[alias]
wdiff = diff --color-words
# try it
git init
# create my_file.docx, add some content
git add my_file.docx
git commit -m "Initial commit"
# change something in my_file.docx
git wdiff my_file.docx
# awesome!
它在 OSX 上运行良好
如果您碰巧使用 Mac,我编写了一个 git merge 驱动程序,它可以使用 Microsoft Word 并跟踪更改以合并和显示 Word 可以读取和写入的任何文件类型之间的冲突。
http://github.com/jasmas/wordMerge
我说“如果你碰巧使用 Mac”是因为我编写的驱动程序使用 AppleScript,主要是为了完成这项任务。
在项目中添加一个 vbscript 版本会很好,但目前我没有用于测试的 Windows 环境。任何具有一些基本脚本知识的人都应该能够看看我在做什么,并在 vbscript、powershell 或 Windows 上的任何东西中复制它。