14

我不知道如何让 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
4

2 回答 2

31

我相信 atlassian 提供的答案是在您看到 Push 对话框时更改远程分支的名称。

  1. 打开推送对话框
  2. 单击“远程分支”列下的远程分支名称(我的当前是“主”)
  3. 输入新的 remo 分支名称 - 对我来说是 'refs/for/master'
  4. 单击确定。

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

更新:事实证明,您需要在 .git/config 的远程源下添加一个推送条目。您应该通过 git config 命令执行此操作(虽然我确实手动编辑了文件,但我确信这是不好的做法)。我写的推线是:

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

为清楚起见,这是我在 .git/config 中的远程来源条目:

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

在 SourceTree 中,您现在可以推送,它将推送到 gerrit 而不是最终的 repo。(您现在也可以只执行 git push 而不指定其他任何内容,它将推送到 gerrit )。请注意,在推送之后,SourceTree 仍会在 Push 按钮上显示一个数字,表示您仍有要推送的内容。这是因为它仍在从主存储库中获取,并且您推送到 gerrit 中的更改尚未合并到主存储库中。一旦您的更改被合并到主存储库中,按钮上的数字将消失。

于 2012-04-27T20:26:14.543 回答
1

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

示例:我有一个本地分支“feature123”可供审核(即 Gerrit)。我们的集成分支是“origin/develop”。如果我使用通用推送规则,那么“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 使用它。

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

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

于 2014-02-18T08:58:03.597 回答