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

Git post接收钩子克隆成功,但报告';不是git存储库';?,git,hook,githooks,Git,Hook,Githooks,我在Git存储库中有一个post-receivehook,它将存储库克隆到另一个目录中,然后将cds克隆到该目录中 #!/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_CLON

我在Git存储库中有一个
post-receive
hook,它将存储库克隆到另一个目录中,然后将
cd
s克隆到该目录中

#!/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
hook执行时,
git status
会报告以下情况:

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

我不明白这是为什么

我需要在脚本顶部执行
取消设置GIT_DIR

如果您确实想确保GIT命令正常运行,可以添加:

  • --工作树=$TMP\u GIT\u克隆
  • --git dir=$TMP\u git\u CLONE/.git

这样,Git命令将知道工作树和Git RePo在哪里考虑。

git --work-tree=... --git-dir=... clone ...
或者,从git 1.8.5开始,详细内容如下:


如果您
echo$(pwd)
git status
之前,它是您期望的目录吗?如果是,该目录中是否有git存储库?是的,我有,如果运行
ls-la
,我可以清楚地看到
.git
!有趣。为什么它不只是使用CWD中的存储库?@OliverJosephAsh,因为
GIT_DIR
是在脚本执行时设置的,而不是在脚本中完成的
cd
。但在脚本/钩子中,显式设置工作树和git dir总是更可取的:没有歧义。
git -C=$TMP_GIT_CLONE clone ...