2

post-receive在 Git 存储库中有一个钩子,它将存储库克隆到另一个目录,然后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: '.'

我不明白这是为什么!

4

2 回答 2

1

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

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

这样,git 命令将知道工作树和要考虑的 git 存储库在哪里。

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

或者,从 git 1.8.5 开始,如本答案所述:

git -C=$TMP_GIT_CLONE clone ...
于 2013-01-30T20:42:32.163 回答
0

我需要unset GIT_DIR在脚本的顶部做。

于 2013-01-30T20:38:57.500 回答