【问题标题】:git post-receive not working correctlygit post-receive 无法正常工作
【发布时间】:2012-03-28 10:45:52
【问题描述】:

我有以下问题。我已将“接收后”更新为 cd 到某个目录,然后将 repo 拉入以部署它,如下所示:

#!/bin/bash
cd /var/www/site
git pull origin master

但是,每当我在本地机器上执行“git push origin master”时,我都会得到以下信息:

Counting objects: 5, done.
Delta compression using up to 2  threads.
(etc..)
remote: fatal: Not a git repository: '.'

然而,当我手动 cd 到 /var/www/site 并执行 git pull origin master 时,它运行良好。

【问题讨论】:

    标签: git git-post-receive


    【解决方案1】:

    使用未设置的 GIT_DIR 如下

    #!/bin/bash
    cd /var/www/site || exit
    unset GIT_DIR
    git pull origin master
    exec git-update-server-info
    

    您可以在此处查看有关 GIT_DIR 的更多信息。 Git Loves the Environment

    【讨论】:

    • 太棒了,正是我所需要的。您介意解释一下为什么需要这样做吗?
    • GIT_DIR 是您可以为各种 git 命令设置的少数环境变量之一。在接收后挂钩中,$GIT_DIR 始终 (?) 设置为 .。如果你在其他地方cdgit pull 仍然看到$GIT_DIR 设置为. 并希望在. 中找到repo,但是你已经搬家了,它不在那里。清除它会使 git 回到它的“正常”行为(查看./.git,在你cd-ed 的地方)。
    • 难道不能简单地将GIT_DIR 设置为cd 编入的目录吗?如果这是GIT_DIR 的设计目的,那么将GIT_DIR 重新设置,然后将cd 单独放入工作目录似乎是多余的。没有这样做是有原因的吗?
    【解决方案2】:

    另一种选择是您可以在命令中提及工作目录和 git 目录。

    git --work-tree=/home/user/repos/my_app --git-dir=/home/user/repos/my_app/.git <command>
    

    例如:

    git --work-tree=/home/user/repos/my_app --git-dir=/home/user/repos/my_app/.git status
    

    【讨论】:

      猜你喜欢
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-14
      • 1970-01-01
      • 2017-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多