我已经使用
git worktree
很长一段时间了,但我刚刚意识到钩子的一个问题。
它似乎总是从“主”git 目录运行挂钩,而不是特定于当前工作树的挂钩。有没有办法或特殊的位置来存储钩子,使它们能够在每个工作副本中不同?
我们正在为以编程方式添加的代码添加
pre-commit
钩子,以验证某些代码规则。问题是,如果一个分支中的钩子发生更改,它不会运行该特殊的钩子,它总是从根目录运行它。
所以示例主根目录:
/Users/andrew/dev/.git/hooks
示例工作树目录:
/Users/andrew/dev/.git/worktrees/dev_branch
运行 git 命令时,即使在
/Users/andrew/dev/.git/hooks
目录内,它也会从 /Users/andrew/dev_branch
运行挂钩。我希望它会使用 /Users/andrew/dev/.git/worktrees/dev_branch/hooks
或类似的东西。我也试过/Users/andrew/dev/.git/worktrees/dev_branch/.git/hooks
。
有没有办法拥有工作树特定的钩子文件夹?
您可以显式设置工作树的钩子路径,
git config extensions.worktreeconfig true # once for the repo
# then in your worktree
hooks=$(git config --worktree `git rev-parse --git-dir`/hooks)
mkdir -p "$hooks"
echo echo hi >"$hooks/post-checkout"
chmod +x "$hooks/post-checkout"
git checkout .
git worktree
手册页的配置文件部分的详细信息非常重要,您可能不想共享稀疏规则,并且几乎肯定不想要裸露或工作树设置。