Subversion跨文件关键字替换

时间:2009-04-30 13:42:12

标签: svn

我的问题是:我不想在文件“A”中显示文件“B”的最新版本号。

Subversion有一个名为“Keyword Substitution”的功能。在提交文件内容时,它使用实际值中的替换关键字。

但是有可能在文件中添加一个关键字,它将被与其他文件相关的值替换吗?如果没有,上面原始问题状态的解决方案是什么?

我想Jeff Atwood就是这么做的,就在StackOverflow网站上。如果我记得很清楚,他甚至在以前的播客中评论过它。

<script type="text/javascript" src="/content/js/master.js?v=3067"></script> 

“v = 3067”似乎是“master.js”的最新版本号。杰夫,你能帮我个忙吗? :)

2 个答案:

答案 0 :(得分:1)

我最近问了一些类似的问题 -

简短的回答是,对于SVN,你不能这样做。

您唯一真正的选择是实施构建时间解决方案来进行替换,例如:使用make或Ant(无论你使用什么)。

答案 1 :(得分:1)

嗯,这个数字可以是两件事之一:

  1. 网站存储库的HEAD修订号
  2. 对该特定文件的最后一次更改的修订号
  3. 在任何一种情况下,它都有一个特定的目的,以确保当用户获得一个带有CSS或javascript文件的网页时,如果版本号自上次更改后具有这样的版本号当用户访问同一页面时,Web浏览器将忽略该文件的本地缓存,并重新下载。

    除非您想将该引用固定在较旧的工作版本上,否则我会说您可以使用HEAD版本号更新它。这将是“安全的”,因为它会给你你想要的东西,但可能会浪费带宽,因为它会强制重新下载一个可能已经或可能没有改变的文件。

    如果您确实需要该链接的其他文件的修订号,那么我会说您应该使用小程序,自定义关键字系统和解析日志文件来推广自己的解决方案。

    例如,你可以这样做:

    rc="/content/js/master.js?v=#Rev(master.js)#"
    

    并有一个正则表达式来寻找:

    #Rev\((?<filename>[^)])\)#
    

    然后你必须从Subversion读取日志文件,你可以用XML输出它。