Git post-receive钩子克隆成功,但是报告'不是git存储库'?

时间:2013-01-30 17:53:27

标签: git hook githooks

我在Git存储库中有一个post-receive钩子,它将存储库克隆到另一个目录,然后cd进入该目录。

#!/bin/bash --login

GIT_REPO="$HOME/oliverjash.me.git"

source "$HOME/.bash_profile"

checkout () {
  BRANCH="$1"
  TMP_GIT_CLONE="$2"

  git clone $GIT_REPO $TMP_GIT_CLONE
  cd $TMP_GIT_CLONE
  git status
}

checkout master "$HOME/tmp/oliverjash.me"
checkout project "$HOME/tmp/project.oliverjash.me"

exit

如果我在登录SSH时运行此脚本,git status工作正常。但是,当脚本作为post-receive挂钩执行时,git status会报告此信息:

remote: fatal: Not a git repository: '.'

我无法理解为什么会这样!

2 个答案:

答案 0 :(得分:1)

如果你真的想确保git命令能够正常运行,你可以添加:

  • --work-tree=$TMP_GIT_CLONE
  • --git-dir=$TMP_GIT_CLONE/.git

这样,git命令就会知道工作树和git repo在哪里考虑。

git --work-tree=... --git-dir=... clone ...

或者,因为git 1.8.5,详见this answer

git -C=$TMP_GIT_CLONE clone ...

答案 1 :(得分:0)

我需要在脚本顶部执行unset GIT_DIR