将当前分支推送到Gerrit

时间:2013-01-14 14:30:34

标签: git gerrit

我喜欢简单地使用git push将当前分支推送(仅)到配置的上游。为此我设置了git config push.default upstream,它完全正确。

现在我尝试为Gerrit设置一个合适的遥控器,它会自动推送到refs/for/*

这个想法是这样做的:

[remote "gerrit"]
        url = ssh://host:port/repo
        push = refs/heads/*:refs/for/*

我想输入git push gerrit并期望git只将当前分支推送到正确的引用。

不幸的是现在git试图将所有本地分支推送到Gerrit。 - 有没有办法告诉git只推送当前分支,如上面的push.default

更新

  • Git push只能使用一个refspec。
  • 如果在命令行上给出了明确的refspec,则使用此参考。
  • 如果命令行没有给出,则使用用遥控器定义的那个。
  • 如果没有给出遥控器,则只考虑push.default。

对于Gerrit,我需要一个refspec,比如'branch:refs / for / branch',branch是当前的分支。

问题:

  • 是否有一个明确的refspec等同于push.default = upstream正在做什么?
  • 有没有办法配置git以使普通git push自动推送到正确的refs / for ref?

目前,我发现最好的方法是将所有内容包装在一个单独的脚本中,如建议的here。但我仍然不相信只有合适的refspec是不可能的。

3 个答案:

答案 0 :(得分:1)

根据source,Git目前通过生成包含显式名称的显式refspec来实现push.default = upstream

似乎目前无法通过单个通用refspec指定该行为,并且构建显式refspec的某些脚本(如建议的here)是目前唯一的方法。

答案 1 :(得分:0)

作为一种解决方法,我拦截了git函数并使其执行默认推送:

.bashrc

git ()
{
    if [ $1 = "push" -a -z $2 ]
    then
        /usr/bin/git push origin HEAD:refs/for/master
    else
        /usr/bin/git $@
    fi
}

我猜它是一个hack,但是对我有用。

答案 2 :(得分:-1)

您可以使用命令git config --global push.default current将git配置为仅将当前分支发送到远程存储库。

您可以传递给push.default的其他选项是:

nothing - do not push anything.
matching - push all matching branches. All branches having the same name in both ends are considered to be matching. This is the default.
upstream - push the current branch to its upstream branch.
tracking - deprecated synonym for upstream.
current - push the current branch to a branch of the same name.

可以在git help config命令中看到这些配置。

更新:但是,更仔细地阅读手册页,push.default“定义了如果在命令行上没有给出refspec,在远程中没有配置refspec,并且没有隐含refspec,那么git push应该采取的操作通过命令行中给出的任何选项“。因此,我认为在指定refspec时,您需要使用该脚本仅发送当前分支。