【问题标题】:Post commit hook problem for提交提交钩子问题
【发布时间】:2011-10-16 02:57:49
【问题描述】:

我想更新已更改的文件,因为我的 SVN 大小为 20GB。

我的 SVN 存储库位于:/media/disk3/velsvn/projects
我的结帐文件夹位于:/media/disk2/www/htdocs


(参考:Using SVN post-commit hook to update only files that have been committed

我的提交后文件如下所示:

#!/bin/bash
REPOS="$1"  
REV="$2"  
cd /media/disk2/www/htdocs  
svnlook dirs-changed /media/disk3/velsvn/projects | xargs /usr/bin/svn up -N

(我使用的是 REPOS 和 REV,但它们给出了错误,所以我删除了它们。在使用 REV 时,它曾经说 REV 未定义。在使用 REPOS 时,它曾经说 [REPOS]/format 不是文件或不退出。)

尝试执行此文件时出现以下错误 -
跳过'PHP/htdocs/supporter' 跳过“PHP/htdocs/campus”


任何人都可以在这方面帮助我。我浪费了 2 天的时间来解决这个问题,但没有找到任何解决方案。

问候,

尼丁

【问题讨论】:

    标签: svn post-commit post-commit-hook


    【解决方案1】:

    我可以通过更改程序来解决问题。在这里列出它,因为它可能对其他人有帮助。可能不是一个完美的解决方案,但至少它有效。

    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 以便它们可以被执行。

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

    【讨论】:

    • 您不需要网络服务器来执行本地命令行脚本。
    猜你喜欢
    • 2015-01-13
    • 2022-01-07
    • 2013-12-15
    • 2017-02-08
    • 2016-09-02
    • 2015-03-04
    • 2012-06-06
    • 2017-04-26
    相关资源
    最近更新 更多