7

每次成功提交后,我都尝试使用以下post-commit钩子部署到特定目录:

#!/bin/sh
export GIT_WORK_TREE=/var/www/example/
export GIT_DIR=/home/mark/test/.git/
git checkout -f

但是,提交后我收到以下错误:

$ 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.

...好像GIT_WORK_TREE设置被忽略了。为什么设置此环境变量似乎不起作用?我正在使用 git 版本 1.7.4.1。

4

1 回答 1

18

这里的问题是,在post-commit钩子(还有 pre-commit,prepare-commit-msgcommit-msgt)中, GIT_INDEX_FILE环境变量设置为.git/index. (这在githooks 文档中没有记录,但我已经在其他地方发布了有关环境变量设置和 git hooks 中的当前目录的信息。)

环境变量的效果GIT_INDEX_FILE在手册页的 ENVIRONMENT VARIABLES 部分中描述git为:

GIT_INDEX_FILE

此环境 [变量] 允许指定备用索引文件。如果未指定,$GIT_DIR/index则使用默认值 of。

...由于某种原因,在这种情况下,GIT_INDEX_FILE相对于GIT_WORK_TREE.

要使钩子按预期工作,您只需要取消设置 GIT_INDEX_FILE,因此您的钩子将如下所示:

 #!/bin/sh
 unset GIT_INDEX_FILE
 export GIT_WORK_TREE=/var/www/example/
 export GIT_DIR=/home/mark/test/.git/
 git checkout -f
于 2011-10-04T09:02:01.583 回答