post-receive git hook在命令行中不起作用

时间:2016-06-15 01:53:30

标签: git bash command-line hook

我已经在git中创建了一个web钩子,这样当我在我的Web服务器上推送到裸git repo时,文件会在实际的web目录中更新。这些是收件后文件中的相关行:

GIT_WORK_TREE=/srv/www/test1 git checkout -f
echo 'post-receive action complete' $(date) >> git_update_log

当我真正推动回购时,这很好用。但是当我尝试从命令行(通过ssh会话)执行它时,它不起作用。我已经尝试进入hooks目录并输入' ./ post-receive'或者'。后收到'我尝试过运行命令' GIT_WORK_TREE = / srv / www / test1 git checkout -f'从钩子目录内或从裸git仓库的根目录(钩子目录所在的位置)。没有骰子。

我甚至尝试切换到/ srv / www / test1并运行命令' GIT_DIR = / home / my_username / test1.git GIT_WORK_TREE = / srv / www / test1 git checkout -f&#39 ; - 这也不起作用。

我在这里缺少什么?据我所知,post-receive文件只是一个bash脚本(以#!/ bin / sh开头),为什么我不能从命令行运行它?

如果有任何相关性,该服务器上的Git版本为1.6.0.2。

更新 - 回答

回答我自己的问题,"我在这里错过了什么?":我对工作流程缺乏清晰的理解,我感到困惑checkout和{{1} }。

从命令行开始,事情按原样运行,但本地存储库中没有新文件要复制到Web目录; fetch仅在有可用的新文件(在本地仓库中)进行复制时复制文件。因此,要将新文件放入本地存储库,此命令有效:chekcout -f(感谢torek)。

然而,我发现fetch命令(在这种情况下)是不可靠/不稳定的(显然这是一种做事的一种愚蠢的方式),所以我最终采取了torek的建议并设置了一个提取镜子。我删除了repo目录(test1.git)并使用git fetch git@remoterepo.com:my_username/test1.git refs/heads/master:refs/heads/master将其重新创建为镜像。命令git clone --mirror git@remoterepo.com:my_username/test1.git适用于从远程仓库获取任何新文件,命令git --git-dir=/home/my_username/test1.git remote update适用于将新可用文件复制到网站文件夹。

0 个答案:

没有答案