Subversion的“关键字”功能非常适合使用修订号自动标记文本文件。我真的很喜欢为Word和/或OpenOffice文档做类似的事情。
我使用Word文档尝试了这一点,方法是在“注释”文档属性字段中插入“固定宽度”关键字替换。但它似乎仍然以某种方式损坏了文档(另外我不知道在多字节字符的情况下“固定宽度”可能意味着什么)。我也不喜欢这个想法,因为将数字插入文档本身的可打印部分并不好。
我现在想象的是一个在文档打开时自动运行的宏,并更新自定义文档属性。该文档可能包含doc属性引用字段,这些字段使用doc属性中存储的值进行更新。
有没有人这样做过,或者做过其他任何事情来实现这个目标?对于Word或OpenOffice?
答案 0 :(得分:3)
首先:Embedded Version Numbers - Good or Evil?:我觉得他们很邪恶。
您不应使用技术内部修订号来表示文档的版本。
“这是我的word文档的2.2修订版”与“这是我的word文档的修订版1567”不同。
另外,如果它使用当前版本号修改文档,则仍需要提交,这意味着存储的版本将与您的宏更新的版本号不同。<登记/> 如果没有提交,那么被标记的文档总是有可能完全最初从Subversion查询的文档。
有人说......关于更新Office文档属性的更一般性问题:
该帖子update word 2003 fields automatically建议使用Office API。 Microsoft.Office.Interop不允许修改属性,但VBA API允许您访问要为给定SmartTag设置的任何CustomProperty。
本文“To add a smart tag with a custom recognizer to a Word document”为您提供了SmartTag自定义行为的示例。
智能标记是附加了类型信息的文本字符串;当符合条件的文本字符串出现在文档中时,它会被识别,用户可以执行适合该类型字符串的操作。
因此可以想象SmartTag能够识别字符串“此文档的修订版本”,自定义行为为“我将向SVN查询正确的修订版号并显示它”
答案 1 :(得分:1)
你可以试试Tobi的小脚本: http://insights.oetiker.ch/windows/SvnProperties4MSOffice/
答案 2 :(得分:1)
我们实际上使用的“系统”有点相似(由前同事创建),解决了一些问题。
欲望......
解决方案
我们没有使用svn修订号,而是使用“人”修订号作为我们的文档。为了确保我们没有多个具有相同版本号的版本,每当文档被修改时,数字会自动更新,即会有几个永远不会发布的“修订版”...猜测它并不完美... < / p>
半技术细节......
<强>结果强>
我们在打印文档中有修订号的系统:
答案 3 :(得分:0)
如果将Word文档另存为.xml(所谓的Flat OPC格式)怎么办?
然后它只是一个文本文档,svn关键字应该可以正常工作。
答案 4 :(得分:0)
VonC的回答使我确信doc-open不是更新文档属性的最佳时机。例如,如果文件通过电子邮件发送给其他人,或者复制了CD,或者“导出”,那么它在打开时无法更新其SVN版本。很难确保文件永远不会包含错误的过时版本号。因此,要“正确”执行此操作,应在SVN结帐/更新时更新文件的修订号。
我相信文本文件中的SVN关键字,客户端对文件进行“摆弄”,在结帐时更新它并在提交之前返回“规范”表单。所以对于Word来说,使用客户端钩子做同样的事情会很棒。 TortoiseSVN has client-side hooks,但我不认为其他SVN客户会这样做。在我的工作中,我们几乎总是使用TortoiseSVN,因此可以很好地工作。
所以我想做的是编写两个TortoiseSVN客户端钩子:
1)更新后挂钩,用于插入包含文件相关提交SVN修订版的“SvnRevision”文档属性。
2)预提交钩子以删除“SvnRevision”文档属性。这使得在非TortoiseSVN客户端检出文件时,存储在存储库中的文件“干净”。 (它也可以防止合并冲突?)
更新: Arrr我刚刚意识到另一个问题:如果我执行上述操作,那么SVN会认为该文件已更改。嗯这似乎很难。为了使功能正常工作,它确实需要与客户端进行相当紧密的集成。