I’m trying to use the following post-commit hook to deploy to a particular directory after each successful commit:
#!/bin/sh
export GIT_WORK_TREE=/var/www/example/
export GIT_DIR=/home/mark/test/.git/
git checkout -f
However, after committing I get the following error:
$ git commit -m 'An example commit.'
fatal: Unable to create '/var/www/example/.git/index.lock': No such file or directory
[master 0938e48] An example commit.
… as if the GIT_WORK_TREE setting is being ignored. Why does setting this environment variable appear to be not working? I’m using git version 1.7.4.1.
The problem here is that in
post-commithooks (and alsopre-commit,prepare-commit-msgandcommit-msgt) theGIT_INDEX_FILEenvironment variable is set to.git/index. (Thisisn’t documented in the githooks
documentation, but I’ve
posted elsewhere about the settings of environment variables and the
current directory in git
hooks.)
The effect of the
GIT_INDEX_FILEenvironment variable is describedin the ENVIRONMENT VARIABLES section of the
gitman page as:… and for some reason, in this situation,
GIT_INDEX_FILEis beingused relative to
GIT_WORK_TREE.To make the hook work as you would expect, you just need to unset
GIT_INDEX_FILE, so your hook would look like: