【问题标题】:SVN version number into specific files after any revision change任何修订更改后将 SVN 版本号写入特定文件
【发布时间】:2014-03-08 20:44:13
【问题描述】:

在我们的项目中,我们收到了将 SVN 根修订号(不是最后修改的修订号)放入我们的 lib 标头的请求,并在库中提供了一个函数,该函数将给出最后一次提交的修订号。

我已经找到了this question,所以我知道$Id$$Revision$。我不知道是否可以在每次提交后强制 SVN(无需额外脚本)更新某些特定文件(标题和 .cpp)。

例如:我修改了一个 .cpp 文件并提交了它,但是在提交之后不仅会更新修改后的 .cpp 文件,还会更新 lib 头文件和一个带有提交修订号的小 .cpp 文件。

此请求的目的是为我们的图书馆用户提供检查代码修订号的可能性,即使他们将文件复制到无法访问 SVN 的地方。

更新:编译将在SVN不可用的环境中进行。

【问题讨论】:

  • 你可以看看 subversion 中的“钩子”,它允许在提交后运行任意代码。但这意味着创建一个签出,通过工具 slike ed` 或 awk 更改版本号,然后再次签入,所有这些都是自动的。我怀疑这是一个好的和可靠的策略。我第二个@Blorgbeard,您应该考虑将此类功能集成到您的构建系统中。只需编写一个您在提交之前运行的脚本

标签: svn version-control revision revisions


【解决方案1】:
  1. 请使用标准术语和定义以获得明确的答案 - “SVN 根修订号”在正常的 SVN 世界中是未知的。是“存储库的全局修订 ID”吗?
  2. SVN 关键字是文件特定的,与全局修订号无关
  3. 你不能强行提交修改过的文件,但是你可以在提交相关文件后在 post-commit 钩子中提交这些需要的文件(有一些技巧)(但请记住,.cpp 和 @987654325 中的 $Revision$ @ 将是至少真实来源的Revision+1 - 可以超过+1,if post-commit hook不会阻止提交在执行期间)
  4. 您可以在您的代码和源代码中获取和使用 Repo-Revision,而无需 svn:keywords 和|或钩子和额外的提交:在构建过程中进行一项额外操作并在 .cpp 和 @ 中引入一些更改的成本987654327@ 在存储库中。阅读 SubWCRev,它是 TortoiseSVN 的一部分(具有附加值的 linux 等效项:SvnRev)并参见 Keyword usage example,请注意“提示”中的建议。 SvnRev 工作流程略有不同 - 它不处理模板,而是构建标头,必须包含在适当的位置

【讨论】:

    【解决方案2】:

    在我们的 C/C++ 项目中,我们混合了两种不同的方法:

    1/ Make 使用 subwcrev 和一个输入文件:version_info.src 生成一个包含文件 version_info.inc - 这包含在我们的代码中。

    static cstring_t LastCommitDate = "@(#)SVN Info: Highest Commit Date $WCDATE=%H:%M %a %d-%b-%Y$";
    static cstring_t InfoGenerated  = "@(#)SVN Info: Generated $WCNOW=%H:%M %a %d-%b-%Y$";
    static cstring_t VersionRange   = "@(#)SVN Info: Built From Revision $WCRANGE$";
    static cstring_t MixStatus      = "@(#)SVN Info: $WCMIXED?Mixed:Single$ Revision";
    static cstring_t ModStatus      = "@(#)SVN Info: $WCMODS?Has:No$ Local Modifications";
    #define CURRENT_REV_NUMBER $WCMIXED?0xffff:((uint16_t)$WCRANGE$)$
    $WCMIXED?#define _MIXED_REV_BUILD_:$
    $WCMODS?#define _BUILD_INCLUDES_MODIFICATIONS_:$
    #ifdef _DEBUG_
    #else
    $WCMODS?#error *** SVN - Local Modifications Are NOT Permitted Within A Release Build! ***:/* SVN - OK for Release No Local Modifications */$
    $WCMIXED?#error *** SVN - Mixed Revisions Are NOT Permitted Within A Release Build! Please Run a svn update!***:/* SVN - OK for Release Single Revision */$
    #endif
    

    这包括我们的版本信息,不会让我们使用修改后的代码进行发布构建。

    2/ 在我们的一些项目中,我们使用 python 和构建脚本中的 svn 绑定来生成包含文件所需的版本信息。这更强大,因为它可以检查构建使用但尚未添加到存储库的文件是否存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      • 2010-12-21
      • 1970-01-01
      • 2011-04-24
      • 2013-07-16
      • 2011-03-02
      • 2013-07-16
      相关资源
      最近更新 更多