我的svn repo是/ home / httpd / svn / project。工作副本是/ home / httpd / svn / project_work。我正在运行一个更新工作副本的post-commit脚本,然后运行测试站点的rsyncs。这很好用。
但我也需要从工作副本目录中删除已删除的文件。我知道如果我目前在我的工作副本目录中,这个脚本有效:
svn status | grep'^!' | sed's /! * //'| xargs -I%svn rm%
但是我的post-script在svn / hooks目录下运行。如何告诉上面的命令对工作副本目录中的文件进行操作,以便它可以成为我的提交后脚本的一部分?
我的脚本如下所示:
$SVN update $HOST/$SITE_WORK --non-interactive --username xxxxx --password xxxx >> $LOG
$RSYNC -azv --exclude=.svn $HOST/$SITE_WORK/* /home/httpd/sites/$SITEDIR/doc-root >> $LOG
答案 0 :(得分:1)
SVN服务器无法发送要在客户端上执行的命令。如果愿意,您可以在每个客户端上为别名svn运行svn和自定义脚本。
此外,当svn rm <filename>
svn up
时,所有客户端都会删除使用$ svn info aFile.txt
Path: aFile.txt
Name: aFile.txt
URL: http://xp-dev.com/svn/sof/trunk/aFile.txt
Repository Root: http://xp-dev.com/svn/sof
Repository UUID: d3d45886-b759-4dae-a297-3c88720da0c3
Revision: 2
Node Kind: file
Schedule: normal
Last Changed Author: wederbrand
Last Changed Rev: 2
Last Changed Date: 2011-12-05 19:53:11 +0100 (Mon, 05 Dec 2011)
Text Last Updated: 2011-12-05 19:53:37 +0100 (Mon, 05 Dec 2011)
Checksum: e5bc1e83330bccc8efe0e884b79a1c43
删除的文件。
从您的脚本中我看到您找到所有状态行开头!这表示您在不使用svn的情况下对工作副本进行了更改。来自manual
'!'
项目丢失(例如,您在不使用svn的情况下移动或删除了它)。这个 还表示目录不完整(结帐或更新) 被打断了。)
听起来你或你的用户做错了什么。
编辑:这是关于删除文件的测试会话的记录:
我已经将存储库检出两份工作副本,它们在我的磁盘上被称为sof和sof2 在沙发上我添加了aFile.txt并提交了它。在sof2上,我刚刚查看了该文件。这就是它现在的样子:
$svn rm aFile.txt
D aFile.txt
$ svn commit -m'file deleted'
Deleting trunk/aFile.txt
Committed revision 3.
$ l
<no files left in directory>
$ svn info aFile.txt
aFile.txt: (Not a versioned resource)
现在我将在sof
上删除它$ l
total 8
-rw-r--r-- 1 raven staff 36 Dec 5 19:53 aFile.txt
$ svn up
D aFile.txt
Updated to revision 3.
$ l
<no files shown, it has been deleted>
然后文件消失了,现在到了sof2,我将要获得最新的更新
{{1}}
如果你得到任何其他行为,那么这些东西真的很奇怪:)
答案 1 :(得分:1)
我建议你看看Jenkins。 Jenkins是一个连续构建系统,但它也非常适合做这类任务。
我建议的与你正在做的有点不同 - 特别是如果你在谈论httpd:
.svn
目录(尽管SVN 1.7并没有像以前版本那样在任何地方涂抹它们。)这将阻止您的工作目录处于不一致状态,即同一目录树中同时存在旧版本和新版本的文件。另外,这是自我恢复。如果由于某种原因旧的更新未完成,则新的构建将使所有内容再次正确。
通过使用Jenkins在检测到新的Subversion版本时执行此操作,您不再需要post-commit挂钩。问题是,当提交后挂钩正在运行时,你的用户必须坐在他们的办公桌前,等待Subversion在提交后的工作中通过nay或yea。另外,如果出现问题,您可以随时点击 rebuild 按钮重建工作目录。
以下是它的工作原理:
svn export
以创建新的工作目录。svn export
成功,然后将旧工作目录移动到另一个名称,将新工作目录重命名为旧位置,然后(可选)删除旧工作副本。从来没有时间旧工作目录处于不一致状态。