需要在新的Git标签上运行一个“钩子”(新拉出的标签的Git钩子)

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

[开始时,我研究了这个问题,它似乎是与此主题相关的唯一问题:

但是我不明白这是什么钩子或如何使用它。我只是想运行一个小脚本,如果我git pull 和新标签被接收。

我尝试将其放入:.git/hooks/update.git/hooks/post-receive

#!/bin/bash
exec < /dev/tty

CURRENT_TAG=$(git tag --contains)
echo Test Test
echo "LATEST_TAG: \"${CURRENT_TAG}"\" > "config/latest_tag.yml"

如果可能,我想使用Git钩子。我当时想做alias "git pull"="git pull && ./update_script.sh,但我不能给空格加上别名,也不能给某些东西加上别名并让团队的其他成员记住它。

bash git githooks
1个回答
0
投票

作为the documentation says,接收后和更新钩子是“服务器”侧钩子,即它们响应客户端的推送而在服务器上运行。您想要的是相反的,不幸的是,没有钩。

由于您提到对命令进行别名操作不起作用,因此可以将函数用作下一个最佳选择。它将接收然后可以检查的参数。

git() { env git $* && [ "$1" = "fetch" -o "$1" = "pull" ] && ./update_script.sh; }

当屏蔽这样的命令时,必须小心,以免引起无限递归。在函数体内,您绝不能直接调用git,因为那样会重新运行该函数,而不是git命令。我已经使用env来解析实际的git二进制文件,但使用绝对路径也可以。

请注意,实际上是git fetch将获得新标签,并且git pull只是在内部调用git fetch。因此,我包括了对fetchpull的处理。另请注意,它将在所有存储库中隐藏git命令,因此,如果仅对特定存储库应用特殊处理,则需要对其进行扩展。

如果在存储库本身中跟踪了您的update_script.sh,则至少要注意两件事:

  • 可以推送更改的任何人对该文件的本质上,将<由于pullfetch命令可以在工作树中的任何位置运行,而不仅仅是在顶层,因此应首先使用[env] git rev-parse --show-toplevel来解析路径。
© www.soinside.com 2019 - 2024. All rights reserved.