2011-12-11 116 views
2

文件我有了SVN钩来从提交的文件

trunk/file1.txt 
trunk/file2.txt 
trunk/fileR.txt 

在服务器上的SVN仓库,我有用户www-data拥有干线(/var/www/trunk)的工作副本结账。

fileR.txt仅适用于除用户www-data(访问受authzsvnlook author限制的访问)以外的所有人。 fileR.txt应concatentating file1.txtfile2.txt产生:cat file1.txt file2.txt > fileR.txt

我想的是,每次在任一台trunk/file1.txttrunk/file2.txt提交,脚本应该运行在服务器上更新工作拷贝,串接的文件和将新的fileR.txt提交到存储库。

我脑子里想的是什么是一个post-commit钩子做所有上述情况,但我不知道是否和如何SVN可以处理一个新的提交,直到前提交已经完成。

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

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

感谢

+1

通常,如果文件可以从存储库中的其他文件派生,则根本不会将该文件提交到存储库。任何需要这些/这些文件的人都可以根据需要派生出来。为什么需要将fileR文件存储在存储库中,何时可以简单地连接其他两个来获取它? –

+0

一个问题:为什么fileR需要存在?用户不能单独使用file1和file2吗?我认为需要更多的背景来弄清楚为什么你要这样做 - 对我来说这似乎很奇怪。 –

+0

由于遗留原因,fileR'需要存在。在我们的研究小组中,我们使用BibTeX来生成我们论文中的所有参考文献(这是fileR)。最近,我们意识到保留'fileR'与我们发布的论文和其他人发表的论文不是一个好主意,并且切换到两个单独的文件(一个用于我们,一个用于世界其他地方)。不幸的是,我们使用一些脚本为研究组中的个人自动生成出版物列表(我不想改变)。但我们仍然想保留传统文件。 – cdavid

回答

1

比方说,你做一个post-commit钩子做你想做什么?

  1. 我犯FILE1.TXT的变化。
  2. Post-commit挂钩提取更改并创建一个新文件fileR.txt
  3. 提交后更改提交此更改,这会导致您的预提交挂钩启动。
  4. 而且,你马上回第1步

还有你的服务器上创建一个工作拷贝的问题,即您的文章提交钩子可以操作。当有人进行提交时,您必须更新甚至签出服务器上的工作副本,对更改进行连接,然后在不触发提交挂钩的情况下执行新的提交。请记住,人们可能会创建分支,因此您可能必须拥有多个工作副本。

而且,虽然您的post-commit挂接完成了所有这些,但您的用户必须等待post-commit挂接才能完成。

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

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


我建议你看看Jenkins。Jenkins是一个连续的构建服务器。你可以做的是Jenkins在你完​​成一次提交后为你创建你的fileR.txt文件。这个文件可以很容易地从Jenkins服务器上下载并公开。您也可以带上您的fileR.txt,并为您创建PDF格式的人。

因此,您的组合文件仍然可用,并且可以通过其他进程下载,但它不会导致您的提交后挂接触发另一轮挂钩。而且,fileR.txt只能由有权访问该特定Jenkins作业的所有人阅读。

+0

感谢您的答案和指针。我会尝试你提到的东西。 – cdavid