实验表明,似乎git的hooks在运行时当前目录被设置为仓库的根目录。然而,在git文档中我没有看到任何保证这一点的说明。我应该依赖于当前工作目录来定位git仓库,还是有更好的方法来确定与hook相关联的git仓库?
实验表明,似乎git的hooks在运行时当前目录被设置为仓库的根目录。然而,在git文档中我没有看到任何保证这一点的说明。我应该依赖于当前工作目录来定位git仓库,还是有更好的方法来确定与hook相关联的git仓库?
目前的答案似乎已经过时了。截至2.9.0版本,文档说明如下:
在Git调用钩子之前,它将其工作目录更改为非裸库中工作树的根目录,或者在裸库中更改为$GIT_DIR。
.git
目录组成且没有检出文件的存储库。) - Ben Mares它基于环境变量GIT_DIR
的值。当钩子开始运行时,它被设置为存储库的根目录。许多钩子,尤其是从另一个存储库拉取的钩子,会根据需要取消设置(并重新设置)此环境变量。
.git/hooks/post-commit: 1: .git/hooks/post-commit: post-commit_push_gitweb.sh: not found
。 - Vince$GIT_DIR
。 $GIT_DIR
指向.git
目录。$GIT_DIR/..
指向仓库根目录的可能性有多大? - David Lord$GIT_DIR/..
。当存储库是裸仓库时,它会出现错误。 裸仓库没有工作目录,因此没有“存储库根目录”。而且如果 .git
是一个链接,它也会出现错误。 - holygeek
.git
目录中执行,而且使用git reset --hard
实际上会在.git
目录内创建工作目录结构,这在我看来是完全错误的做法! - Pavel Šimerda