代码之家  ›  专栏  ›  技术社区  ›  Ty W

使用post update hook对另一个repo执行“git pull”时获取“fatal:not a git repository:”。“

  •  79
  • Ty W  · 技术社区  · 14 年前

    我正在尝试在web服务器上建立一个裸git repo(hub)和一个开发站点工作副本(prime)。我试着模仿它 this article . 我希望开发工作副本在hub repo被推送到时得到更新。我觉得这件事的关键是 post-update

    #!/bin/sh
    whoami
    cd /path/to/working-copy/
    RET=`git pull`
    echo $RET
    

    更新

    当我将更改从本地repo推送到裸集线器时,我从更新后脚本获得以下输出:

    remote: sites
    remote: fatal: Not a git repository: '.'
    

    但是,如果我以用户“站点”的身份SSH到服务器并手动执行此脚本,那么对于此钩子或脚本可能出现的问题,有什么好主意吗?

    5 回复  |  直到 14 年前
        1
  •  174
  •   Ty W    14 年前

    这是最终成功的剧本。我想我最初错过的阻止它远程工作的一点是 unset GIT_DIR

    #!/bin/sh
    cd /path/to/working-copy/ || exit
    unset GIT_DIR
    git pull repo branch
    
    exec git-update-server-info
    
        2
  •  28
  •   Geraldo Luis da Silva Ribeiro    14 年前

    请改为:

    #!/bin/sh
    cd /path/to/working-copy/
    env -i git pull
    
        3
  •  0
  •   Zvika Naveh    10 年前

    尽管如此 取消设置GIT_DIR

    当您在其他地方错误地设置GIT_DIR时,就会出现问题。

    你可以加上: 它会起作用的

        4
  •  0
  •   ThorSummoner    10 年前

    在我的例子中,我指定了一个工作树,这会中断一些命令,比如 pull (或者更准确地说 fetch

    要在git配置中取消设置工作树,请执行以下操作:

    git config --unset core.worktree
    

    (还有其他方法可以设置工作树)

    除非你自己先用一个定制的工作树在你周围挖这个洞,否则你的问题就不会有任何改变。

    玩笑:

    这对我意味着git内部使用与工作树相关的路径+ .git/ 在某些情况下。根据我的经验,除了git最基本的部分之外,worktree并没有得到很好的支持。我还没有做过彻底的实验,如果我正确地设置Git directory config变量,Git可能会有一些行为,但我没有使用它。

        5
  •  -1
  •   Ariejan    14 年前

    您可能有权限问题。我不知道你是如何设置你的裸git回购协议的,但是如果它运行在 git 用户,确保 吉特 允许用户执行 git pull

    (可选)尝试此操作以了解运行挂钩时您是什么用户:

    echo `whoami`