如何将repo projects推到自己的Gerrit Server

特别说明

如果repo projects是可以下载的,建议下载时,repo init之后,到.repo中找到对应manifest,将所有的clone-depth删除,避免后面在git push的时候出现难以解决的错误:

remote unpack failed:error Missing commit

开始操作

1. 遍历所有project

在repo projects根目录执行:

repo forall -c 'echo $REPO_PROJECT' | tee projects.txt

如果所有的proejcet放到同一目录下,而不是Gerrit根目录,则可以:

repo forall -c 'echo xxx/$REPO_PROJECT' | tee projects.txt

2. 生成批量创建project的脚本

修改{user}和{GerritServer}
注意要确保user是有创建Project的权限:

sed 's/^/ssh -p 29418 {user}@{GerritServer} gerrit create-project /' projects.txt> createProjects.sh

3. 执行脚本创建空projects

chmod 777 createProjects.sh
./createProjects.sh

执行过程可能会报project already exist,这说明存在多个Repo Path指向了同个Repo Project,通常是branch或revision(commit id)不同。 这时候可以将前面的projects.txt内容贴到excel表,利用excel表的查重功能找出这些project。
在这里插入图片描述
再到manifest文件中搜索这些project,确认是branch不同还是revision不同,在Push完所有代码后再补操作。

4. 确认Gerrit All-Projects的权限

在这里插入图片描述

5. Push所有代码

修改{user}、{GerritServer}、{xxx}和{BranchName}

(repo forall -c 'pwd && git push --tags -f -o skip-validation ssh://{user}@{GerritServer}:29418/{xxx}/$REPO_PROJECT HEAD:refs/heads/{BranchName}')2>&1 | tee push.log

6. 单project推送

如果出现个别project推送失败需要重新推送,可以到相应路径下执行如下命令:(修改{user}、{GerritServer}和{ProjectName})

git push --tags -f -o skip-validation ssh://{user}@{GerritServer}:29418/{ProjectName} HEAD:refs/heads/{BranchName}

7. project already exist处理

核对完manifest后:

  • 若是branch不同,则查看Gerrit上现在的codebase是哪个Branch,然后到还没被Push上去的Project Path,用同样的push命令,更换BranchName后执行
  • 若是revision不同,则查看Gerrit上的Branch log中有没有包含到所有revision,若没有,则到revision最新的Project Path下再执行一次push

8. 建立自己的repo manifest

  1. 将原来的.repo/manifest/xxx.xml拷贝一份到自己Gerrit manifest仓库下,然后将里面的dest-branch和upstream都改成自己新建的BranchName。
  2. 删除所有project revision,可以用Nodepad++的正则表达式,将所有revision=“xxx”替换为空,但要保留内的revision
  3. 针对多Path指向同一个Project不同Branch,则要特别保留它的dest-branch和revision,revision没有保留的话,会被上的revision覆盖
  4. 针对多Path指向同一个Project不同revision,则要特别保留它的revision
    在这里插入图片描述
 revision=\"([^\"]*)\"

注意如果想避免多出一个空格,想在查找目标中多加一个空格一起替换掉,则要加在前面,因为有的project把revision放在最后,后面没有空格。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值