gpt4 book ai didi

svn - 如何在每次提交时提交颠覆修订,以便在两个存储库之间引用

转载 作者:行者123 更新时间:2023-12-04 21:27:02 29 4
gpt4 key购买 nike

考虑软件分布在两个独立的存储库 Pub 和 Priv 中。 Pub 存储库是公开的。私有(private)已关闭。当任何一方发生变化时,持续集成服务器会同时构建 Pub 和 Priv。然后它从 Priv 创建可供 Pub 用户使用的可下载二进制文件。这些二进制文件在内部和带有颠覆修订的文件名上标记。

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

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

  • 构建需要很长时间,因此如果有人在构建过程中提交对 Pub(或 Priv)的更改,则会产生冲突。这可以强制解决,但日志历史看起来很奇怪,好像这些修订版已进入该版本。
  • 颠覆日志有许多条目,例如“自动构建更新了版本”。每次构建运行都会污染其他信息丰富的颠覆日志。

  • 那么我们能否以一种不需要更改存储库的方式来做到这一点。

    真挚地,
    韦恩

    最佳答案

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

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

    例如,要将 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 钩子(Hook),当它发生时将属性复制到每个修订版。

    不过有一个问题。您需要有一个 pre-revprop-change 钩子(Hook),它允许您使用修订属性。最简单的方法是让它始终返回 0,因此允许任何 revprop。在 Windows 上,我只是在 hooks 目录中创建一个空的“pre-revprop-change.bat”文件。如果您查看创建属性时提供的示例钩子(Hook)脚本,它实际上已经有很好的文档记录。

    关于svn - 如何在每次提交时提交颠覆修订,以便在两个存储库之间引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1685662/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com