如何找到.git/hooks当前Git存储库目录的完整路径?
我看到以下问题:
我可能在git存储库目录结构的任何地方,例如
/home/user/project/.git/hooks
Run Code Online (Sandbox Code Playgroud)
我在文件夹中
/home/user/project/foo/bar/baz/
Run Code Online (Sandbox Code Playgroud)
较新的git版本不会将子模块元数据放入.git/主存储库中,.git而只是一个文件,例如
$ cat /home/user/project/vendor/foo/.git
gitdir: ../../.git/modules/vendor/foo
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下,钩子dir在
/home/user/project/.git/modules/vendor/foo/hooks
Run Code Online (Sandbox Code Playgroud)
qqx*_*qqx 11
您可以使用git rev-parse --git-dir获取用于当前目录的存储库的路径.这将处理gitlinks(使用文件代替.git目录)以及使用$GIT_DIR环境变量.hooks目录将始终位于其中,因此您可以使用:
`git rev-parse --git-dir`/hooks
Run Code Online (Sandbox Code Playgroud)
获取hooks目录的路径.
启动git 2.9(2016年6月),你需要查看新配置core.hooksPath以确定hooks文件夹.
git rev-parse --git-dir/ hooks不再足够了.
请参阅ÆvarArnfjörðBjarmason()提交867ad08,提交de0824e,提交bf7d977,提交49fa52f(2016年5月4日).(由Junio C Hamano合并- -在6675f50的承诺中,2016年5月17日)avar
gitster
因此,请确保检查是否git config core.hooksPath已定义,因为它将覆盖默认的hooks文件夹位置.
该git config文档现在包括:
core.hooksPath
Run Code Online (Sandbox Code Playgroud)
默认情况下,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
Run Code Online (Sandbox Code Playgroud)
从git rev-parse 手册页:
--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.
Run Code Online (Sandbox Code Playgroud)
见Johannes Schindelin()提交的9445b49(2016年8月16日).(由Junio C Hamano合并- -在提交d05d0e9,2016年8月19日)dscho
gitster
此外,--git-dir您还可以使用以下命令来查找 git 存储库的根目录,因为这更通用,我只是将其添加到此处以完成:
echo $(git rev-parse --show-toplevel)
Run Code Online (Sandbox Code Playgroud)
然后附加/.git/hooks到它上面?不过我还没有尝试过使用子模块。
如果您位于项目目录中,您可以通过在终端输入来了解当前的钩子路径
git config core.hooksPath
Run Code Online (Sandbox Code Playgroud)
如果该值为空,那么您可以设置 .githooks 文件夹的路径,您可以通过键入此命令来完成此操作
git config core.hooksPath .githooks/
Run Code Online (Sandbox Code Playgroud)
您现在会发现挂钩路径已更改,您可以再次通过第一个命令进行确认。