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

问题描述

|| 我是网络开发人员。我在自己的计算机上在本地svn工作副本中编辑文件,我们的开发服务器是通过samba共享的磁盘,并且服务器的根目录也是工作副本,我要做的就是使用一个客户端svn post-commit钩子,每当开发人员提交一些代码时,它都会自动更新服务器上的工作副本。我发现两个批处理文件可以正确执行此操作,一个正在使用subversion命令,另一个正在使用Tortoise SVN命令,但问题是两个批处理文件都更新了整个工作副本,而不是更改后的文件,这很慢,通常需要一到两分钟。因此,我认为如果我只能更新更改后的文件可能会更快。还是让批处理文件ssh到服务器并直接通过samba而不是直接通过samba进行更新,这是更好的做法? 对不起,我的英语不好,我们将不胜感激。     

解决方法

        您可以执行以下步骤: 1.使用svnlook命令找出已更改的文件
svnlook changed REPOSITORY NAME  
将命令的输出获取到文件中。 动态读取此文件,并将其提取到SVN Update Command中。 我可以告诉您如何在Linux中执行此操作,但是在批处理文件中尚不清楚。     ,        我有一个类似的问题,但是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,以便可以执行它们。 请随时对此帖子发表评论,并提供外观更好的解决方案。我现在所知道的是,此解决方案有效:)