我想在有人推送到远程仓库后自动更新我的 redmine 项目仓库。目前 redmine 中的 Gin 已经启动并且工作正常。但是在使用 Hook 自动更新后,我得到 The entry or revision was not found in the repository.
in redmine.
要在 redime 中设置 git,我遵循了 redmine wiki所以 repo 是通过 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
Hook 时同样无法正常工作(参见上面的错误)。在同一用户 (git) 下运行。钩子(Hook)的第一行是#!/bin/sh
配置: git (1.7.0.4) + gitolite (1.5.7) on ubuntu
我通过命令SET检查了GIT_DIR系统变量 远程:/srv/www/redmine.domain.com/git_repositories/linode.git[K 远程:GIT_DIR='.'[K
我什至尝试通过
设置git path
export GIT_DIR=/srv/www/redmine.domain.com/git_repositories/linode.git
or unset GIT_DIR
但没有任何帮助。
钩子(Hook)的结果
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 访问
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
我发现如果我从钩子(Hook)中执行 git fetch
然后从命令行执行 git reset --soft refs/remotes/origin/master
它不会工作。我在 redmine 中收到上述错误。我从命令行执行 git fetch
然后一切正常。来自钩子(Hook)和命令行“git fetch”命令的控制台消息在我看来是一样的。
最佳答案
我确实知道是什么和为什么,但是在 git fetch
通过钩子(Hook)执行后(我使用 gitolite)一些文件(可能是新文件)具有 redmine 不喜欢的权限。
chmod -R 770 redmine_repo.git
成功了
关于git - 从命令行可以,但是钩子(Hook)(git),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4144853/