VisualSVN提交钩子将修订添加到repo中的文件

VisualSVN提交钩子将修订添加到repo中的文件,svn,visualsvn,pre-commit-hook,post-commit-hook,Svn,Visualsvn,Pre Commit Hook,Post Commit Hook,我们有一个受SVN控制的PHP项目(VisualSVN) 不知何故,我需要用当前版本号更新repo中的一个文件。 因此,当主站点更新/签出时,我们可以显示svn构建编号(这部分不是问题) 使用提交前/提交后钩子是否可以做到这一点?提交前和提交后钩子的行为不同(请参阅关于钩子的文档,特别是关于的部分): 预提交:检查是否允许提交。因此,预提交钩子根本无法更改提交中的任何内容 提交后:通知成功提交 所以没有提到改变任何事情的机会。相反,在“实现挂钩”一节中有一段: 虽然钩子脚本几乎可以做任何事情

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

不知何故,我需要用当前版本号更新repo中的一个文件。 因此,当主站点更新/签出时,我们可以显示svn构建编号(这部分不是问题)


使用提交前/提交后钩子是否可以做到这一点?

提交前和提交后钩子的行为不同(请参阅关于钩子的文档,特别是关于的部分):

  • 预提交:检查是否允许提交。因此,预提交钩子根本无法更改提交中的任何内容
  • 提交后:通知成功提交
所以没有提到改变任何事情的机会。相反,在“实现挂钩”一节中有一段:

虽然钩子脚本几乎可以做任何事情,但其中只有一个维度 哪些钩子脚本作者应该显示约束:不要修改 使用钩子脚本提交事务。虽然这可能会吸引你 使用钩子脚本自动更正错误、缺点或错误 正在提交的文件中存在策略冲突,这样做可能会导致 造成问题。Subversion保留客户端缓存的特定数据位 存储库数据,如果以这种方式更改提交事务, 那些储藏室变得陈旧得无法察觉。这种不一致可能导致 令人惊讶和意外的行为。而不是修改 事务,您只需在 预提交钩子,如果提交不符合要求,则拒绝提交 要求。作为奖励,您的用户将了解谨慎的价值, 遵从性强的工作习惯


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

提交前和提交后钩子的行为不同(请参阅关于钩子的文档,特别是关于的部分):

  • 预提交:检查是否允许提交。因此,预提交钩子根本无法更改提交中的任何内容
  • 提交后:通知成功提交
所以没有提到改变任何事情的机会。相反,在“实现挂钩”一节中有一段:

虽然钩子脚本几乎可以做任何事情,但其中只有一个维度 哪些钩子脚本作者应该显示约束:不要修改 使用钩子脚本提交事务。虽然这可能会吸引你 使用钩子脚本自动更正错误、缺点或错误 正在提交的文件中存在策略冲突,这样做可能会导致 造成问题。Subversion保留客户端缓存的特定数据位 存储库数据,如果以这种方式更改提交事务, 那些储藏室变得陈旧得无法察觉。这种不一致可能导致 令人惊讶和意外的行为。而不是修改 事务,您只需在 预提交钩子,如果提交不符合要求,则拒绝提交 要求。作为奖励,您的用户将了解谨慎的价值, 遵从性强的工作习惯


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

虽然姆利贝尔引用了正确的文本,但他得出了错误的结论。甚至两次:

  • 它必须在提交后钩子中完成
  • 在钩子里是不可能做到的
第二句话

若post-commit钩子将重写此提交中不包含的文件,那个么它将是完全有效的操作,不会破坏任何东西

第一句话

这种解决方案显然不好,原因有很多:

  • 您将数据包括在存储库中(以便以后引用),这取决于整个存储库数据的更改,但是:此文件中数据的每次更改也会更改存储库数据的状态。经典恶性循环
  • 您将所需的修订量增加两次:每次“数据修订”后,您必须执行“跟踪修订”
  • 您希望VCS能够处理其他人的问题,更适用于构建部署工具,因为VCS拥有这些数据就足够了
存储库(或的工作副本)本身具有关于上次修订的信息(
svn info
svnversion
svn log-r HEAD
),将其存储在数据中违反了Occam的Raroz。当您“发布”数据以便在存储库外部使用时,您只能提取数据

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

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

  • 可以使用Subversion关键字来存储repo内部的修订号,但不要忘记,文件内部使用的$revision$反映了此文件中上次更改的版本,并且在扩展后具有预定义的格式

    • 当姆利贝尔引用正确的文本时,他得出了错误的结论。甚至两次:

      • 它必须在提交后钩子中完成
      • 在钩子里是不可能做到的
      第二句话

      若post-commit钩子将重写此提交中不包含的文件,那个么它将是完全有效的操作,不会破坏任何东西

      第一句话

      这种解决方案显然不好,原因有很多:

      • 您将数据包括在存储库中(以便以后在存储库中引用),这取决于总体re