【问题标题】:VisualSVN commit-hook add revision to a file in the repoVisualSVN commit-hook 将修订添加到 repo 中的文件
【发布时间】:2012-04-11 16:02:41
【问题描述】:

我们有一个 SVN 控制下的 PHP 项目(VisualSVN)。

不知何故,我需要使用当前修订号更新 repo 中的文件。 这样当主站点更新/结帐时,我们可以显示 svn 内部版本号(这部分不是问题)。

是否可以使用 pre/post-commit-hook 来执行此操作?

【问题讨论】:

    标签: svn visualsvn pre-commit-hook post-commit-hook


    【解决方案1】:

    听起来您需要构建解决方案,而不是预提交挂钩。使用 Apache Ant 之类的构建系统,您可以在为实时环境准备解决方案时从存储库中获取最新的修订号。

    编辑:要实际回答您的问题“是否可以使用 pre/post-commit-hook 来做到这一点?”是的,这在技术上是可行的,但正如已经建议的那样,应该避免。

    【讨论】:

      【解决方案2】:

      提交前和提交后挂钩的行为不同(请参阅SVN red book 中有关挂钩的文档,尤其是有关implementing the hooks 的部分):

      • pre-commit:检查是否允许提交。因此,预提交挂钩根本无法更改提交中的任何内容。
      • post-commit:通知提交成功。

      所以没有提到改变任何东西的机会。相反,在“实现挂钩”部分中有一段:

      虽然钩子脚本几乎可以做任何事情,但只有一个维度 哪些钩子脚本作者应该表现出克制:不要修改 使用钩子脚本提交事务。虽然它可能很诱人 使用钩子脚本自动纠正错误、缺点或 正在提交的文件中存在违反政策的行为,这样做可以 造成问题。 Subversion 保留客户端缓存的某些位 存储库数据,如果您以这种方式更改提交事务, 这些缓存变得难以察觉的陈旧。这种不一致会导致 令人惊讶和意想不到的行为。而不是修改 交易,您应该简单地在 预提交钩子,如果不符合要求则拒绝提交 要求。作为奖励,您的用户将学习谨慎的价值, 合规意识的工作习惯。

      所以我想说,这是不可能的,或者至少不建议这样做。

      【讨论】:

        【解决方案3】:

        虽然 mliebelt 引用了正确的文字,但他得出了错误的结论。甚至两次:

        • 必须在提交后挂钩中完成
        • 在钩子里是不可能的

        第二个陈述

        如果 post-commit 钩子会重写 此提交中未包含的文件,这将是完全有效的操作,不会破坏任何内容。

        第一句话

        由于很多原因,这个解决方案显然很糟糕:

        • 您在存储库中包含(以便稍后参考)数据,这取决于整个存储库数据更改,但是:此文件中的每个数据更改也会更改存储库数据的状态 .经典恶性循环
        • 您将所需修订量增加两次:每次“数据修订”后,您必须执行“跟踪修订”
        • 您希望 VCS 参与解决其他问题,更适用于构建-部署工具,因为 VCS拥有这些数据就足够了

        存储库(或工作副本)本身具有关于其中最新修订的信息(svn infosvnversionsvn log -r HEAD),将其存储在数据中违反了奥卡姆的 Raroz。当您“发布”数据以使用外部存储库时,您只有提取数据。

        哪些工具以及如何使用很大程度上取决于:部署工作流程、操作系统(您没有在普通 Win-box 上使用 gawk-grep-sed),只是一些提示:

        • 来自 TortoiseSVN 的 SubWCRev(仅限 Win)可以通过用实际值替换特殊的 SubWCRev 关键字来检查工作副本和处理模板文件。 SubWCRev 有姐妹的 Linux 世界项目。使用这些工具假设将模板文件存储在某处(在仓库内部或外部)并将处理后的结果保存在准备使用的项目树中
        • svnversion 和 svnlook 可以在任何操作系统中使用(相应地用于 WC-path 和 repository-path)

        最后

        • 可以使用 Subversion 关键字来存储修订号在 repo 中,只是不要忘记,在文件中使用的 $Revision$ 反映了 修订此文件的最后更改 并在扩展后具有预定义格式

        【讨论】:

          【解决方案4】:

          如果要求开发人员自己更新文件,然后使用预提交脚本拒绝更新不正确的提交,该怎么办?也许插入修订号是一种更好地纳入编辑器或构建过程/部署脚本的责任。

          【讨论】:

            猜你喜欢
            • 2011-06-17
            • 2012-01-18
            • 2023-04-11
            • 1970-01-01
            • 1970-01-01
            • 2017-12-05
            • 1970-01-01
            • 2015-10-09
            • 2017-07-18
            相关资源
            最近更新 更多