编写git后接收钩子以处理特定的分支。

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

git push origin master

我需要的是只推一个分支(理想情况下是主),当有人在我们的服务器上推动对该分支的更改时,而忽略对其他分支的推送。是否可以从裸回购中选择分支,并只将该分支推送到Assembla?

提问于
用户回答回答于

stdin上的后置接收钩子获取的最后一个参数是ref被更改的内容,因此我们可以使用它来检查该值是否是“rev/head/master”。

STDIN.each do |line|
    (old_rev, new_rev, ref_name) = line.split
    if ref_name =~ /master/
         # do your push
    end
end

请注意,它为每个推送的引用获取一行,所以如果你推送的不仅仅是master,它仍将工作。

用户回答回答于

后置接收钩子从stdin获取其参数,形式如下:<oldrev> <newrev> <refname>。由于这些参数来自stdin,而不是命令行参数,因此需要使用read而不是$1 $2 $3

后接收钩子可以同时接收多个分支(例如,如果有人执行git push --all),所以我们还需要包装read在...while循环。

工作片段如下所示:

#!/bin/bash
while read oldrev newrev refname
do
    branch=$(git rev-parse --symbolic --abbrev-ref $refname)
    if [ "master" == "$branch" ]; then
        # Do something
    fi
done

扫码关注云+社区