【发布时间】:2011-12-11 00:23:49
【问题描述】:
我有一个 SVN 存储库,其中包含
trunk/file1.txt
trunk/file2.txt
trunk/fileR.txt
在服务器上,我有一个用户 www-data 拥有的主干 (/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 提交到存储库。
我想到的是一个提交后挂钩,它可以完成上述所有操作,但我不确定 SVN 是否以及如何处理新提交,直到上一次提交完成。
示例:因此,commit1 对file1.txt 进行了更改,预提交挂钩运行(如果有),事务提交到数据库,然后提交后挂钩运行。 post-commit 钩子实际上创建了一个 commit2,它需要在来自 commit1 的 post-commit 钩子实际完成之前完成。
SVN 有能力做到这一点吗?如果没有,您建议使用哪些其他工具/工作流程?
谢谢
【问题讨论】:
-
通常情况下,如果一个文件可以从存储库中的其他文件派生,您根本不会将该文件提交到存储库。任何需要该/那些文件的人都可以按需派生。为什么需要将fileR文件存储在存储库中,而您可以简单地连接其他两个来获取它?
-
一个问题:为什么fileR需要存在?用户不能分别使用 file1 和 file2 吗?我认为需要更多的上下文来弄清楚你为什么要这样做——这对我来说似乎很奇怪。
-
fileR出于遗留原因需要存在。在我们的研究小组中,我们使用 BibTeX 来生成我们论文中的所有参考文献(这是 fileR)。最近,我们意识到将fileR与我们发表的论文和其他人发表的论文一起保存并不是一个好主意,并切换到两个单独的文件(一个给我们,一个给世界其他地方)。不幸的是,我们使用一些脚本为研究组中的个人自动生成出版物列表(我不想更改)。但我们仍然希望保留旧文件。
标签: svn svn-hooks svn-server