Cal*_*vin 9 migration git migrate gerrit
我有MainGerritServer很多项目.
另外,我RogueGerritServer也有很多项目.
我正在寻找一种方式来移动ProjectA从RogueGerritServer到MainGerritServer同时保留这两个混帐提交历史以及与格里特回顾历史.
例如,我想将Android项目的Gerrit历史记录导入到我自己的Gerrit服务器上,这样当我在Android的分叉版本上工作时,我可以在本地服务器上查找Gerrit历史记录.最好的方法是什么?
如果它是一个简单的Git安装,我只需克隆ProjectA到我的电脑然后推送到MainGerritServer.基于Gerrit的项目是否以相同的方式工作?
我担心因为Gerrit安装在后台使用数据库,我不确定是否还需要迁移数据库中的信息.我看到很多关于采用数据库转储并将其移动到全新服务器的线程.但是,我试图只移动一个项目,因此采用数据库转储似乎不合适.我看到的最接近的答案是,这仍然不是我正在寻找的.
我很感激任何帮助,特别是如果你能告诉我我是否误解了如何处理这个问题.
谢谢
Ili*_*ion 11
我最近一直在移动很多git项目,虽然我大部分时间都是从Gerrit迁移(由于部门命令,Gerrit是一个很好的选择IMO),但这应该是相同的并且相对容易.然而,移动Gerrit历史将更加困难.
以下是如何移动回购:
在要移动的项目的本地克隆中,将新项目位置添加为新远程:
git remote add NewGerrit ssh:// NewGerritServer:29418/NewProject
推到新的遥控器.推动完整的历史做:
git push - 所有NewGerrit
您还可以通过添加-u标志将其设置为自动跟踪新的repo:
git push --all -u NewGerrit
Run Code Online (Sandbox Code Playgroud)
迁移Gerrit数据库的东西是一个更大的工作,老实说,除非绝对必要,否则我建议你放弃它.您可以通过Gerrit自己的(可怕的)查询语言GSQL直接访问数据库来了解所涉及的内容.这很像mysql,除了更多的气质和缺乏很多功能.
ssh -p 24981 HOSTNAME gerrit gsql
Run Code Online (Sandbox Code Playgroud)
这将为您提供gsql提示符.试试这个:
gerrit> SHOW TABLES;
Run Code Online (Sandbox Code Playgroud)
至少在我可以访问的Gerrit版本中,大写是重要的.(我确实已经过时了.)这将向您展示大约29张桌子,您的项目历史遍布整个过程.
根据Shawn Pearce(Gerrit项目负责人)的帖子,您需要将数据库复制到新的数据库服务器,然后使用SQL手动删除所有其他项目.然后,您可以转储剩余数据并将其导入其他Gerrit服务器.注意CAVEAT:可能存在change_id值的冲突.但他确实建议解决这个问题:
您可以找出传入集的最大change_id,手动触发目标服务器的change_id_seq以保留足够的id空间,然后将所有旧的change_id按一些基值进行冲击,以便它们位于目标中的唯一空间中......最后将行加载到目标.
所以它可以完成.这是后半部分的痛苦.
现在还有一个导入器插件,可用于将git存储库和所有评论从一个服务器迁移到另一个服务器.它适用于Gerrit版本2.11及更高版本.
更多文档:
导入器插件可从(非官方)CI服务器下载:master版本,stable-2.12版本,stable-2.11版本.