2013-01-14 91 views
7

我喜欢简单地使用git push将当前分支推送到配置的上游。为此,我设置了git config push.default upstream这确实是正确的。将当前分支推送到Gerrit

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

当时的想法是做这种方式:

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

我想键入git push gerrit,并期望混帐只能作用于当前分支推到正确的裁判。

不幸的是,现在git试图推动所有地方分支Gerrit。 - 有没有什么办法可以让git只推送当前分支,就像上面的push.default一样?

更新:

  • 推送操作只能使用一个单一的Refspec。
  • 如果在命令行上给出了明确的refspec,则使用这一个。
  • 如果没有在命令行中给出,则使用使用远程定义的那个。
  • 如果远程也没有给出,只有push.default被考虑。

对于Gerrit,我需要一个像'branch:refs/for/branch'这样的分支作为当前分支的refspec。

问:

  • 是否有一个明确的Refspec相当于=上游是做什么push.default?
  • 有没有办法将git配置成自动推送到正确的refs/for ref?

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

+0

好的。只需在这里查看不同的选项。我了解到'push.default'只有在没有给出refspec的情况下才会考虑。如果你通过命令行提供一个refspec(比如'HEAD'),这将覆盖远程给定的refspec。因此它只会推到'ref/heads',这不是你想要的。有趣。 – VonC

回答

1

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

好像目前还没有办法通过一个通用的Refspec指定的行为,以及一些脚本(如建议here),它现在建立一个明确的Refspec是唯一的出路。

+0

有趣的反馈,肯定比我的(现在删除的)答案更准确。 +1 – VonC

-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命令看到。

UPDATE:但是,仔细阅读手册页push.default“定义了git push在命令行中未给定refspec时应执行的操作,在远程中没有配置refspec,并且没有任何refspec暗示在命令行上给出的选项“。所以,我认为在指定refspec时你需要使用脚本发送当前分支。

+0

您是否在发布之前阅读过我的评论?我回答如下(删除,你看不到它),并得到-1;) – VonC

+0

你完全读完这个问题?不,只有在没有给出refspec的情况下才会考虑push.default,也就是说它只是推到头上。 – michas