如何编写批处理文件以更新已在服务器上提交的文件

时间:2011-06-14 11:42:05

标签: svn hook post-commit

我是网站开发人员。我在自己的机器上编辑本地svn工作副本中的文件,我们的开发服务器是通过samba的共享磁盘,服务器的根目录也是工作副本,我想做什么是开发人员提交一些代码时使用客户端的svn post-commit钩子来自动更新服务器上的工作副本。我发现两个批处理文件可以正确地执行此操作,一个使用subversion command,另一个是使用Tortoise SVN command,但问题是批处理文件更新整个工作副本而不是更改的文件,这非常慢,通常需要一两分钟。所以我认为如果我可以更快仅更新已更改的文件。或者mybe是否更好地将批处理文件ssh到服务器并直接更新而不是通过samba?以及如何做到这一点?

对不起,我的英语很差,非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您可以执行以下步骤:
1.使用svnlook命令查找已更改的文件

svnlook changed REPOSITORY NAME  
  1. 将命令输出到文件中。
  2. 动态读取此文件并将其提取到SVN Update Command。
  3. 我可以告诉你如何在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,以便它们可以执行。

请随时对此帖发表评论,并提供更好看的解决方案。我现在所知道的是,这个解决方案有效:)