从post-receive hook

时间:2015-09-04 23:25:40

标签: git bash

解释我为什么要这样做很复杂,但我想做的是为一个特定的git存储库配备一个post-receive hook,它执行以下操作:

  1. 转到测试目录
  2. 克隆刚刚更新的项目。
  3. 查看特定分支。
  4. 做一些测试
  5. 收到后代码看起来像这样(简化):let" repo"是git存储库的名称,让" testdir"是一个兄弟目录的名称,最初是空的,让" dev"是分支的名称。

    cd ../testdir
    git clone --local ../repo .
    git checkout dev
    

    然而,当脚本中的代码进入" git checkout"时,git会回复"致命:不是git存储库:'。'"

    我不知道为什么git认为" testdir"不是一个git存储库。如果我从命令行(而不是从post-receive中)运行该命令,那么它们可以正常工作。我不知道为什么这种行为会与收到后的行为不同。有什么想法吗?

1 个答案:

答案 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

一切正常。