我有一个SVN存储库
trunk/file1.txt
trunk/file2.txt
trunk/fileR.txt
在服务器上,我有一个由用户www-data
拥有的trunk (/var/www/trunk
)的工作副本签出。
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
提交到存储库。
我想到的是一个完成上述所有功能的post-commit钩子,但我不确定SVN是否以及如何在之前的提交完成之前处理一个新的提交。
示例:那么,commit1修改了file1.txt
,预提交钩子运行(如果有的话),事务被提交到数据库,然后post-commit钩子运行。post-commit钩子实际上创建了一个commit2,它需要在commit1的post-commit钩子真正完成之前完成。
SVN是否支持?如果没有,你有什么其他的工具/工作流程的建议?
谢谢
假设你创建了一个post-commit hook来做你想做的事情…
- 我在file1.txt中提交了一个更改。
- Post-commit钩子拾取更改,并创建一个新文件fileR.txt
- Post-commit change提交这个导致预提交钩子被触发的更改。
- 然后,你又回到了步骤1
还有一个问题是在服务器上创建一个工作副本,在那里你的post commit钩子可以操作。当有人进行提交时,您必须更新甚至签出服务器上的工作副本,连接更改,然后在不触发提交钩子的情况下进行新的提交。记住,人们可能会创建分支,所以你可能需要有多个工作副本。
并且,当你的post-commit钩子完成所有这些时,你的用户必须等待post-commit钩子完成。
另外,如果我做了一个提交,我的工作副本现在已经过期了。我现在必须提交,然后做一个更新,因为服务器做了一个提交。
我希望我已经说服了你,这不是一个真正的好主意。这是可能的,但肯定是不可取的。事实上,如果我看到一个构建工程师做这样的事情,我会解雇他们。我建议你看看詹金斯。Jenkins是一个持续构建服务器。你能做的就是让Jenkins在提交完成时为你创建你的file .txt文件。这个文件可以很容易地从Jenkins服务器下载并公开提供。你也可以把你的fileR.txt创建一个PDF文件。
因此,合并后的文件仍然可用,并且可以被其他进程下载,但它不会导致提交后钩子触发另一轮钩子。并且,fileR.txt只能被访问特定Jenkins作业的所有人读取。