Svn 如何编写批处理文件以更新服务器上提交的文件
我是web开发者。我在自己的机器上编辑本地svn工作副本中的文件,我们的开发服务器是通过samba共享的磁盘,服务器的根目录也是工作副本,我想做的是,每当开发人员提交一些代码时,使用客户端svn post commit钩子自动更新服务器上的工作副本。我发现有两个批处理文件可以正确地做到这一点,一个是使用,另一个是使用,但问题是批处理文件都会更新整个工作副本,而不是更改的文件,这是非常缓慢的,通常需要一到两分钟。所以我认为它可能会更快,如果我只能更新更改的文件。或者mybe让批处理文件通过ssh连接到服务器并直接更新(而不是通过samba)更好吗?如何做到这一点Svn 如何编写批处理文件以更新服务器上提交的文件,svn,hook,post-commit,Svn,Hook,Post Commit,我是web开发者。我在自己的机器上编辑本地svn工作副本中的文件,我们的开发服务器是通过samba共享的磁盘,服务器的根目录也是工作副本,我想做的是,每当开发人员提交一些代码时,使用客户端svn post commit钩子自动更新服务器上的工作副本。我发现有两个批处理文件可以正确地做到这一点,一个是使用,另一个是使用,但问题是批处理文件都会更新整个工作副本,而不是更改的文件,这是非常缓慢的,通常需要一到两分钟。所以我认为它可能会更快,如果我只能更新更改的文件。或者mybe让批处理文件通过ssh连
对不起,我的英语很差,如果有任何帮助,我们将不胜感激。您可以执行以下步骤:
1.使用svnlook命令查找已更改的文件
svnlook changed REPOSITORY NAME
我可以告诉您如何在Linux中执行此操作,但在批处理文件中不清楚 我也遇到了类似的问题,但与承载SVN的Linux服务器有关。也许你可以从这里得到一些线索,并将其更改为与你的Windows系统相匹配 提交后提交
#!/bin/sh
wget http://localhost/update_svn.php
更新_svn.php
<?php
$output = shell_exec('/media/disk3/velsvn/projects/hooks/svn_update_step1.sh');
echo "<pre>$output</pre>";
?>
注意:
1. /media/d/mykey/id\u rsa是为SSH访问生成的密钥。这确保了系统不会等待用户提供密码来连接到SVN以及执行shell脚本。
2.POST-COMMIT文件和shell文件sh1和sh2被赋予+x mod,以便可以执行它们
请随意评论这篇文章,并提供一个更好的解决方案。我现在只知道,这个解决方案是有效的:)
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