将 Git hook 与工作树结合使用

问题描述 投票:0回答:1

我已经使用

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 hook git-worktree
1个回答
0
投票

您可以显式设置工作树的钩子路径,

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
手册页的配置文件部分的详细信息非常重要,您可能不想共享稀疏规则,并且几乎肯定不想要裸露或工作树设置。

© www.soinside.com 2019 - 2024. All rights reserved.