我一直在谷歌搜索这些东西,虽然我得到了大量的结果,似乎没有什么能帮我解决问题。
我在远程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新手!
答案 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