mat*_*att 6 git bash shell git-worktree
我想在调用命令时运行 shell 脚本git worktree add。阅读文档post-checkout似乎它会运行,git worktree add但它也会运行我不想使用它的其他命令,例如git checkout.
还有其他我可以使用的钩子吗?或者也许我可以使用结账后但有脚本设置,这样如果不是命令它就会退出git worktree add?
我想要这样做的原因是运行一组命令来设置运行时所需的目录git worktree add,但我不需要为仅使用git checkout命令的普通 git 存储库执行此设置。
我已经想出了一个解决方案,尽管我不确定它的鲁棒性如何。我使用post-checkout钩子作为 bash 脚本,并且顶部有以下几行。
if ! [[ "$0" =~ ".bare/hooks/post-checkout" ]] \
|| ! [[ "$1" == "0000000000000000000000000000000000000000" ]]; then
echo "WARNING: post-checkout hook running for reason otherwise than git worktree add, bailing";
exit 0;
fi
# Do something down here every time we run `git worktree add`
Run Code Online (Sandbox Code Playgroud)
这是如何工作的:$0 是脚本的路径,$1 是前一个头的引用。
按照惯例,我已经将裸存储库克隆到一个名为的目录中.bare,这是第一个语句正在检查的目录。第二条语句检查 HEAD 的前一个引用是否是那个 0 字符串。如果您只是使用其他签出命令,则此命令会捕获并退出,例如git checkout因为在这种情况下,前一个 HEAD 不是 0 字符串,因为它指向提交。然而,似乎因为我每次运行时都会创建一个新的 HEAD,所以git worktree add它会将之前的 HEAD 引用设置为该字符串 0,这允许我在该条件下断言。
这确实适用于我的用例,所以我不确定是否有更好的方法。如果有人有更好的建议请告诉我。
pwdPS 我只需在脚本中使用即可获取新分支的目录post-checkout,这对于我想在挂钩中运行的命令很有用。
| 归档时间: |
|
| 查看次数: |
1014 次 |
| 最近记录: |