Git - post-receive hook with git pull "Failed to find a valid git directory"

14,196

Solution 1

While the hook is running, GIT_DIR and (if the worktree was defined explicitly) GIT_WORK_TREE are set. That means your pull won't run with the second repository in the directory you changed to.

Try git --git-dir ~/websites/testing/.git --work-tree ~/websites/testing pull; or unset git's repo-local environment with this:

unset $(git rev-parse --local-env-vars)

More info on these environment variables in man 1 git.

Solution 2

One thing I experienced was that using the post-update hook '--git-dir' worked great but git was still complaining about a missing working tree (despite using '--work-tree')

In short, this did not work:

git --git-dir /path/to/websites/testing/.git --work-tree /path/to/websites/testing pull

whereas this worked:

cd /path/to/websites/testing
git --git-dir /path/to/websites/testing/.git pull

Solution 3

Doesn't this work?

cd /home/smb/websites/testing
env -i git pull

Edited

Better still

cd /home/smb/websites/testing
unset GIT_DIR
git pull
Share:
14,196

Related videos on Youtube

Joonas Vali
Author by

Joonas Vali

My primary focus over the past 15 years has been full-stack web development and implementation, experimenting with technologies while thinking openly about how tech and users can interact. Currently, acting as a web consultant for goal-oriented businesses and concentrating on designing interactive systems, UX research/ implementation and engineering/development of elaborate online platforms.

Updated on September 17, 2022

Comments

  • Joonas Vali
    Joonas Vali over 1 year

    It's very weird but when setting a git repository and creating a post-receive hook with:

    echo "--initializing hook--"
    cd ~/websites/testing
    echo "--prepare update--"
    git pull
    echo "--update completed--"
    

    the hook runs indeed, but it never manage to run git pull properly:

    6bfa32c..71c3d2a  master -> master
    --initializing hook--
    --prepare update--
    fatal: Not a git repository: '.'
    Failed to find a valid git directory.
    --update completed--
    

    so I'm asking myself now, how it's possible to make the hook update the clone with post-receive?

    in this case the user running the processes is the same, and its everything inside the user folder so I really don't understand...because if if I go manually into

    cd ~/websites/testing
    git pull
    

    it works without any problem...

    any help on that would be pretty much appreciated

    Thanks a lot

  • Joonas Vali
    Joonas Vali over 14 years
    Thanks a lot for that Tobu, it really works, I will check out more information about it too. Cheers