【问题标题】:Determining base revision of transaction in pre-commit在预提交中确定事务的基本修订
【发布时间】:2012-01-23 21:22:23
【问题描述】:

我正在编写一个预提交挂钩,我想在交易之前执行一些基于文件内容的规则。因此,当事务开始时,我想 svnlook cat 任何标记为“U”、“UU”或“D”的文件的内容没有未决更改。我可以安全地使用提供的事务标识符(预提交的第二个参数)并去掉破折号和它后面的任何字符并认为是“基本修订版”吗?有没有更好的方法来获取这些信息?

【问题讨论】:

    标签: svn pre-commit-hook svnlook


    【解决方案1】:

    直接的答案是不。交易号可以是任何东西。但是,svnlook youngest <repos> 将返回您要查找的最新版本。

    小心预提交钩子:

    • 确保您没有做需要很长时间的事情。开发人员必须等待预提交挂钩完成,如果您需要 7 到 10 秒的时间处理某事,开发人员会感到非常沮丧。
    • 您不能(也不应该)更改提交的数据。如果它与您想要的匹配,则允许提交。如果没有,则不允许提交。
    • 确保您不会停止可能是合法的活动。例如,一些站点使用预提交挂钩来防止某人提交更改,除非他们在提交消息中放入票证,并且该提交消息是分配给该开发人员的票证,并且该票证处于打开状态。您能想象当开发人员因为工单分配给其他人而无法提交更改,并且唯一可以更改分配的人一周休假时会发生什么有趣的事情吗?

    有时最好使用持续集成服务器来验证提交,而不是使用 pre-commit 或 post-commit 挂钩。例如,允许开发人员提交文件,但如果开发人员不在正确的组中,则可以向开发负责人发送电子邮件。

    开发人员有 90% 的可能性可能在做正确的事情。那个开发负责人可能已经知道这个问题了。而且,如果出现问题,您可以恢复更改。

    【讨论】:

    • 乍一看,这似乎引入了竞争条件的可能性。如果 'youngest' 在交易进行中发生变化,svn 是否会适当地确定该交易已过期并拒绝?
    • 如果你看一下 Subversion 存储库的结构,它看起来 Subversion 的提交过程一次只处理一个提交可能会完成。每个版本都是上一个版本的差异,所以在上一个版本被提交之前,你不能提交下一个版本。尤其是对存储库而不是文件进行了修订时尤其如此。获取svnlook youngest 应该不是问题。
    • 这个答案似乎与 Bert 写的有点不同,尽管在实践中这对我来说应该不是问题,因为查看最年轻的修订版似乎可以保证给我匹配的内容我正在更改的基本版本。我有兴趣在更改之前查看已修改文件的内容。谢谢。
    【解决方案2】:

    在提交修订之前,基本修订尚未确定。如果另一个更改没有更改相同的节点,则可以在您的提交过程中提交它。只有提交的最后部分是独占的。

    【讨论】:

      【解决方案3】:

      并将最年轻的加 1。 例如:

      the_revision=$(svnlook youngest ${REPOS})
      ((the_revision++))
      

      【讨论】:

      • 只有代码sn-p还不够,还要文字说明!
      猜你喜欢
      • 2015-11-24
      • 2021-12-13
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      相关资源
      最近更新 更多