2010-09-03 130 views
1

我在我的SVN项目中有revision.txt文件。如何在未提交此文件的每次提交的未修改文件中更新修订号?

基本上我希望当我调用svn ci时,该文件会自动更新,并提供工作副本在提交后的版本号。

例如:

  1. revision.txt包含 “10”
  2. 我做出一些改变我的工作拷贝(其他文件,而不是rev​​ision.txt)
  3. SVN CI
    • 启动挂钩脚本
    • 阅读下一修订版编号
    • 更新revision.txt
    • 提交更改(也revision.txt)
  4. 现在revision.txt已经承诺与版本号11

我试着不带钩子脚本成功。在提交之前,我无法检索下一个版本号并更新交易者。

然后尝试使用“自动道具”,但它们只与修改过的文件一起工作。 更好的解决方案是只使用钩子脚本,而不是使用包装脚本来检查修订和更新。

可能吗?欢迎举例

回答

2

由于竞争条件,您无法在提交前猜出下一个版本号 - 直到事实发生之前,您不能保证别人没有领先于您。在svn commit hook中更改文件也是非常糟糕的形式 - 工作副本的所有过时和杂乱,因为它们只从服务器获得“它的工作”或“失败”,从来没有“工作,但通过该文件现在有这些内容的方式...“

你需要什么?也许还有另一种方法来获得你想要实现的目标。

您可以在需要之前使用“svn info”自动生成revision.txt文件,并将“Revision:”行过滤到文件中。

+0

我有一个有多个用户(uh..SVN!:)的中央存储库,并且该文件由软件直接读取,以在交付时显示版本附近的最新版本。人们永远不会记得更新号码,我们还没有一个部署系统。所以我们导出项目并在最终服务器上手动复制它。 好的......我需要一个严肃的部署策略...... – yuri 2010-09-03 15:50:23

+0

正如我在我自己的回答中所说的,你应该使用'svnversion'而不是'svn info'。 – 2010-09-07 16:43:22

0

正如你已经提到的基于svn:关键字,它只能改变修改后的文件。但我认为你需要的是一个处理这种信息的构建系统(可能是构建服务器/连续集成服务器)。

0

Keyword substitution最接近你想要的,但这并不真正有效,因为它给你的是文件的最后修改,而不是项目的最后修改。从subversion FAQ on this issue:

你想(你的工作拷贝修订 )的信息是从命令可用 svnversion,如果;它会给出 有关给定路径的工作副本的修订级别 的信息(有关详细信息,请参阅 svnversion --help)。

您可以将它合并到您的版本 或发布过程中,以获取您需要的 信息到源 本身。

相关问题