符号链接到git中的钩子

Mat*_*zyk 78 linux git githooks

我编写了自己的自定义后合并钩子,现在我在我的主项目文件夹中添加了一个"hooks"目录(因为git不跟踪.git/hooks中的更改),在某处我读到我可以从钩子中创建一个符号链接到.git/hooks所以每次有人更改时我都不必将文件从一个文件夹复制到另一个文件夹,所以我尝试了:

ln -s -f hooks/post-merge .git/hooks/post-merge

但它似乎没有用,任何想法为什么?"ln hooks/post-merge .git/hooks/post-merge"工作正常,但制作一个硬链接就像copyin一样我猜....

Mic*_*hař 154

你只是使用了错误的路径,它应该是:

ln -s -f ../../hooks/post-merge .git/hooks/post-merge
Run Code Online (Sandbox Code Playgroud)

  • 这个.当git正在评估符号链接时,它显然是使用`.git/hooks`作为其工作目录,因此相对路径应该相对于该目录.如果你在制作符号链接之前首先``cd`到`.git/hooks`,并且从那里找出相对路径,这就更加不言自明了. (40认同)
  • @Eliot工作目录不会影响符号链接的创建或解析.无论你给什么`ln`将被存储为目标并相对于链接的位置进行解析. (10认同)
  • 我不明白为什么我需要上两个目录来链接一个存在于我已经进入的文件夹中的资源.它不应该只是`ln -s./ hooks /`? (8认同)
  • @JoóÁdám你是对的.所以这里的问题是原始命令指定了不正确的相对路径.仍然,在你建立链接之前``cd`到`.git/hooks`将帮助你编写命令,因为你可以自动完成到正确的路径. (2认同)

Pie*_*las 12

虽然可以使用符号链接,但也可以使用以下命令在git设置中更改项目的hooks文件夹:

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

默认情况下是本地的,因此它不会破坏其他项目的git hooks。它适用于此存储库中的所有钩子,因此如果您有多个钩子,则特别有用。

如果您已经有了自定义的钩子,.git/hooks/并且不想与您的团队共享,则可以将它们添加到hooks /中,然后添加一个,.gitignore这样它们就不会被共享。

  • 非常好!一个方便的技巧 :) 似乎比将它们一个一个地进行符号链接更具前瞻性。 (2认同)
  • git > 2.9 支持此功能 https://github.com/git/git/blob/master/Documentation/RelNotes/2.9.0.txt#L127-L128 (2认同)