我们使用git和中央repo(使用Gitosis)。我创建了一个post-receive钩子,当更改被推送到中央仓库时,生成一个发送到dev邮件列表的电子邮件,并从git仓库中的文档文件夹生成文档。Git post-receive hook不工作
因此,在〜混帐/我有一个目录,我们将称之为“一”包含混帐回购协议的副本。后收到钩的样子:
#!/bin/bash
cd ~git/repositories/a.git
. ~git/post-receive-email &> /dev/null
(cd ~git/a && git pull &> ~git/pull_log.log && php ~git/a/scripts/generate_markdown_documentation.php &> ~git/doc_log.log)
电子邮件脚本工作,但是文档生成是没有的。 pull_log.log的内容是:
fatal: Not a git repository: '.'
这让我觉得,它不改变正确的目录在上面的脚本中的第5行。我错了吗?我怎样才能使这个工作?
编辑:我已经更新了回复中建议的post-receive hook。该脚本现在是:
#!/bin/bash
function die {
echo "$*" >&2; exit 1
}
function checkgit {
[ -d "$1/.git" ] || die "$1 could not possibly be a git repo; $1/.git is not a dir"
}
cd ~git/repositories/a.git
. ~git/post-receive-email &> /dev/null
(set -x
checkgit ~git/a
cd ~git/a
checkgit .
pwd
git pull
php ~git/a/scripts/generate_markdown_documentation.php)
而且我从混帐推以下的输出:
+ checkgit /var/git/a
+ '[' -d /var/git/a/.git ']'
+ cd /var/git/a
+ checkgit .
+ '[' -d ./.git ']'
+ pwd
/var/git/a
+ git pull
fatal: Not a git repository: '.'
+ php /var/git/a/scripts/generate_markdown_documentation.php
更多的帮助?
哦,如果我运行该脚本自己,它的工作原理(我运行它说挂钩/后接收)
发现了这个问题,这要归功于serverfault - 基本上,环境变量GIT_DIR
和GIT_WORK_TREE
设置当挂钩运行时,这些影响git拉动不利。取消设置变量可以解决问题。
将'git pull'更改为'pwd'并查看日志中显示的内容。 – 2010-02-23 00:57:28
哦!讨厌。 +1用于追踪问题并杀死它! – 2010-02-25 03:05:36
你是如何找到pull_log.log文件的?我不知道日志存储在哪里... – munmunbb 2015-11-16 23:57:52