git pull忽略shell脚本中的当前工作目录

时间:2016-01-23 19:21:01

标签: git shell sh git-pull cd

我试图让某种自动部署工作。

我目前的更新后挂钩如下所示:

#!/bin/sh

for ref in $@
do
        if [ $ref = "refs/heads/master" ]
        then
                echo "Deploying $ref to dev-domain"
                cd ~/www/dev-domain
                echo "" > system/lock
                if ! git pull --ff-only
                then
                        echo "Failed to pull"
                        exit
                fi
                if ! system/migrateDatabase
                then
                        echo "Failed to migrate"
                        exit
                fi
                rm system/lock
        fi
done

但我得到的只是:

remote: Deploying refs/heads/master to dev-domain
remote: fatal: Not a git repository: '.'
remote: Failed to pull

但文件锁文件将放在正确的位置。

所以,对我而言,似乎git pull忽略了当前的工作目录......我该如何解决这个问题? 或者我错过了不同的东西?

1 个答案:

答案 0 :(得分:1)

您需要在GIT_DIR之前取消git pull

如果你不这样做,git将使用variable GIT_DIR而不是PWD cd-ing改变了PWD而不是GIT_DIR。

正如Mark Longair的文章“Missing git hooks documentation”中提到的那样,GIT_DIR是由钩子设置的。

this answer旁边的Chris Johnsen中查看详情。