git - 从命令行可以,但是钩子(Hook)(git)

标签 git githooks

我想在有人推送到远程仓库后自动更新我的 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/

相关文章:

git - GIT 的常见 bugzilla Hook 是什么?

git - 自动将推送的文件从一个 GitHub 存储库复制到另一个

git - 如何防止 git 分支被 merge 到另一个?

Git 接收/更新 Hook 和新分支

python - 如何设置 Git 以将 python 应用程序文件部署到 Ubuntu Server 中?

git - "user cancelled certificate check"在 TFS 2015 版本中克隆 BitBucket git 存储库时出错

git - 如何 gitignore *仅* 文件?

git - 如何在发布定义时访问 VSTS Source Repo 中的文件?

java - 为什么 Gradle 在另一个 git 分支中创建文件?

Git 钩子(Hook) : enable echoing commands