我看过githooks的联机帮助页,但是除非我丢失了什么,否则我看不到本地的,后推式git hooks的选项。在将master分支推送到GitHub存储库后,我想拥有一个更新Web服务器上的api文档的工具(我已经为其编写了脚本)。当然,我可以编写自己的脚本,将git push和api docs结合起来,但是感觉有些不雅。
我看过githooks的联机帮助页,但是除非我丢失了什么,否则我看不到本地的,后推式git hooks的选项。在将master分支推送到GitHub存储库后,我想拥有一个更新Web服务器上的api文档的工具(我已经为其编写了脚本)。当然,我可以编写自己的脚本,将git push和api docs结合起来,但是感觉有些不雅。
Answers:
从Git 1.8.2开始,在push操作之前调用了一个新的钩子:pre-push如果脚本返回的值不是0,则将取消push操作。
在发行说明中提到:https : //github.com/git/git/blob/master/Documentation/RelNotes/1.8.2.txt#L167
样本:https : //github.com/git/git/blob/87c86dd14abe8db7d00b0df5661ef8cf147a72a3/templates/hooks--pre-push.sample
git-push
和git实际推送提交之前执行预推送挂钩。Git中没有集成其他与推送相关的挂钩。
解决此问题的另一种方法是在调用之前和之后都有一个用于git push
执行.git/hooks/pre-push
和.git/hooks/post-push
脚本的包装器git push
。可能的包装可能如下所示:
#!/bin/sh
GIT_DIR_="$(git rev-parse --git-dir)"
BRANCH="$(git rev-parse --symbolic --abbrev-ref $(git symbolic-ref HEAD))"
PRE_PUSH="$GIT_DIR_/hooks/pre-push"
POST_PUSH="$GIT_DIR_/hooks/post-push"
test -x "$PRE_PUSH" &&
exec "$PRE_PUSH" "$BRANCH" "$@"
git push "$@"
test $? -eq 0 && test -x "$POST_PUSH" &&
exec "$POST_PUSH" "$BRANCH" "$@"
保存为git-push-wh
您自己的某个位置后PATH
,就可以调用它,git push-wh
就像您要使用钩子推动一样。
我最近遇到了同一问题。我想要一个钩子,以便从我的git子模块中进行推送将在“ superproject”中提交新的子模块引用。
如Chris所述,最好的方法是仅使用git别名,如下所示:
$ git config alias.xpush '!git push $1 $2 && update-server.sh'
# (remember the backslash before the ! if your shell requires it)
这会将以下内容添加到您的.git / config文件中:
[alias]
xpush = !git push $1 $2 && update-server.sh
现在,如果您输入:
$ git xpush
您的更改将被推送,然后将执行update-server.sh。
Git不支持这种类型的钩子。它超出了 Git维护者给出的Git钩子的有效原因。
上面链接消息中的介绍性言论几乎直接针对您的情况:
我并不特别喜欢在本地启动操作之后仅对本地数据执行操作的钩子。这也许是因为我仍然比其他人更认为git工具构建块更适合高级脚本。
pushurl
具有“备用”对象存储的本地存储库的额外内容可以为您提供一种开销较低的方式来本地执行推钩。但实际上,所做的工作远远不止于此git push upstream && update-web-server
(可能是在shell别名,git别名或脚本中)。
我为此使用一个函数:
current_branch() {
local ref=$(git symbolic-ref HEAD 2> /dev/null) || return
echo ${ref#refs/heads/}
}
gp() {
local post_push="$(git rev-parse --git-dir)/hooks/post-push"
git push "$@" && {
[[ -x "$post_push" ]] && "$post_push" "$(current_branch)" "$@"
}
}
compdef _git gp=git-push
compdef部分用于ZSH。
post-update
这种情况下可以触发钩子对吗?