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
Svn 如何在每次提交时提交subversion修订版,以便在两个存储库之间引用_Svn_Repository_Versioning_Revision_Auto Versioning - Fatal编程技术网

Svn 如何在每次提交时提交subversion修订版,以便在两个存储库之间引用

Svn 如何在每次提交时提交subversion修订版,以便在两个存储库之间引用,svn,repository,versioning,revision,auto-versioning,Svn,Repository,Versioning,Revision,Auto Versioning,考虑在两个独立的存储库(Pub和Priv)中传播的软件。Pub存储库是公共的。Priv关闭了。当任何一方发生变化时,持续集成服务器同时构建Pub和Priv。然后,它从Priv创建可供Pub用户下载的二进制文件。这些二进制文件在内部和文件名上都标有subversion版本 问题是:如何让从Pub构建的程序知道正确的、相应的Priv修订号,以便它们能够自动下载并运行 当前的解决方案是,构建服务器修改Pub中的文件,以设置Priv的修订号,并将这些更改提交到Pub。然而,这带来了两个重大问题: 构建需

考虑在两个独立的存储库(Pub和Priv)中传播的软件。Pub存储库是公共的。Priv关闭了。当任何一方发生变化时,持续集成服务器同时构建Pub和Priv。然后,它从Priv创建可供Pub用户下载的二进制文件。这些二进制文件在内部和文件名上都标有subversion版本

问题是:如何让从Pub构建的程序知道正确的、相应的Priv修订号,以便它们能够自动下载并运行

当前的解决方案是,构建服务器修改Pub中的文件,以设置Priv的修订号,并将这些更改提交到Pub。然而,这带来了两个重大问题:

  • 构建需要很长时间,因此如果有人在构建过程中提交对Pub(或Priv)的更改,就会产生冲突。这可以强制解决,但日志历史记录看起来很奇怪,好像这些修订将其添加到了该版本中

  • subversion日志中有许多条目,比如“自动生成更新版本”。每次生成运行时,都会显示信息丰富的subversion日志

  • 因此,我们可以用一种不需要更改存储库的方式来实现这一点

    真诚地,
    韦恩

    我可以想出几种方法来做到这一点。我假设由于某种原因,不可能使修订号直接相互对应,这将是显而易见的最简单的解决方案

    一种方法是使用commit消息to Pub来包含一个指向相应Priv修订版的指针,如“对应于Priv r1234”

    另一种方法是将通信存储在存储库之外,存储在一些简单的数据库甚至文本文件中,每当Priv的提交被推送到Pub时,这些文件就会更新

    另一种方法是,不要像当前那样进行单独的提交来记录Priv修订,而是将该更改添加到应该记录的提交中。

    您可以使用(请参阅标题为“未版本属性”的部分)存储Priv的适当版本与Pub的适当版本。修订属性的好处是它们不需要提交,因此没有历史污染

    用Subversion的说法,修订属性附加到特定的修订而不是版本化的文件夹。与附加到文件或文件夹的属性不同,这些属性是非版本化的。它们只是直接应用。修订属性通过使用--revprop开关添加到“svn propset”“。在OrtoiseSVN中,它们是通过历史记录日志(右键单击修订,然后选择“显示修订属性”)而不是文件或文件夹的属性添加的,并且在不提交的情况下立即应用

    例如,要将Priv的r1234与Pub的r6789相关联,可以从Pub的签出中执行此操作

    svn propset --revprop -r6789 "priv:version" "1234"
    
    现在,当Pub的r6789构建完成后,您就可以这样做了

    svn propget --revprop -r6789 "priv:version"
    
    要检索Priv的适当修订号。为了处理上次Priv构建后发生的其他提交,您的脚本必须在历史记录中“漫游”,询问每个修订版本的“Priv:version”,直到您获得一个值。或者,您可以有一个post-commit钩子,在每次修订时将属性复制到其中


    不过有一个我明白了。您需要有一个pre-revprop change钩子,它允许您使用修订属性。最简单的方法是让它始终返回0,以便允许任何revprop。在Windows上,我这样做只是在hooks目录中创建一个空的“pre-revprop change.bat”文件。如果您看一下创建属性时提供的示例钩子脚本,它实际上有很好的文档记录。

    对不起,stackoverflow不允许回复或编辑我的帖子或您的答案,因为我问这个问题时没有注册。所以这里有一些回应

    西蒙:谢谢。为什么建议修订属性不需要提交?nant构建脚本目前使用修订属性跟踪分支版本以进行合并和重新整合(svn的内置合并功能很容易混淆)。但是这些修订属性需要提交到中央存储库,并且您的链接引用了用于此操作的相同类型的修订属性。您是指其他类型的修订属性吗

    关键技能:是的,提交“Autobuild更新到版本0.5.6.1049”的消息是可定制的。该提交实际上发生在nant构建脚本中,该脚本由CI使用Hudson执行。而且,请记住,我们希望消除这种提交,因为每次提交到Pub之后都会出现一条(或多条)污染日志的自动消息

    Mark:re:Commit指向Priv的指针。提交到pub的用户对Priv的访问权限为零,所以他们不知道是什么修订版——否则这是个好主意。另一方面,自动构建现在在构建pub和priv时做到了这一点,但这会污染日志文件,因为大量的自动提交只是将版本链接到priv,而没有任何其他实质性更改

    马克:我们曾考虑将通信存储在存储库之外,但这导致了另一个我们无法解决的问题。解决这个问题,你就会赢得答案。问题在于,pub存储库保存的软件依赖于从Priv生成的具有完全对应版本的二进制文件。因此,它包括一个“自动更新”功能,该功能连接到持有Priv的服务器,请求二进制文件列表并下载它们。关键是启动此下载的主要参数是版本

    马克:问题是酒吧怎么知道下载哪个版本?现在这个问题由原来问题中的情况解决了。auto build nant脚本在Pub中提交对源代码的更改,以包括Priv的版本号,但这正是使用“auto build updated th”污染Pub日志的原因