我在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: '.'
我无法理解为什么会这样!
答案 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
。