Git post接收钩子克隆成功,但报告';不是git存储库';?
我在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
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 ...