我有一个拥有
的SVN存储库trunk/file1.txt
trunk/file2.txt
trunk/fileR.txt
在服务器上,我有一个由用户/var/www/trunk
拥有的主干(www-data
)的工作副本签出。
fileR.txt
仅适用于除用户www-data
以外的所有人(authz
或svnlook author
限制访问权限)。 fileR.txt
应该通过file1.txt
和file2.txt
:cat file1.txt file2.txt > fileR.txt
来生成trunk/file1.txt
我想要的是每次在trunk/file2.txt
或fileR.txt
上提交时,都应该运行一个脚本来更新服务器上的工作副本,连接文件并提交新的{ {1}}到存储库。
我想到的是一个提交上述所有内容的提交后挂钩,但我不确定SVN是否以及如何处理新提交,直到上一次提交完成为止。
示例:因此,对file1.txt
进行更改的commit1,预提交挂钩运行(如果有),将事务提交到数据库,然后运行提交后挂钩。 post-commit钩子实际上创建了一个commit2,它需要在commit1的post-commit钩子实际完成之前完成。
SVN能够做到这一点吗?如果没有,您建议使用哪些其他工具/工作流程?
由于
答案 0 :(得分:1)
假设你做了一个post-commit hook来做你想做的事......
还有一个问题是在您的服务器上创建一个工作副本,您的帖子提交挂钩可以在其中运行。当有人提交时,您必须更新甚至签出服务器上的工作副本,连接更改,然后执行新的提交而不触发提交挂钩。请记住,人们可能会创建分支,因此您可能必须拥有多个工作副本。
而且,当您的post-commit挂钩正在执行所有这些操作时,您必须等待post-commit挂钩完成。
另外,如果我提交,我的工作副本现在已经过时了。我现在必须提交,然后进行更新,因为服务器进行了提交。
我希望我已经说服你,这不是一个好主意。 可能,但肯定不可取。事实上,如果我看到一个构建工程师做了这样的事情,我会解雇它们。
我建议你看看Jenkins。 Jenkins是一个连续构建服务器。您可以做的是让Jenkins在提交完成后为您创建 fileR.txt 文件。该文件可以从Jenkins服务器轻松下载并公开发布。你也可以带上你的 fileR.txt 并为你的用户创建PDF。
因此,您的组合文件仍然可用,并且可以由其他进程下载,但它不会导致您的post-commit挂钩触发另一轮挂钩。并且, fileR.txt 仅对有权访问该特定Jenkins作业的所有人读取。