我是网站开发人员。我在自己的机器上编辑本地svn工作副本中的文件,我们的开发服务器是通过samba的共享磁盘,服务器的根目录也是工作副本,我想做什么是开发人员提交一些代码时使用客户端的svn post-commit钩子来自动更新服务器上的工作副本。我发现两个批处理文件可以正确地执行此操作,一个使用subversion command,另一个是使用Tortoise SVN command,但问题是批处理文件更新整个工作副本而不是更改的文件,这非常慢,通常需要一两分钟。所以我认为如果我可以更快仅更新已更改的文件。或者mybe是否更好地将批处理文件ssh到服务器并直接更新而不是通过samba?以及如何做到这一点?
对不起,我的英语很差,非常感谢任何帮助。
答案 0 :(得分:1)
您可以执行以下步骤:
1.使用svnlook命令查找已更改的文件
svnlook changed REPOSITORY NAME
我可以告诉你如何在Linux中执行此操作,但不清楚批处理文件。
答案 1 :(得分:1)
我有类似的问题,但Linux Server托管SVN。也许你可以从这里获取一些线索并更改它以匹配你的Windows系统。
<强> POST_COMMIT 强>
#!/bin/sh
wget http://localhost/update_svn.php
<强> update_svn.php 强>
<?php
$output = shell_exec('/media/disk3/velsvn/projects/hooks/svn_update_step1.sh');
echo "<pre>$output</pre>";
?>
<强> svn_update_step1.sh 强>
ssh -i /media/d/mykey/id_rsa velsvnuser@localhost /media/disk3/velsvn/projects/hooks/svn_update_step2.sh
svn_update_step2.sh
#!/bin/sh
cd /media/disk3/velsvn/projects/hooks
rm -f filelist
rm -f log
whoami >> log
svnlook dirs-changed /media/disk3/velsvn/projects/ | sed "s/^..//" | awk '{ print substr( $0, 9 ) }' >> /media/disk3/velsvn/projects/hooks/filelist; sed -i -e 's#^#/media/disk2/www/htdocs#' filelist; cat /media/disk3/velsvn/projects/hooks/filelist | xargs /usr/bin/svn up -N >> /media/disk3/velsvn/projects/hooks/log
注意:强> 1. / media / d / mykey / id_rsa是为SSH访问生成的密钥。这可确保系统不会等待用户提供密码以连接到SVN以及执行shell脚本。 2. POST-COMMIT文件和shell文件sh1和sh2给出+ x mod,以便它们可以执行。
请随时对此帖发表评论,并提供更好看的解决方案。我现在所知道的是,这个解决方案有效:)