精简Chromium代码仓库进行维护与升级

Chromium的代码仓库很大,我最近更新了一下,现在git仓库里面pack文件已经有8.8GB了。然而网络又不稳定,要完整获取如此大的代码还是比较困难。

我最推荐的方式是用阿里云香港或者新加坡的服务器搭建VPN,连接VPN来获取代码。阿里云香港或者新加坡的的VPN速度很快很稳定,我自己这边下载代码的速度有2MB/s,非常快。

其次是搭建Chromium代码仓库的mirror。这种方法对服务器的配置要求很高,4GB的内存只能支持不超过2个人同时获取代码。维护也比较麻烦,要成功编译Chromium,除了Chromium仓库,还有各种第三方仓库还有其他文件都需要做mirror。

如果不是很需要Chromium代码的历史提交记录,我们可以从Chromium代码的一个tag里面拉出代码,再提交到我们的自己的git仓库里面。这样的git仓库有700MB左右大小,只有Chromium的十分之一。

比如我们从Chromium的60.0.3112.113 tag拉出代码,提交到我们自己的own代码仓库里面。后续提交我们自己的o1、o2、o3、o4等修改代码。当需要升级到62.0.3202.75的Chromium代码时候,我们再把我们的own仓库的开发分支连接到Chromium代码的c2点上,进行rebase代码到62.0.3202.75 tag的c4提交后面,如下图所示:

chromium code

我们从Chromium代码的tag拉出代码的目的是为了减小git仓库的大小,方便后续的维护。内核升级的时候,我们又需要把我们开发分支链接到Chromium的代码仓库里面,这是为了利用Chromium代码仓库的提交记录进行升级内核代码。否则没有Chromium代码仓库的历史记录,升级代码的时候需要我们手动处理很多代码冲突。

60.0.3112.113里面拉出c60分支

我们切换到需要拉出代码的tag 60.0.3112.113

git checkout 60.0.3112.113

然后创建一个不带Chromium历史提交记录的分支c60

git checkout --orphan c60
git commit -m "init 60.0.3112.113"

然后就可以把c60分支push到我们自己的own仓库里面了。

开发分支c60关联到Chromium代码

我们在c60里开发,当需要升级那会到62.0.3202.75的时候,我们需要把c62分支再次关联到Chromium代码里

git pull own c60:c60
git checkout c60

// 将c60的第一个提交关联到60.0.3112.113
// 假设60.0.3112.113提交id是:35e43184c595d88ea0a8b9b0df22d937b1ccb3d6
// c60分支的第一个id是:2021c13be29694a5532b257a8bd036ffc792ebcf

export GIT_COMMIT=2021c13be29694a5532b257a8bd036ffc792ebcf
git filter-branch --parent-filter 'test $GIT_COMMIT = 2021c13be29694a5532b257a8bd036ffc792ebcf && echo "-p 35e43184c595d88ea0a8b9b0df22d937b1ccb3d6" || cat' HEAD

rebase我们的提交到62.0.3202.75之上

// c60上最新修改是:e62fd49bd1ed326616666ae171f3a196c766df1b
git rebase --onto 62.0.3202.75 60.0.3112.113 e62fd49bd1ed326616666ae171f3a196c766df1bcong

62.0.3202.75拉出c62分支

git checkout 62.0.3202.75
git checkout --orphan c62
git commit -m "init 62.0.3202.75"

rebase我们的提交到c62上

// c60上最新修改是:e62fd49bd1ed326616666ae171f3a196c766df1b
git rebase --onto c62 62.0.3202.75 e62fd49bd1ed326616666ae171f3a196c766df1bcong