2012-03-29 191 views
11

我无法弄清楚如何让SourceTree推送到Gerrit。使用SourceTree推送gerrit

我看到这个链接,但我还是不明白它是如何做到: https://answers.atlassian.com/questions/29361/configuring-sourcetree-push-for-gerrit

显然,根据对1.3.3的发行说明是有办法做到这一点,但我不能图它出来了:http://www.sourcetreeapp.com/update/ReleaseNotes.html#version-1.3.3

是否有一步一步指导某处如何做到这一点?

现在我在终端上运行此命令推

git push origin HEAD:refs/for/master 

回答

27

我相信Atlassian的提供的答案说,当你看到推对话框更改远程分支的名字。

  1. 打开推对话框
  2. 单击远程分支名“远程分支”列下(我的是目前“主”)
  3. 键入新雷莫分支名 - 这将是“裁判/ for/master'
  4. 单击确定。

这似乎已经正确地将提交到我的Gerrit。我现在的问题是'refs/for/master'值不会持续。现在要弄清楚。一旦我明白了这一点,我会更新这篇文章。希望这有助于即使是比赛迟到。

更新:事实证明,您需要在.git/config中的远程原点下添加一个推送条目。你应该通过git config命令来做到这一点(我手动编辑文件,我确定这是不好的做法)。推线我写的是:

push = refs/heads/*:refs/for/* 

为清楚起见这里是git的/配置我的远程起源条目:

[remote "origin"] 
    url = ssh://gerrit-test.example.com:29418/mystuff.git 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    push = refs/heads/*:refs/for/* 

在SourceTree你现在可以把它将会推动而不是格里特的最终回购。 (你现在也可以在不指定其他任何东西的情况下执行git push操作,并将它推送到gerrit)。请注意,推送后,SourceTree仍会在按钮上显示一个数字,表示您仍然有东西要推送。这是因为它仍然从主资源库中获取,并且您推入gerrit的更改尚未合并到主资源库中。一旦您的更改合并到主资料库中,按钮上的号码将消失。

+1

我能够改变远程分支的名称,但没有帮助,因为它使用的是本地分支,而不是HEAD。 但是,您的更新评论确实有帮助,在我的.git/config工作中添加了'push'行。 – JoseM 2012-04-27 22:08:44

+7

再次感谢。下面是通过git config命令执行的方法: 'git config remote.origin.push refs/heads/*:refs/for/*' – JoseM 2012-04-27 22:19:16

+0

很好。用适当的命令行工具更好。 – mozart27 2012-04-28 01:15:31

1

如果您使用Git Flow(http://nvie.com/posts/a-successful-git-branching-model/)或类似工具进行设置,您通常希望将本地分支推送到不同的远程分支。在这种情况下,通用推送规则(由mozart27提及)将不起作用,因为它总是将本地分支推送到相应的远程分支。

例如: 我有一个本地分支“feature123”准备好审查(即Gerrit)。我们的整合分支是“起源/开发”。如果我使用通用推式规则,那么会推送“feature123”以便在“origin/feature123”上进行审查,但我真正想要的是推动它对“origin/develop”进行审核。

解决方案: 在SourceTree您可以创建自定义操作:

Menu caption: Push for review 
Script to run: cmd 
Parameters: /c git push origin $SHA:refs/for/develop 

记住的Git添加到您的路径,使CMD使用它。

然后,不是单击“推送”,而是右键单击您的提交,然后选择“自定义操作 - >推送审阅”。

当然,这两种解决方案可以共存,具有通用推送规则,确保您在推送到远程分支时始终发送评论,以及在您想要发送功能分支以供集成分支查看时使用自定义操作。