解释我为什么要这样做很复杂,但我想做的是为一个特定的git存储库配备一个post-receive hook,它执行以下操作:
收到后代码看起来像这样(简化):let" repo"是git存储库的名称,让" testdir"是一个兄弟目录的名称,最初是空的,让" dev"是分支的名称。
cd ../testdir
git clone --local ../repo .
git checkout dev
然而,当脚本中的代码进入" git checkout"时,git会回复"致命:不是git存储库:'。'"
我不知道为什么git认为" testdir"不是一个git存储库。如果我从命令行(而不是从post-receive中)运行该命令,那么它们可以正常工作。我不知道为什么这种行为会与收到后的行为不同。有什么想法吗?
答案 0 :(得分:1)
您需要在GIT_DIR
挂钩中取消设置post-receive
。问题是你的钩子脚本运行时GIT_DIR=.
,在你的cd和clone操作之后不再有用。
我设置了一个本地测试环境,当我的post-receive
脚本看起来像这样:
#!/bin/sh
cd ../testdir
git clone --local ../upstream.git .
git checkout dev
我明白了:
remote: fatal: Not a git repository: '.'
但如果我取消设置GIT_DIR
变量:
#!/bin/sh
unset GIT_DIR
cd ../testdir
git clone --local ../upstream.git .
git checkout dev
一切正常。