Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SVN:提交后钩子:向注释字段添加文本_Svn_Tortoisesvn_Visualsvn Server - Fatal编程技术网

SVN:提交后钩子:向注释字段添加文本

SVN:提交后钩子:向注释字段添加文本,svn,tortoisesvn,visualsvn-server,Svn,Tortoisesvn,Visualsvn Server,当我提交到repo(从TSVN到visualvn服务器)时,我希望在注释中添加一个我提交的文件的版本 例如,我要提交的文件版本号(不是svn修订版)是4.0.56.896。我希望此提交文件的版本号显示在“注释/消息”字段中。这将很有用,因为现在如果我想读取文件版本号,对于给定的svn版本,我必须从repo签出版本,然后他们转到文件属性来读取它 文件版本号是已知的。它可以作为执行exe文件的结果获得,也可以获得并存储,然后从文本文件中提取 但是如何在提交后钩子脚本中将其添加到注释中呢 编辑: 克拉

当我提交到repo(从TSVN到visualvn服务器)时,我希望在注释中添加一个我提交的文件的版本

例如,我要提交的文件版本号(不是svn修订版)是4.0.56.896。我希望此提交文件的版本号显示在“注释/消息”字段中。这将很有用,因为现在如果我想读取文件版本号,对于给定的svn版本,我必须从repo签出版本,然后他们转到文件属性来读取它

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

但是如何在提交后钩子脚本中将其添加到注释中呢

编辑:

克拉利菲:

我想处理的问题是:

我想快速了解在某个版本提交的.dll文件的版本

例如,由于提交,修订号为r1235。在这个版本中,假设我提交了一个文件dll1.dll@VERSION 4.0.56.896。然后我对回购协议做了另一项承诺。假设在这些提交之后,我的版本是r1490,我需要检查dll1.dll文件的版本。我现在的做法是将WC更新为修订版,然后右键单击该文件并从中读取


因此,我认为最好准备一个post-commit钩子,将关于dll1.dll文件版本的信息放在注释/消息框中,以避免“将WC更新为修订版”操作。

首先是一个直截了当的答案

为了更改提交注释,您必须设置另一个
pre-revprop change
hook以允许更改修订属性。允许对修订属性进行pellmell更改可能是一种危险的做法,因为用户可以更改提交更改的人和时间。这就是为什么不允许在开箱即用的情况下更改修订属性

因此,首先创建一个
pre-revprop change
hook。Subversion存储库目录的
hooks
目录中给出了一个示例脚本,名为
pre revprop change.tmpl
。它只允许更改
svn:log
revision属性,但不验证它是否是同一用户

一旦创建了这样一个钩子,添加一个post-commit钩子来更改提交注释就相当简单了。
$REVISION
$REPO
被传递到
post commit
钩子,您所要做的就是通过
svn pg--revprop svn:log-r$REV$REPO
获取提交消息,然后对其进行修改,并通过
svn ps svn:log--revprop-r“$commit_msg”$REV>设置提交消息

回到你最初的问题:

当我提交到repo(从TSVN到visualvn服务器)时,我希望在注释中添加一个我提交的文件的版本

那是什么版本?如果是Subversion的修订版,我就不麻烦了。如果有某个version.txt文件,您可以从那里提取它。如果每个文件都有不同的版本,那么如果您提交了多个文件,并且每个文件都有不同的版本,那么只会增加混乱

你遇到的问题是什么?这是解决问题的最佳方法吗?解释这一点,我可能会给你一个比试图在运行中操纵提交评论更好的答案


一个更好的答案 您想要的是找到您发布给客户的内容的方法。客户的版本为4.0.56.896,您希望能够找到该特定版本

这就是标签的作用。当您向客户发布软件时,您应该对其进行标记。见鬼,你甚至可以把它标记为4.0.56.896。查找标记要比搜索日志然后尝试确定是否签出标记快得多。您也不必担心更改提交注释

听起来,您需要更好地控制构建和发布过程。每个版本都是客户可能拥有的吗?你做过测试吗?是否有发布时间表,或者您是否在追踪bug并不断灭火

这就是变更控制的意义所在。我建议您查看以帮助您的构建过程。Jenkins将根据每次更改自动构建和测试您的代码(如果您愿意,也可以按计划进行)。您可以跟踪项目的历史记录,甚至跟踪构建的状态。例如,当构建从开发测试转移到QA测试再到UAT测试时,我们会更改构建描述。它帮助我们追踪发生了什么。我们甚至通过詹金斯做标记

Jenkins还可以保存您的构建产品,因此您不会将它们签入Subversion。(请告诉我,您没有将内置二进制文件签入Subversion。这是另一种糟糕的做法。)。您还可以集成到构建过程中。(NuGet帮助您打包可重用DLL或.NET生成的任何东西,以便您可以在其他项目中使用它们)。

而David的答案在技术上是正确的

  • 在您将文件版本存储为文件的特殊subversion属性时,您可以直接从URL获取,无需签出,请仔细阅读
    svn help pg
只是存储库文件中现有的示例(我没有其他属性,也懒得创建示例repo)

  • 甚至现有的向工作流中添加额外层的可能性也不是DBW(“该死的坏工作流”)的借口:为什么,如果您必须从文件中获取关于存储库中此文件修订的信息,您只需不将这些数据存储在文件版本或其他(特殊?)字段中,而将无用的垃圾存储在文件中。在developent中使用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
<
>wmic datafile where Name="TortoiseProc.exe" get Version
Version
1.8.8.25755