在shell上查找git hooks目录的路径

cwe*_*ske 10 git

如何找到.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 rev-parse手册页中有记录

  • 这不再正确,使用`git rev-parse --git-path hooks/hook-name`来查找存储钩子的位置. (4认同)

Von*_*onC 6

启动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


Til*_*ill 5

此外,--git-dir您还可以使用以下命令来查找 git 存储库的根目录,因为这更通用,我只是将其添加到此处以完成:

echo $(git rev-parse --show-toplevel)
Run Code Online (Sandbox Code Playgroud)

然后附加/.git/hooks到它上面?不过我还没有尝试过使用子模块。


Ala*_*eam 5

如果您位于项目目录中,您可以通过在终端输入来了解当前的钩子路径

git config core.hooksPath
Run Code Online (Sandbox Code Playgroud)

如果该值为空,那么您可以设置 .githooks 文件夹的路径,您可以通过键入此命令来完成此操作

git config core.hooksPath .githooks/
Run Code Online (Sandbox Code Playgroud)

您现在会发现挂钩路径已更改,您可以再次通过第一个命令进行确认。