Git 将当前分支推送到Gerrit

Git 将当前分支推送到Gerrit,git,gerrit,Git,Gerrit,我喜欢简单地使用gitpush将当前分支推送到配置的上游。为此,我设置了git config push.default upstream,它做的事情完全正确 现在我尝试为Gerrit设置一个合适的遥控器,它会自动推送到refs/for/* 这个想法是这样做的: [remote "gerrit"] url = ssh://host:port/repo push = refs/heads/*:refs/for/* 我想键入git push gerrit,希望git只

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

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

这个想法是这样做的:

[remote "gerrit"]
        url = ssh://host:port/repo
        push = refs/heads/*:refs/for/*
我想键入
git push gerrit
,希望git只将当前分支推送到正确的ref

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

更新:

  • Git push只能使用一个refspec
  • 如果在命令行上给出了显式refspec,则使用该refspec
  • 如果命令行中未给出任何命令,则使用使用远程命令定义的命令行
  • 如果遥控器也没有提供,则只考虑push.default
对于Gerrit,我需要像“branch:refs/For/branch”这样的refspec,其中branch是当前分支

问题:

  • 是否有一个与push.default=upstream正在执行的操作等效的显式refspec
  • 是否有一种方法可以配置git,使普通的
    git push
    自动推送到正确的refs/for ref

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

您可以使用命令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
“定义git push在以下情况下应采取的操作:命令行上未提供任何refspec,远程中未配置任何refspec,并且命令行上的任何选项均未暗示任何refspec”。因此,我认为在指定refspec时,您需要使用脚本只发送当前分支。

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


似乎目前没有办法通过一个通用的refspec来指定该行为,而一些构建显式refspec的脚本(如建议的)是目前唯一的方法。

作为一种解决方法,我截取了git函数并让它执行默认推送:

巴什尔先生

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

我想这是一种黑客行为,但对我来说很有效。

好的。只是在这里检查不同的选项。我了解到,
push.default
只有在没有给出refspec的情况下才会被考虑。如果通过命令行提供refspec(如
HEAD
),则会覆盖遥控器提供的refspec。因此,它只会推到
ref/heads
,这不是您想要的。有意思。你在发布之前读过我上面的评论吗?我在下面回答了同样的问题(删除,你看不到),得到了-1;)你把问题看完了吗?不,push.default仅在没有给出refspec的情况下才被考虑,也就是说,它只推到头部。有趣的反馈,肯定比我(现在已删除)的答案更准确+1.