1

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

我已经找到了这个问题,所以我知道$Id$or $Revision$。我不知道是否可以在每次提交后强制 SVN(没有额外的脚本)更新一些特定的文件(头文件和.cpp )。

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

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

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

4

2 回答 2

0
  1. 请使用标准术语和定义以获得明确的答案 - “SVN 根修订号”在正常的 SVN 世界中是未知的。是“存储库的全局修订 ID”吗?
  2. SVN 关键字是文件特定的,与全局修订号无关
  3. 您不能在已更改的情况下强制提交未更改的文件,但您可以在提交相关文件后在 post-commit 挂钩中提交这些所需的文件(使用一些技巧)(但请记住,这些文件中的 $Revision$.cpp并且至少.h为Revision+1真实来源 -如果提交后挂钩在执行期间不会阻止提交,则可以超过 +1 )
  4. .cpp您可以在您的代码和源代码中获取和使用 Repo-Revision,而无需 svn:keywords 和|或钩子和额外的提交:在构建过程中的一项额外操作和.h在存储库中引入一些更改的成本。阅读有关SubWCRev的信息,它是 TortoiseSVN 的一部分(具有附加值的 linux 等效项也存在:SvnRev)并参见关键字使用示例,请注意“提示”中的建议。SvnRev 工作流程略有不同 - 它不处理模板,而是构建标头,必须将其包含在适当的位置
于 2014-02-11T09:20:10.083 回答
0

在我们的 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 绑定来生成包含文件所需的版本信息。这更强大,因为它可以检查构建使用但尚未添加到存储库中的文件是否存在。

于 2014-02-17T10:43:41.083 回答