gpt4 book ai didi

git - 为什么在提交后 Hook 中设置 GIT_WORK_TREE 不起作用?

转载 作者:太空狗 更新时间:2023-10-29 12:56:37 26 4
gpt4 key购买 nike

我正在尝试使用以下 post-commit Hook 在每次成功提交后部署到特定目录:

#!/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。

最佳答案

这里的问题是在 post-commit 钩子(Hook)中(还有pre-commit, prepare-commit-msg and commit-msgt) 的GIT_INDEX_FILE 环境变量设置为 .git/index。 (这个githooksdocumentation 中未记录, 但我有发表在别处 about the settings of environment variables and thecurrent directory in githooks .)

描述了GIT_INDEX_FILE环境变量的作用在 git 手册页的 ENVIRONMENT VARIABLES 部分为:

GIT_INDEX_FILE

This environment [variable] allows the specification of an alternate index file. If not specified, the default of $GIT_DIR/index is used.

...出于某种原因,在这种情况下,GIT_INDEX_FILE 正在相对于 GIT_WORK_TREE 使用。

要使钩子(Hook)如您所愿地工作,您只需要取消设置GIT_INDEX_FILE,所以你的钩子(Hook)看起来像:

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

关于git - 为什么在提交后 Hook 中设置 GIT_WORK_TREE 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7645480/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com