SVN 提交后导出不起作用

标签 svn export centos centos5 post-commit

我正在尝试在 CentOS 服务器上运行 SVN 的提交后脚本。我想在每次提交到存储库后从 var/svn/project 运行 svn export --force 到/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秒,也许2分钟。无论完成提交后 Hook 需要什么。 child ,你心里想,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/

相关文章:

SVN 最佳实践 - 检查根文件夹

svn - 在 SVN 存储库中搜索文件名

SVN - 更改现有存储库上的目录结构

delphi - 用于将 Delphi TDataSet 导出到 native XLS 的开源组件或单元,无需安装 Excel

linux - 当我让笔记本电脑进入休眠状态时,在 VPS (linux) 上运行的 NodeJS 应用程序崩溃

svn:查询 mergeinfo 需要 FSFS 文件系统架构的第 3 版;

r - 将大矩阵保存为 csv 文件 - excel 中多行的标题

database - 使用 pgAdmin 导出 Postgresql 表数据

linux - 如何在 php 文件中搜索特定关键字?

RPostgreSQL 安装错误 - RPostgreSQL.so : undefined symbol: PQpass