首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >编写一个git post-receive挂钩来处理特定的分支

编写一个git post-receive挂钩来处理特定的分支
EN

Stack Overflow用户
提问于 2011-09-09 00:40:33
回答 7查看 54.9K关注 0票数 113

这是我当前的钩子,位于公司的服务器上的一个简单的代码库中:git push origin master,这个钩子推送到汇编。我需要的是,当有人在我们的服务器上推送对该分支的更改时,只推送一个分支(理想情况下,主分支),并忽略对其他分支的推送。是否可以从裸存储库中选择分支并仅将该分支推送到Assembla?

EN

回答 7

Stack Overflow用户

发布于 2012-10-25 04:59:43

post-receive钩子从stdin获取其参数,格式为:

代码语言:javascript
复制
<oldrev> <newrev> <refname>

由于这些参数来自标准输入,而不是来自命令行参数,因此需要使用read而不是$1 $2 $3

post-receive钩子可以一次接收多个分支(例如,如果有人执行git push --all),因此我们还需要将read包装在while循环中。

正常工作的代码片段如下所示:

代码语言:javascript
复制
#!/bin/bash
while read oldrev newrev refname
do
    branch=$(git rev-parse --symbolic --abbrev-ref $refname)
    if [ "master" = "$branch" ]; then
        # Do something
    fi
done
票数 398
EN

Stack Overflow用户

发布于 2011-09-09 03:53:20

post-receive钩子在stdin上获取的最后一个参数是ref被更改的内容,因此我们可以使用该参数来检查该值是否为“refs/head/master”。一个类似于我在post-receive钩子中使用的ruby:

代码语言:javascript
复制
STDIN.each do |line|
    (old_rev, new_rev, ref_name) = line.split
    if ref_name =~ /master/
         # do your push
    end
end

请注意,它会为每个被推送的ref获取一行,所以如果您推送的不只是master,它仍然可以工作。

票数 8
EN

Stack Overflow用户

发布于 2012-09-11 18:47:06

Stefan的回答对我不起作用,但this做到了:

代码语言:javascript
复制
#!/bin/bash

echo "determining branch"

if ! [ -t 0 ]; then
  read -a ref
fi

IFS='/' read -ra REF <<< "${ref[2]}"
branch="${REF[2]}"

if [ "master" == "$branch" ]; then
  echo 'master was pushed'
fi

if [ "staging" == "$branch" ]; then
  echo 'staging was pushed'
fi

echo "done"
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7351551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档