如何找到当前Git存储库的.git/hooks
目录的完整路径?
我看到以下问题:
我可能位于git存储库目录结构的任何位置,例如
/home/user/project/.git/hooks
我在文件夹
/home/user/project/foo/bar/baz/
较新的git版本将子模块元数据放入.git/
,但在主存储库中,.git
只是一个文件,例如
$ cat /home/user/project/vendor/foo/.git
gitdir: ../../.git/modules/vendor/foo
所以在这种情况下,钩子dir在
中/home/user/project/.git/modules/vendor/foo/hooks
答案 0 :(得分:10)
您可以使用git rev-parse --git-dir
获取用于当前目录的存储库的路径。这将处理gitlinks(使用文件代替.git
目录)以及使用$GIT_DIR
环境变量。 hooks目录将始终位于其中,因此您可以使用:
`git rev-parse --git-dir`/hooks
获取hooks目录的路径。
中记录了这一点答案 1 :(得分:6)
启动git 2。9(2016年6月),您需要查看新配置core.hooksPath
以确定hooks文件夹。
git rev-parse --git-dir
/ hooks已经不够了。
commit 867ad08,见commit de0824e,commit bf7d977,commit 49fa52f,Ævar Arnfjörð Bjarmason (avar
)(2016年5月4日)。
(2016年5月17日Junio C Hamano -- gitster
-- commit 6675f50合并)
因此,请确保检查是否已定义git config core.hooksPath
,因为它将覆盖默认的hooks文件夹位置。
core.hooksPath
默认情况下,Git会在“
$GIT_DIR/hooks
”目录中查找您的挂钩 将此设置为不同的路径,例如'/etc/git/hooks
',Git会尝试在该目录中找到您的钩子,例如“/etc/git/hooks/pre-receive
”代替“$GIT_DIR/hooks/pre-receive
”。路径可以是绝对路径也可以是相对路径。相对路径被视为相对于运行挂钩的目录。
Git 2。10(2016年第3季度)使用了新的core.hooksPath
设置。
为了获得有效 hooks
路径,您需要运行:
git rev-parse --git-path hooks
来自git rev-parse
man page:
--git-path <path>
Resolve "$GIT_DIR/<path>" and takes other path relocation variables such
as $GIT_OBJECT_DIRECTORY, $GIT_INDEX_FILE... into account. For example,
if $GIT_OBJECT_DIRECTORY is set to /foo/bar then "git rev-parse
--git-path objects/abc" returns /foo/bar/abc.
commit 9445b49见Johannes Schindelin (dscho
)(2016年8月16日)
(由Junio C Hamano -- gitster
--合并于commit d05d0e9,2016年8月19日)
答案 2 :(得分:3)
除了--git-dir
之外,您还可以使用以下命令查找git存储库的根目录,因为这更通用,我只是在这里添加它以完成:
echo $(git rev-parse --show-toplevel)
然后将/.git/hooks
追加到它?我没有尝试使用子模块。
答案 3 :(得分:1)
如果您在项目目录中 您可以通过在终端中键入来了解当前的钩子路径
git config core.hooksPath
如果值为空,则可以设置 .githooks 文件夹的路径 你可以通过输入这个命令来做到这一点
git config core.hooksPath .githooks/
现在你会发现钩子路径改变了,你可以再次通过第一个命令确认。