gpt4 book ai didi

SVN 提交后导出不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 17:16:08 26 4
gpt4 key购买 nike

我正在尝试在 CentOS 服务器上运行 SVN 的提交后脚本。我想在每次提交到存储库后运行 svn export --force from var/svn/project to/var/www/project。尽管我尝试了很多替代方案,但我还是无法让它工作。如果有人可以发布可以在没有任何用户权限问题的情况下运行的脚本,我将不胜感激。

/var/svn/project/hooks 下的提交后文件示例:

#!/bin/sh
sudo /usr/bin/svn export --force svn://domain/var/svn/project /var/www/project

如果我由 root 用户直接从 SSH 运行脚本而不是在真正的 SVN 提交之后运行脚本,它就可以工作。

最佳答案

我感觉 sudo 失败了。

这并不重要,因为你想做的是一个坏主意。该存储库导出有多大?它需要多长时间。 20秒? 2 分钟?

假设您是 Subversion 用户,并且您尝试 checkin 更改。你做了一个提交,然后突然你的终端似乎卡住了。也许20秒,也许两分钟。完成提交后 Hook 所需的一切。男孩,你自己想想,Subversion 太慢了......

一个更好的方法是使用 crontab。而且,如果您有能力以 root 身份执行操作,那么您当然可以执行 crontab。

跟踪最新的 Subversion 修订。然后,如果您检测到更改,则进行导出。简单的脚本,易于实现,并且在等待导出时不会卡住 Subversion。

对了,什么用户在运行Subversion服务器进程。那是执行 Hook 的用户。如果您在 /etc/sudoers 文件中没有将该用户设置为不需要密码,您的提交后 Hook 将失败。此外,Subversion Hook 没有路径,因此它们无法找到 sudo 命令,您必须在它所在的任何目录前加上前缀。

尽管如此,即使您让它工作,它仍然是一个坏主意

这是创建一个 crontab 的尝试,它将执行您想要的操作。完全未经测试。我今晚根本没有时间。然而,它会给你这样的想法:

#! /bin/bash
REPO_URL="http://...."
DIR=... #Where you want the export
LAST_REV_FILE=/var/run/svn.last.rev
SVN=/usr/bin/svn
SED=/usr/bin/sed
current_rev=$($SVN info $REPO_URL | $SED -n '/^Revision: /s/^Revision: //p')
if [ ! -f $LAST_REV_FILE ]
then
echo $current_rev > $LAST_REV_FILE
exit 0
fi

#You're here if there is a last.rev.file
last_rev=$(echo $LAST_REV_FILE)
[ $last_rev -ge $current_rev ] && exit 0

# New Revision
echo $current_rev > $LAST_REV_FILE
rm -rf $DIR
$SVN export $REPO_URL $DIR

关于SVN 提交后导出不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12905748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com