SVN update-commit需要Hook帮助

时间:2011-10-19 17:41:26

标签: linux svn

我们有一个基于Linux的Web服务器(Media Temple),我们通过他们的DV托管解决方案托管多个域。我已成功为其中一个项目创建了SVN存储库,但现在我希望它能在committ上同步实时Web文件夹。 repo和站点文件都在同一台服务器上......路径如下:

SVN Repo在这里:/ home / svn / repositories /<网站名称>

Live Site文件位于:/ var / www / vhosts /< domain> / httpdocs /< subdomain>

我可以毫无问题地连接回购。现场网站也有效。现在我只需要让它们同步。

我已根据指南创建了以下更新文件,并正确更新了POST-COMMIT.tmpl,但仍然没有骰子。 http://www.frenssen.be/content/using-subversion-automatically-update-live-website

以下是我的更新程序中的代码:

#include <stddef.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
    execl("/usr/bin/svn", "svn", "update",
        "/var/www/vhosts/<domain>/httpdocs/<subdomain>",
        (const char *) NULL);
    return(EXIT_FAILURE);
}

我在POST-COMMIT.tmpl文件中使用以下命令调用该程序:

#!/bin/sh
/home/svn/repositories/autoupdate/autoupdate

我缺少什么想法?必须有一种更简单的方法来让文件同步吗?

3 个答案:

答案 0 :(得分:2)

您需要将post-commit.tmpl重命名为post-commit - 也就是说,删除.tmpl后缀。请参阅“Implementing Repository Hooks” from Version Control with Subversion.(.tmpl文件的名称是这样的,以显示它们是示例,用于构建自己的脚本的模板。)

此外,您引用的指南建议将挂钩的所有权更改为apache。它们实际上意味着您的存储库中的任何用户所有者(显然是指南编写者的apache)。

答案 1 :(得分:0)

实际上还没有回答(但是)您可以在服务器上调整并执行这些命令以收集有关您的设置的一些信息:

REPO=/home/svn/repositories/XYZ
WORK=/var/www/vhosts/FOO/httpdocs/BAR

set -x

ls -ld $REPO $REPO/hooks $REPO/hooks/post-commit* $REPO/db/revs
head -2 $REPO/hooks/post-commit | hexdump -C
svnlook youngest $REPO

ls -ld $WORK $WORK/.svn $WORK/.svn/entries
svn info $WORK

请将输出附加到您的问题中。

编辑输出已粘贴未格式化为一系列注释。这是相关部分:

svn info $WORK 
+ svn info /var/www/vhosts/unionjobtracker.com/httpdocs/pdc30/ 
svn: '/var/www/vhosts/unionjobtracker.com/httpdocs/pdc30' is not a working copy 

ls -ld $WORK $WORK/.svn $WORK/.svn/entries 
+ ls --color=tty -ld /var/www/vhosts/unionjobtracker.com/httpdocs/pdc30/ /var/www/vhosts/unionjobtracker.com/httpdocs/pdc30//.svn /var/www/vhosts/unionjobtracker.com/httpdocs/pdc30//.svn/entries

ls: /var/www/vhosts/unionjobtracker.com/httpdocs/pdc30//.svn: No such file or directory 
ls: /var/www/vhosts/unionjobtracker.com/httpdocs/pdc30//.svn/entries: No such file or directory 
drwxrwxrwx 8 root root 4096 Oct 19 13:15 /var/www/vhosts/unionjobtracker.com/httpdocs/pdc30/

这意味着,$ WORK不是SVN工作副本。您的问题中的链接解释了“步骤1:将存储库签出到Web根目录”

部分中所需的步骤

答案 2 :(得分:0)

  1. 网络树内的WC 总是坏主意
  2. 当您将网站导入到repo时,它不会自动将网站转换为WC
  3. 如果仍然希望忽略我的p.1,你必须1次执行svn co(清空之前的??? TBT)站点位置才能获得WC
  4. 更正确的提交后挂钩方式(来自我的POV)是从网站删除所有旧数据并将svn导出HEAD导出到网站路径