小编Mat*_*ite的帖子

跳过已经处理过的后接收挂钩中Git修订的处理

我有一个git post-receive钩子,它提取了在"git push"期间添加的所有修订版,并对每个修订版进行了一些处理(例如发送通知电子邮件).这种方法很有效,除非合并时; 例如:

  1. 我在branch1上做了一些提交,然后推送branch1.post-receive挂钩正确处理提交.
  2. 我将branch1合并到branch2然后推入branch2.post-receive挂钩第二次处理所有合并的提交.

我怎么能避免这个?下面是我的post-receive钩子的开头,我提取了应该处理的提交(最后$ COMMITS保存了要处理的提交列表).

#!/bin/sh

REPO_PATH=`pwd`
COMMITS=''

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# for each ref that was updated during the push
while read OLD_REV NEW_REV REF_NAME; do
  OLD_REV="`git rev-parse $OLD_REV`"
  NEW_REV="`git rev-parse $NEW_REV`"
  if expr "$OLD_REV" : '0*$' >/dev/null; then
    # if the branch was created, add all revisions in the new branch; skip tags
    if ! expr "$REF_NAME" : 'refs/tags/' >/dev/null; then
      REF_REV="`git rev-parse $REF_NAME`"
      REF_NAME="`git name-rev --name-only $REF_REV`"
      COMMITS="$COMMITS `git rev-list $REF_NAME | git name-rev --stdin …
Run Code Online (Sandbox Code Playgroud)

git git-post-receive

3
推荐指数
1
解决办法
1595
查看次数

标签 统计

git ×1

git-post-receive ×1