这个想法由来已久,因为以前都是简单粗暴地将repo改成git单个大仓库来管理。这样做之后那么和Android上游就基本断绝关系了,合并更新已经几乎不可能了。这也是为什么一直有这个想法要这样做。之前不做是因为上游的CPU厂商也是简单粗暴的方式,所以可以上面有带头大哥不受规矩,我们跟定他们就好了。
再想到这个问题的时候,已经是两年后的今天了。这个时候Gitlab已经不需要花费15天来安装配置了,而是一个DEB包就可以搞定;Android官方源码也有过获取并编译成功的经历了;Git也使用了近两年了。所有的条件都已经成熟了,那么真的可以再进行一次摸牌。
Android是源码在:https://android.googlesource.com/,Github也有做「部分子仓库」镜像:http://github.com/android,而CyanogenMod也成功地在Github上管理他们的Android源码在这里:https://github.com/CyanogenMod/android/。
repo管理是基于一个仓库管理其它所有的子仓库,主仓库叫manifest,仓库中需要有一个名字叫default.xml的xml文件,该文件罗列了所有子仓库,简单的default.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="test"
fetch="../.." />
<default revision="refs/tags/v2.0"
remote="test"
sync-c="true"
sync-j="4" />
<project path="testsubrepo" name="username/testsubrepo" />
</manifest>
该主仓库管理了一个名字为testsubrepo的子仓库。初始化命令:
repo init -u git@127.0.0.1:username/platform_manifest.git –repo-url https://code.csdn.net/kangear/git-repo.git
经过上面的分析,目前有两个问题 1.批量添加Git仓库到Gitlab; 2.仓库名中含有正斜杠处理。第一个问题就是如何将近500个Git仓库添加到Gitlab服务器上;第二个是Google居然反人类地将正斜杠作为文件名一部分,如下图:
但是身为普通的劳苦大众无法做到这一点,Github和CyanogenMod的处理方式是将斜杠换成了下划线,但是这样做会破坏完整性。Rockchip是不使用Gitlab而使用一个小的服务器gitolite。Gitlab有着和Github一样的良好的用户体验但是需要进行仓库名字替换;Gitolite小巧,但是所有的东西都需要手动命令行配置极为繁琐。这着实是一个头痛的选择。
参考文档:
1. Ubuntu 14.04 下载CyanogenMod cm-12.0源码 http://blog.csdn.net/kangear/article/details/46622333
2. REPO镜像服务器搭建和管理 http://wenku.baidu.com/view/99fb9e2ea98271fe900ef93d.html