内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
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