任何修订更改后,将SVN版本号转换为特定文件

任何修订更改后,将SVN版本号转换为特定文件,svn,version-control,revision,revisions,Svn,Version Control,Revision,Revisions,在我们的项目中,我们收到一个请求,要求将SVN根版本号(而不是上次修改的版本号)放入lib头中,并在库中提供一个函数,该函数将给出上次提交的版本号 我已经找到了,所以我知道$Id$或$Revision$。我不知道的是,在每次提交后,是否可以在不使用其他脚本的情况下强制SVN更新某些特定的文件头和.cpp 例如:我修改了一个.cpp文件并提交了它,但提交后不仅更新了修改后的.cpp文件,还更新了lib头文件和一个小的.cpp文件,其中包含提交的修订号 此请求的目的是为我们的图书馆用户提供检查代码修

在我们的项目中,我们收到一个请求,要求将SVN根版本号(而不是上次修改的版本号)放入lib头中,并在库中提供一个函数,该函数将给出上次提交的版本号

我已经找到了,所以我知道$Id$或$Revision$。我不知道的是,在每次提交后,是否可以在不使用其他脚本的情况下强制SVN更新某些特定的文件头和.cpp

例如:我修改了一个.cpp文件并提交了它,但提交后不仅更新了修改后的.cpp文件,还更新了lib头文件和一个小的.cpp文件,其中包含提交的修订号

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

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

请使用标准术语和定义,以获得明确的答案-SVN根版本号在正常的SVN世界中是未知的。它是存储库的全局修订ID吗? SVN关键字是特定于文件的,与全局修订号不相关 您不能使用changed强制提交未更改的文件,但在提交相关文件后,您可以使用post commit hook中的一些技巧提交这些所需的文件,但请记住,.cpp和.h中的$Revision$对于实际源代码来说至少是Revision+1,并且如果post commit hook在执行期间不会阻止提交,则可以大于+1 您可以在代码和源代码中获取并使用Repo Revision,而无需svn:keywords和|或hook和其他提交:以在构建过程中进行一次额外操作以及在存储库中对.cpp和.h引入一些更改为代价。请阅读,还存在部分具有附加值的OrtoiseSVN linux等价物:请参阅,注意提示中的建议。SvnRev工作流稍有不同-它不处理模板,而是生成标题,必须包含在适当的位置
在我们的C/C++项目中,我们混合了两种不同的方法:

1/Make将subwcrev与一个输入文件一起使用:version_info.src生成一个include文件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绑定来生成包含文件所需的版本信息。这一功能更强大,因为它可以检查是否存在生成使用但尚未添加到存储库的文件。

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