因此,在 ~git/ 中,我有一个目录,我们称之为“a”,其中包含 git 仓库的克隆。post-receive 钩子如下:
#!/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挂钩。现在脚本如下:
#!/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 )
我运行git push命令后,得到了以下输出:
+ 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
还需要更多的帮助吗?
哦,如果我自己运行脚本,它能正常工作(我通过运行hooks/post-receive命令来运行它)。
通过serverfault发现了问题——基本上,环境变量GIT_DIR
和GIT_WORK_TREE
在钩子运行时被设置,并且这些会对git pull产生不良影响。取消设置这些变量可以解决问题。
git pull
更改为pwd
并查看日志中显示的内容。 - Dennis Williamson