repo支持"push"的两种改法

2年前写过一篇关于git-repo工作流的博客,直到最近项目组引入了新的芯片平台才有机会运用,采用了与上游代码库一致的repo组织方式。但是repo一般需要与gerrit服务器进行配合,使用upload命令进行代码上传与评审,无法直接适用组内的gitlab。而repo本身是python语言开发的,初步了解原因后着手定制化也就势在必行了。
当然,还好国内的git指南一书作者”蒋鑫”前辈早早的已经解决了这个问题,实现了repo push的子命令并开源在github上 t/repo-push-subcommand · ossxp-com/repo@1ce94da,可以直接支持多个仓库推送本地分支到远程的类git服务器。有兴趣的同学可以借鉴里面的实现,重点关注这次提交:

1
2
3
4
commit 1ce94da1e358a8b0c24eb25dda8a47cb7ef58bc7
t/repo-push-subcommand
New repo push subcommand, which push to Git server directly,
not through the Gerrit Server.

只是,多少认为copy一份upload的代码再修改为push的做法不够优雅,本着一切重复都是可以优化的原则,自然的想到尝试在upload命令直接兼容push操作的方式,最后只需要使用upload时需要添加–pm参数即可,也一并开源在本人github的group里 rerepo/reopen_repo at tm-devdev
另外,里面还有一些其它的特性改进,如下:

  • repo init -b –local-only【更新manifest但不fetch】
  • repo sync –no-repo-sync【跳过repo库更新】
  • repo sync –track【使得快照版的xml可以创建分支】
  • repo diffmanifest –branch【避免手动生成xml】

PS:再安利一篇”老罗”的博文 repo源码分析,内容非常详尽,读过后会对repo实现逻辑会有通透的了解,二次开发repo就已然成竹在胸:)


版权声明

作者: Marcus Tang
许可证: 创作共用保留署名-非商业-禁止演绎4.0国际许可证
License: Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License
本文永久链接: https://blog.tmc1900.com/rerepo-repo/