You have various diagnostics to run as suggested in this SO answer.
In particular, check out the the value of GIT_DIR
and GIT_WORK_TREE
.
While the hook is running,
GIT_DIR
and (if the worktree can’t be inferred fromGIT_DIR
)GIT_WORK_TREE
are set.
That means your pull won’t run with the repository in the directory you changed to.
See also blog post Using Git Inside a Git Hook:
Eventually we got our linux guru over and he noticed that the environment under which the git user runs is totally different when inside a hook.
Gitolite does a bunch of things to the env, but the one that was screwing us up was the setting of theGIT_DIR
.
After we figured that out, the solution was as easy as:
ENV.delete 'GIT_DIR'
in our ruby script that is triggered by the ‘
post-receive
‘ hook.
Same deal in
Git Tip: Auto update working tree via post-receive hook, but with an elegant way out of this:
The solution?
It turns out thepost-receive
hook starts out with theGIT_DIR
environment variable set to therepo/.git
folder, so no matter what path you ‘cd’ into it will always try to run any following git commands there.
Fixing this is simply a matter of unsetting theGIT_DIR
(thanks to Ulrich Petri for the elegantenv -i
solution):
#!/bin/sh
cd ..
env -i git reset --hard