2015-02-06 53 views
38

在使用Gerrit(Code Review)时,我经常需要获取给定补丁集的副本以进行测试或验证。显而易见的方法是通过Gerrit Web界面下载归档文件或补丁文件,并手动将其应用到我的本地源代码。如何从Gerrit中拖拉一个给定的补丁集?

虽然上述步骤非常简单,并且满足了我的需求,但在最好的世界中,我希望修补程序集在我的本地Git中显示为提交。

我四处张望并没有找到解决方案。我发现一些编译在一起的稀疏信息给出了以下解决方案。

说你想拉补丁集2的格里特变化1222:

找到远程裁判,我们感兴趣的是:

$ git ls-remote | grep 1220 
From http://something.com:8081/MyProject 
e2e0212a59240ac5cd7c11220c35542523f44b59  refs/changes/13/713/1 
b8c4dceea5eaf1bad711b0ea6938c80ec932726a  refs/changes/20/1220/1 
6f20c182ec7f54a2aa9e8f6188a0eef1b0790df4  refs/changes/20/1220/2 
ed94a98386d224ce3d86004ce99f61220905a077  refs/changes/22/1222/1 

拉裁判:

git pull origin refs/changes/20/1220/2 

这将创建一个Git提交点,最终可以重定位:

git rebase 
+0

有任何理由您不使用Gerrit UI中提供的标准[下载](https://gerrit-documentation.storage.googleapis.com/Documentation/2.10/user-review-ui.html#download)选项? – uncletall 2015-02-10 04:24:17

+0

原因是,如果有一个待审查的代码审查(由其他人提出),我想要得到更改,因此需要对其进行更改,然后拉动修补程序集更方便。它允许我立即提交代码更改,而前一个提交点仍在审核中。 – 2015-02-11 04:46:39

+0

没错,那就是你使用那些下载选项。请阅读文档,你会明白。 – uncletall 2015-02-11 06:01:13

回答

29

或者您可以使用-d选项git-review。例如,假设你用nova-docker库工作,并有兴趣在这个变化中格里特:

你可以下载最新的补丁集是这样的:

git review -d 148486 

或者您可以使用更改ID:

git review -d I35729a86e211391f67cc959d19416c9125c6f9eb 

您也可以通过附加逗号和补丁码来请求修补程序的特定修订版。例如,获得该修补程序的第二个修订版本:

git review -d 148486,2 
+0

感谢您的提示,但它看起来像我会需要一些进一步的设置,以便使用git审查,因为我得到一个错误(下面)。 $ git review -d I85be47d597611508f5dd9360145bbe2f67cb2148 在此资源库中找不到'.gitreview'文件。我们不知道你的gerrit在哪里 。请手动创建一个名为“gerrit”的远程设备,然后再次尝试 。 – 2015-02-06 17:37:53

+0

啊,我以为你在使用gerrit时已经假设你已经在使用'git-review'了。 '.gitreview'文件看起来像[this](https://github.com/stackforge/nova-docker/blob/master/.gitreview)。 – larsks 2015-02-06 18:35:14

+1

'git review -s'应该设置这个文件。 – volker 2015-02-06 18:48:14

5

我不是100%确定你的问题是什么。听起来就像你想简化工作流程或打字。主要使用的已经提到的git review

对于您的情况,也许它有助于自动下载所有ref,以便您可以直接引用它们。你总是可以像git fetch origin "+refs/changes/*:refs/remotes/origin/changes/*"那样指定所有参考文献。然后,您可以使用提交ID在本地工作。

一个简单的git别名或脚本它的所有裁判可以很容易地完成。这样的while循环的例子可以在脚本中发现https://github.com/saper/gerrit-fetch-all有了这样一个小的shell代码片段,您可以轻松地完成跳过参考编号的一部分,以更容易引用它们:

Server side:     Client side: 
    refs/changes/13/713/1  refs/head/713/1 
    refs/changes/20/1220/1  refs/head/1220/1 
    refs/changes/20/1220/2  refs/head/1220/2 
    refs/changes/22/1222/1  refs/head/1222/1 
+0

问题是关于如何从Gerrit中提取补丁集,我也通过分享我如何做到这一点来回答自己的问题。在写出我的问题之前,从未使用过git-review。 – 2015-02-08 04:48:51

+2

对于我们只想使用'git'来获取所有更改,而不必安装或配置任何特定的gerrit工具,这是正确的答案。 – 2015-06-30 10:52:37

45

此功能是标准Gerrit UI。

在一个补丁的用户界面的右上角,点击下载,你会看到类似这样的:

Gerrit Change Screen Download

当你浏览你去下载区的补丁和复制命令为检查出的补丁集,例如像这样的行命令:

git fetch https://gerrit.googlesource.com/gerrit refs/changes/03/64403/2 && git checkout FETCH_HEAD 

然后我通常创建分支与审查编号和作为补丁集名称

git checkout -b b64403-2 

对于此处您可以正常工作并提交您的更改或对此更改进行樱桃选择/重新整理您的更改。

一旦r64403的审查完成,您的代码可以合并,或者当有另一个补丁集提交您需要再次做同样的事情。

如果你没有看到的选项来选择下载到CheckoutCherry Pick你需要编辑gerrit.config,像这样:

[download] 
    scheme = ssh 
    command = checkout 
    command = cherry_pick 

更多细节可以在Gerrit Documentation


被发现

更新: 正如barryku正确指出,在更高版本中,您需要下载downloads-commands插件。这可以在初始安装过程中或通过使用以下命令来完成:

java -jar gerrit-2.11.4.war init -d review_site --batch --install-plugin download-commands 
+0

有趣。我没有“下载”下的“Checkout”和“Cherry Pick”选项。我只有“Patch-File”和“Archive”。也许有些Gerrit管理员选项可以让“Checkout”和“Cherry Pick”显示出来?或者可能需要更新到更新版本的Gerrit? – 2015-02-11 18:11:48

+2

添加了相关的gerrit.config部分示例。 – uncletall 2015-02-12 00:31:22

+1

谢谢你,我完全错过了用户界面,它花了一段时间寻找这样一个简单的答案。 – SpoonMeiser 2015-05-01 12:54:18

1

正如在评论中提到,你可以从格里特GUI得到正确的git命令。如果你真的不喜欢的GUI,或者你想要自动化它(出于某种原因不能使用git-review),你可以使用API​​格里特:

curl -s 'https://<your gerrit server>/r/changes/<change id>?o=CURRENT_REVISION&o=DOWNLOAD_COMMANDS' | tail -n+2 | jq -r '.revisions[.current_revision].fetch["anonymous http"].commands.Pull' | bash - 

git pull origin `curl -s 'https://<your gerrit server>/r/changes/<change id>?o=CURRENT_REVISION' | tail -n+2 | jq -r '.revisions[.current_revision].ref'` 
相关问题