svn hook从提交的文件生成文件

时间:2011-12-11 00:23:50

标签: svn svn-hooks svn-server

我有一个拥有

的SVN存储库
trunk/file1.txt
trunk/file2.txt
trunk/fileR.txt

在服务器上,我有一个由用户/var/www/trunk拥有的主干(www-data)的工作副本签出。

fileR.txt仅适用于除用户www-data以外的所有人(authzsvnlook author限制访问权限)。 fileR.txt应该通过file1.txtfile2.txtcat file1.txt file2.txt > fileR.txt来生成trunk/file1.txt

我想要的是每次在trunk/file2.txtfileR.txt上提交时,都应该运行一个脚本来更新服务器上的工作副本,连接文件并提交新的{ {1}}到存储库。

我想到的是一个提交上述所有内容的提交后挂钩,但我不确定SVN是否以及如何处理新提交,直到上一次提交完成为止。

示例:因此,对file1.txt进行更改的commit1,预提交挂钩运行(如果有),将事务提交到数据库,然后运行提交后挂钩。 post-commit钩子实际上创建了一个commit2,它需要在commit1的post-commit钩子实际完成之前完成。

SVN能够做到这一点吗?如果没有,您建议使用哪些其他工具/工作流程?

由于

1 个答案:

答案 0 :(得分:1)

假设你做了一个post-commit hook来做你想做的事......

  1. 我在file1.txt中进行了更改。
  2. 提交后挂钩获取更改,并创建新文件fileR.txt
  3. 提交后更改会提交此更改,从而导致您的预提交挂钩触发。
  4. 并且,您将回到第1步
  5. 还有一个问题是在您的服务器上创建一个工作副本,您的帖子提交挂钩可以在其中运行。当有人提交时,您必须更新甚至签出服务器上的工作副本,连接更改,然后执行新的提交而不触发提交挂钩。请记住,人们可能会创建分支,因此您可能必须拥有多个工作副本。

    而且,当您的post-commit挂钩正在执行所有这些操作时,您必须等待post-commit挂钩完成。

    另外,如果我提交,我的工作副本现在已经过时了。我现在必须提交,然后进行更新,因为服务器进行了提交。

    我希望我已经说服你,这不是一个好主意。 可能,但肯定不可取。事实上,如果我看到一个构建工程师做了这样的事情,我会解雇它们。


    我建议你看看Jenkins。 Jenkins是一个连续构建服务器。您可以做的是让Jenkins在提交完成后为您创建 fileR.txt 文件。该文件可以从Jenkins服务器轻松下载并公开发布。你也可以带上你的 fileR.txt 并为你的用户创建PDF。

    因此,您的组合文件仍然可用,并且可以由其他进程下载,但它不会导致您的post-commit挂钩触发另一轮挂钩。并且, fileR.txt 仅对有权访问该特定Jenkins作业的所有人读取。