Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svn 如何编写批处理文件以更新服务器上提交的文件_Svn_Hook_Post Commit - Fatal编程技术网

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

Svn 如何编写批处理文件以更新服务器上提交的文件,svn,hook,post-commit,Svn,Hook,Post Commit,我是web开发者。我在自己的机器上编辑本地svn工作副本中的文件,我们的开发服务器是通过samba共享的磁盘,服务器的根目录也是工作副本,我想做的是,每当开发人员提交一些代码时,使用客户端svn post commit钩子自动更新服务器上的工作副本。我发现有两个批处理文件可以正确地做到这一点,一个是使用,另一个是使用,但问题是批处理文件都会更新整个工作副本,而不是更改的文件,这是非常缓慢的,通常需要一到两分钟。所以我认为它可能会更快,如果我只能更新更改的文件。或者mybe让批处理文件通过ssh连

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


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

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

svnlook changed REPOSITORY NAME  
  • 将命令的输出获取到文件中
  • 动态读取此文件并将其提取到SVN Update命令中
    我可以告诉您如何在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