SVN:post-commit hook:在注释字段中添加文本

时间:2014-09-23 14:26:17

标签: svn tortoisesvn visualsvn-server

当我确实提交了repo(从TSVN到VisualSVN服务器)时,我想在评论中添加一个我正在提交的文件的版本。

例如,我要提交的文件版本号(不是svn版本)是4.0.56.896。我想这个提交文件的版本号出现在评论/消息字段中。这将是有用的,因为现在如果我想读取文件版本号,对于给出的svn修订版,我必须从repo检出修订版,然后转到文件属性来读取它。

文件版本号已知。它可以作为执行exe文件的结果获得,或者从文本文件中获取并存储然后从文本文件中提取。

但是如何将它添加到post-commit hook脚本中的注释中?

编辑:

Claryfying:

我想要处理的问题是:

我想快速了解在特定版本中提交的.dll文件的版本是什么。

例如,作为提交的结果,修订号是r1235。在本次修订中,假设我提交了一个文件dll1.dll @ VERSION 4.0.56.896。然后我做了另一个回复的承诺。让我们说这些提交后我在修订版r1490,我需要检查dll1.dll文件的版本是什么。我现在的方式是将WC更新到修订版并右键单击该文件并从那里阅读。

所以,我认为最好准备一个post-commit钩子,将关于dll1.dll文件的VERSION的信息放在Comment / Message框中,以避免“Update WC to revision”操作。 / p>

2 个答案:

答案 0 :(得分:1)

首先是一个直截了当的回答..

为了更改提交注释,您必须设置另一个pre-revprop-change挂钩以允许更改修订属性。允许对修订属性进行pellmell更改可能是一种危险的做法,因为用户可以更改提交更改的人员以及何时更改。这就是为什么不允许更改版本属性。

所以,首先创建一个pre-revprop-change钩子。示例脚本在Subversion存储库目录的pre-revprop-change.tmpl目录中以hooks给出。它只允许更改svn:log修订版属性,但不会验证它是否为同一用户。

一旦你创建了这样一个钩子,添加一个改变提交注释的post-commit钩子是相当简单的。 $REVISION$REPO被传递到post-commit钩子,您只需通过svn pg --revprop svn:log -r $REV $REPO获取提交消息然后修改它,并通过以下方式设置提交消息svn ps svn:log --revprop -r "$commit_msg" $REV

回到您的原始问题:

  

当我确实提交回购(从TSVN到VisualSVN服务器)时,我想在评论中添加我提交的其中一个文件的版本。

那是什么版本?如果它是Subversion修订版,我不会打扰。如果有一些version.txt文件,你可以从那里拉出来。如果每个文件都有不同的版本,那么如果您提交多个文件并且每个文件的版本不同,那么您只会添加混淆。

您遇到的问题是什么,这是解决该问题的最佳方法吗?解释一下,我可能会给你一个比试图动态操作提交评论更好的答案。


更好的答案

您想要的是找到您向客户发布的内容的方法。客户的版本为4.0.56.896,您希望能够找到该特定版本。

标记的用途。当您将软件发布给客户时,您应该对其进行标记。哎呀,你甚至可以把它标记为4.0.56.896。找到标签要比搜索日志更快,然后尝试弄清楚你是否检查过它。您也不必担心更改提交注释。

它听起来真的是你需要更好地控制你的构建和发布过程。每个版本都是客户可能拥有的吗?你做任何测试吗?是否有发布计划,或者您是否在追逐错误并不断扑灭火灾?

这就是改变控制的全部内容。我建议您查看Jenkins以帮助您构建流程。 Jenkins将根据您的每次更改自动构建和测试您的代码(如果您愿意,还可以按计划进行测试)。您可以跟踪项目的历史记录,甚至跟踪构建的状态。例如,当构建从开发测试移动到QA测试到UAT测试时,我们会更改构建描述。它可以帮助我们跟踪正在发生的事情。我们甚至通过Jenkins进行标记。

Jenkins也可以保留您的构建产品,因此您不必将它们检入Subversion。 (请告诉我你不要把你的内置二进制文件检入Subversion。这是另一种不好的做法。)您还可以将NuGet集成到构建过程中。 (NuGet可以帮助您打包可重用的DLL或.NET生成的任何内容,因此您可以在其他项目中使用它们。)

答案 1 :(得分:0)

虽然David的回答在技术上是正确的 ...

  • 在将文件版本存储为文件的特殊subversion-property时,您可以直接从URL获取,无需结帐,请仔细阅读svn help pg

只为存储库文件中的现有示例(我没有其他属性,并且懒得创建sample-repo)

>svn pg svn:keywords "^/trunk/Scartel-Yota.ini"
Date Revision Author Id
  • 即使现有可能在工作流程中添加额外的图层也不是DBW的借口(" Damned Broken Workflow"):为什么,如果您必须从文件中获取有关此文件在存储库中的修订的信息,您只需不要在文件版本或其他(特殊?)字段中存储此数据而不是无用的垃圾。在开发中使用VCS的大多数项目(我可以监视)使用"文件版本"中的最后一个八位字节。用于存储(Subversion)修订版的字段

示例1

>wmic datafile where Name="FlylinkDC.exe" get Version
Version

7, 7, 503, 17574

17574 是此文件的编译的修订版

示例2

>wmic datafile where Name="TortoiseProc.exe" get Version
Version
1.8.8.25755

假设 25755是修订版,但是这些数据(完全)已添加到关于屏幕,以便轻松识别已使用的应用程序版本

  

TortoiseSVN 1.8.8,Build 25755 - 32 Bit,2014/08/10 14:44:06

相关问题