1

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

对不起,我的英语很差,任何帮助将不胜感激。

4

2 回答 2

1

我遇到了类似的问题,但是 Linux 服务器托管 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 以便它们可以被执行。

请随时评论这篇文章并提供更好看的解决方案。我现在所知道的是,这个解决方案有效:)

于 2011-08-17T06:55:32.550 回答
1

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

svnlook changed REPOSITORY NAME  
  1. 将命令的输出保存到文件中。
  2. 动态读取此文件并将其提取到 SVN 更新命令中。

我可以告诉你如何在 Linux 中执行此操作,但不清楚批处理文件。

于 2011-07-30T04:33:01.727 回答