2013-11-27 161 views
1

我想知道与gerrit rebase按钮相关的命令来重新绑定这个补丁。 我们的要求“调整基线补丁和提交” 由于大部分时间我们都在下面的错误,当我们提交补丁:需要gerrit的rebase命令

我们的格里特策略设置为“快进”只(不能更改)。

成功提交一个补丁后,我得到下面的错误:

项目的政策要求所有提交的是一个快进。

请本地重订的改变,并再次上传审查

有了底垫按钮,我能够做的底垫。

是否有任何命令/脚本来自动化这个rebase进程。

+0

樱桃挑选提交类型基本相同重订之前立即提交(我能想到的唯一的区别是在页脚中添加元数据提交时挑肥拣瘦)所以请详细说明为什么使用该提交类型不是一种选择。 –

回答

1

你为什么要自动化它?无论如何,如果更改需要重新分配,这意味着,在审查期间,另一个提交被推送到主分支。所以如果你已经对评论有所改变,就不要提交其他内容。甚至不要同时推动另一项改变。因为如果您在审核时单独进行了2次更改 - 那么第二次提交应该与另一次更改。并在推送任何代码审查之前首先检查是否有任何新的提交远程分支,应首先在本地进行重新分配。

-1

你可以为此写一个python脚本。为此,您需要先获取更改详细信息,然后获取当前的补丁集,然后重新绑定并上传。

步骤:

  1. 获取当前补丁集信息使用

    ssh -p <port number> <server_name > gerrit query --current-patch-set <change_number> --format=JSON 
    

    解析,并得到current_patchset_number并将在第二步和第三步使用裁判。

  2. 将更改提取到本地回购。

    如果您在gerrit中检查cherry-pick命令,除了ref之外,其它所有更改都是相同的。您将从第一步获得此参考。使用它和樱桃选择您的CL到本地回购。

  3. 上传新的补丁集

    git push origin HEAD:refs/changes/< current_patchset_number+1 >/<change_number> 
    
+0

我想你的意思是'HEAD:refs/changes/' –

0
  1. 创造新的就业,并在格里特工作结束(与格里特插件)触发它。
  2. 第一份工作更新了Gerrit +2代码审查+ 1验证并触发第二份工作并传递所有参数。
  3. 现在你可以提交(如果这是头或者如果不是,则为rebase)。
#!/bin/bash 
sleep 10 
echo $WORKSPACE 
echo 'ssh -p 29418 gerrit-server gerrit review --project switch-dev --rebase' $GERRIT_CHANGE_NUMBER,$GERRIT_PATCHSET_NUMBER 
cd $WORKSPACE 
if [ $GERRIT_PATCHSET_NUMBER -eq '1' ] ; then 
    ssh -p 29418 gerrit-serve gerrit review --project switch-dev --submit $GERRIT_CHANGE_NUMBER,$GERRIT_PATCHSET_NUMBER 
    ssh -p 29418 gerrit-serve gerrit review --project switch-dev --rebase $GERRIT_CHANGE_NUMBER,$GERRIT_PATCHSET_NUMBER 
fi 
if [ $GERRIT_PATCHSET_NUMBER -eq '2' ] ; then 
    ssh -p 29418 gerrit-serve gerrit review --project switch-dev --submit $GERRIT_CHANGE_NUMBER,$GERRIT_PATCHSET_NUMBER 
fi