SVN提交后的问题

时间:2010-02-03 06:58:56

标签: svn apache

我一直在谷歌搜索这些东西,虽然我得到了大量的结果,似乎没有什么能帮我解决问题。

我在远程Apache服务器上安装了SVN。我设置了我的存储库,并添加了我的所有代码文件。没问题。我在我的本地Windows机器上安装了TortoiseSVN,可以检查并提交文件而不会出现问题。我还检查了远程服务器上的文件,因为该项目是一个网站。我想做一个post commit钩子,所以每次我提交时,远程服务器的工作目录都会进行更新。我在hooks目录中制作了post-commit.tmpl的副本,并为所有用户设置了可执行标志。我的问题是,每次我通过TortoiseSVN进行提交时,我都会收到以下错误:

post-commit hook failed with error output:

暂时不介意提交后的实际内容 - 它根本就不执行。我一直在阅读有关用户,群组,权限等的所有这些帖子,我似乎无法全面了解。很多人都提到后提交必须由运行apache的同一个用户拥有,或类似的东西。我需要细节!如果为true,那么我如何确定哪个用户和组正在运行Apache?这是故事的结尾吗?我用来通过TortoiseSVN提交SVN的凭据怎么样?他们重要吗?是重要的只是提交后的权限和用户,还是整个svn安装?

我已经尝试将整个svn工作目录(hooks和all)的所有者设置为我能想到的每个可想到的组合(apache.apache,root.root,root.psaserv,apache.root),on和on 。目前我正在使用root / rootpassword作为我的Tortoise凭据。

这是我的hooks目录的内容:

-rwxr-xr-x 1 apache apache 2061 Feb  2 18:04 post-commit
-rw-r--r-- 1 apache apache 2015 Feb  2 07:44 post-commit.tmpl
-rw-r--r-- 1 apache apache 1638 Feb  2 07:44 post-lock.tmpl
-rw-r--r-- 1 apache apache 2255 Feb  2 07:44 post-revprop-change.tmpl
-rw-r--r-- 1 apache apache 1567 Feb  2 07:44 post-unlock.tmpl
-rw-r--r-- 1 apache apache 2934 Feb  2 07:44 pre-commit.tmpl
-rw-r--r-- 1 apache apache 2038 Feb  2 07:44 pre-lock.tmpl
-rw-r--r-- 1 apache apache 2764 Feb  2 07:44 pre-revprop-change.tmpl
-rw-r--r-- 1 apache apache 1979 Feb  2 07:44 pre-unlock.tmpl
-rwxrwxrwx 1 apache apache    0 Feb  2 19:48 sanity.txt
-rw-r--r-- 1 apache apache 2137 Feb  2 07:44 start-commit.tmpl
-rwsr-sr-x 1 root   root   4802 Feb  2 14:32 svnupdate
-rw-r--r-- 1 apache apache  212 Feb  2 14:32 svnupdate.c
伙计们,我在机智的尽头。请帮助一个可怜的Linux新手!

3 个答案:

答案 0 :(得分:2)

如果按如下方式运行它,您可能会更好地诊断它:

$ unset PATH
$ <your_svn_repo>/hook/post-commit <your_svn_repo> <some_revision_number>

SVN的提交挂钩在一个非常有限的环境中运行,执行路径上没有任何内容,所以你必须确保你编写的每个脚本都能以这种方式运行。

跟进你的评论,我认为发生的事情是文件中的第一行有一个Windows行结尾,而不是unix版本。您可能在记事本或其他一些不熟悉行结尾的Windows编辑器中编辑过该文件。

在命令提示符下,可能是您使其运行的最快路径(并假设您在Linux或安装了dos2unix的系统上运行):

dos2unix /var/www/vhosts/example.com/svn/hooks/post-commit

如果没有dos2unix命令,那么尝试在编辑器中打开post-commit钩子,让你更改行结尾(在Windows上,我相信Notepad +会,但我不是Windows人员),如Emacs,TextMate,或者Vim,并删除第一行末尾的额外字符(可能还有其他所有行)。

答案 1 :(得分:0)

以下是来自svn.apache.org

的post-commit.tmpl的前几行
#!/bin/sh
# POST-COMMIT HOOK
#
# The post-commit hook is invoked after a commit. Subversion runs
# this hook by invoking a program (script, executable, binary, etc.)
# named 'post-commit' (for which this file is a template) with the
# following ordered arguments
#
# [1] REPOS-PATH (the path to this repository)
# [2] REV (the number of the revision just committed)
#
# The default working directory for the invocation is undefined, so
# the program should set one explicitly if it cares

第一行告诉shell这是一个shell脚本,并提供/ bin / sh的路径作为此脚本的解释器。您看到的错误消息意味着shell无法找到解释器。尝试运行

which sh

检查sh的位置。

我问你unset PATH,因为许多常见的钩子脚本错误与路径问题有关。

答案 2 :(得分:0)

正如larrys指出的那样,我的post-commit脚本有windows行结尾(我在notepad ++中编辑,并通过FTP上传)。我通过在VIM中打开文件并键入

来修复此问题
:set fileformat=unix