8

我喜欢简单地使用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,我需要一个像 'branch:refs/for/branch' 这样的 refspec,其中分支是当前分支。

问题:

  • 是否有与 push.default=upstream 正在执行的操作等效的显式 refspec?
  • 有没有办法配置 git 以使普通文本git push自动推送到正确的 refs/for ref?

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

4

3 回答 3

1

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

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

于 2013-01-19T21:36:22.910 回答
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
}

I guess its a hack, but it works for me.

于 2020-07-20T14:26:48.727 回答
-1

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

您可以传递给 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 时需要使用脚本仅发送当前分支。

于 2013-01-15T20:27:06.560 回答