【问题标题】:Push current branch to Gerrit将当前分支推送到 Gerrit
【发布时间】:2013-01-14 14:30:33
【问题描述】:

我喜欢简单地使用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?

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

【问题讨论】:

  • 好的。只需在此处检查不同的选项。我了解到 push.default 只有在没有给出 refspec 时才会被考虑。而且,如果您通过命令行提供 refspec(如 HEAD),这将覆盖遥控器给出的 refspec。因此它只会推送到ref/heads,这不是你想要的。很有趣。

标签: git gerrit


【解决方案1】:

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

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

【讨论】:

  • 有趣的反馈,肯定比我(现已删除)的答案更准确。 +1
【解决方案2】:

作为一种解决方法,我截获了 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,但它对我有用。

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 您在发帖前阅读了我上面的评论吗?我在下面回答了同样的问题(已删除,您看不到它),并得到了 -1 ;)
    • 您是否完整阅读了问题?不,只有在没有给出 refspec 的情况下才会考虑 push.default,即它只推送到正面。
    猜你喜欢
    • 2015-09-10
    • 2020-01-09
    • 2012-07-12
    • 1970-01-01
    • 2015-12-15
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多