我希望在有人推送到远程存储库后自动更新我的redmine项目存储库。目前,在redmine中的gin已经启动并正常工作。但是在使用钩子进行自动更新后,我在redmine中得到了“在存储库中找不到条目或修订版”的错误。
为了在redime中设置git,我遵循了redmine wiki,因此使用git clone --bare
创建了裸存储库。
我使用以下命令来更新redmine的git存储库:cd /srv/www/redmine.domain.com/git_repositories/linode.git && git fetch && git reset --soft refs/remotes/origin/master
- 如果从
git
用户下的命令行运行,手动更新可以正常工作
手动执行时的截图如下:
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From domain.com:linode
* [new branch] master -> origin/master
- 当运行
post-receive
钩子时,相同的内容无法正确工作(请参见上面的错误)。在相同的用户(git)下运行。钩子的第一行是#!/bin/sh
配置:ubuntu上的git(1.7.0.4)+ gitolite(1.5.7)
我通过命令SET检查了GIT_DIR系统变量 remote: /srv/www/redmine.domain.com/git_repositories/linode.git[K remote: GIT_DIR='.'[K
我甚至尝试在钩子中设置git路径
export GIT_DIR=/srv/www/redmine.domain.com/git_repositories/linode.git
or unset GIT_DIR
但是没有任何帮助。
钩子的结果
echo "Post receive-hook => updating Redmine repository"
#env -i git reset --hard
#unset $(git rev-parse --local-env-vars)
#unset GIT_DIR
cd /srv/www/redmine.domain.com/git_repositories/linode.git
pwd
git fetch
git reset --soft refs/remotes/origin/master
是
Pushing to git@domain.com:linode
remote: Post receive-hook => updating Redmine repository[K
remote: From domain.com:linode[K
remote: /srv/www/redmine.domain.com/git_repositories/linode.git[K
remote: 4755447..13b8e3d master -> origin/master[K
To git@domain.com:linode
4755447..13b8e3d master -> master
我尝试了来自calling-git-pull-from-a-git-post-update-hook和git-post-receive-hook-with-git-pull-failed-to-find-a-valid-git-directory的一些提示,但没有帮助。
更新
如果我尝试
echo "Post receive-hook => updating Redmine repository"
export GIT_DIR=
cd /srv/www/domain.com/git_repositories/linode.git
echo "Resetting working tree..."
git reset --hard
echo "Finished resetting working tree."
git fetch
git reset --soft refs/remotes/origin/master
我理解为:“我在Redmine仓库中看到这个+Redmine仓库未经修改,可以从Redmine访问。”
Pushing to git@domain.com:linode
remote: Post receive-hook => updating Redmine repository[K
remote: Resetting working tree...[K
remote: fatal: Not a git repository: ''[K
remote: Finished resetting working tree.[K
remote: fatal: Not a git repository: ''[K
remote: fatal: Not a git repository: ''[K
To git@domain.com:linode
c553a15..854d159 master -> master
更新2
我发现如果我从钩子中执行git fetch
,然后从命令行执行git reset --soft refs/remotes/origin/master
,它不起作用。我在Redmine中得到上面的错误。如果我从命令行执行git fetch
,则一切正常。对我来说,来自钩子和命令行的`git fetch`命令的控制台消息看起来相同。
git fetch && git reset --soft
,它可以正常工作(=我可以从redmine看到更新的repo),但如果从钩子中触发,我会在redmine中收到错误。 - Radek