使用repo管理android系统源码实现

  • 说明

由于android源码工程比较庞大,所以不能直接使用git来管理android系统源码,google开发出了repo工具来进行android系统源码管理。我这里在本地服务器中建立了一个git服务器,使用的是gitblit实现的,具体实现方式可参考网上资料。

 

  • 实现流程 

1.manifest.git的实现

manifest.git仓库为用来管理工程中的其他git仓库的,里面填写了android系统代码中的其他git仓库的名称以及在本地的路径。

首先在gitbit建了一个名manifest工程的空仓库

在本地确定一个代码存放的文件夹,进入到该文件夹,然后执行git clone –u url  该url为manifest.git仓库的url,我这里是:

git clone –u http://[email protected]:10101/r/MPOSAndroidCode/manifest.git

成功后会在给文件夹中生成一个manifest的文件夹,进入到该文件夹,建立default.xml文件,该文件定义了需要使用repo管理的git仓库的名称以及仓库在本地的路径,以及仓库的url地址,我这里参考了知乎的一篇文章写得比较详细https://www.zhihu.com/question/41440585

我这里把我自己的default.xml文件贴出出来

xml version="1.0" encoding="UTF-8" ?>

 

     name="origin" fetch="http://[email protected]:10101/r/MPOSAndroidCode/" />

     remote="origin" revision="master"/>

     path="abi" name="abi"/>

     path="art" name="art"/>

     path="bionic" name="bionic"/>

     path="bootable" name="bootable"/>

     path="build" name="build"/>

       src="core/root.mk" dest="Makefile" />

     path="cts" name="cts"/>

     path="dalvik" name="dalvik"/>

     path="developers" name="developers"/>

     path="development" name="development"/>

     path="device" name="device"/>

     path="docs" name="docs"/>

     path="external" name="external"/>

     path="frameworks" name="frameworks"/>

     path="hardware" name="hardware"/>

     path="libcore" name="libcore"/>

     path="libnativehelper" name="libnativehelper"/>

     path="linux/bootloader" name="linux-bootloader"/>

     path="linux/kernel" name="linux-kernel"/>

     path="linux/platform" name="linux-platform"/>

     path="linux/prototype" name="linux-prototype"/>

     path="ndk" name="ndk"/>

     path="packages" name="packages"/>

     path="pdk" name="pdk"/>

     path="sdk" name="sdk"/>

     path="system" name="system"/>

     path="tools" name="tools"/>

     path="vendor" name="vendor"/>    

fetch=http://[email protected]:10101/r/MPOSAndroidCode/

fetch这里表示远程仓库的url,注意这里的url并不是某一个仓库的url,而是该项目的名称,后面跟相应仓库的名称就是相应仓库的url

 

project path表示了仓库在本地的相对路径,以manifest文件夹所在的文件夹为基本文件夹

name 表示了仓库的名称这个名称为创建仓库时的名称

 

这里设置了默认的远程链接名为origin,默认的同步的分支为master

 

这里default.xml文件就确定好了,可以在该文件中添加自己想进行管理的仓库。然后进入到manifest文件夹中使用下列命令

git add .

git commit –m “initial manifest ”

git push –all

将修改好的default.xml文件推送到服务器中。

 

2.repo工具的安装及配置

首先下载repo工具,如果不能从google下载,可以在清华大学和中科大的镜像下载网站进行下载,如在清华下载则进入到链接https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/地址根据说明文档下载或直接执行以下命令

mkdir ~/bin

PATH=~/bin:$PATH

curl   https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo

chmod a+x ~/bin/repo

 

如果下载不了,则可以使用git clone –u https://mirrors.tuna.tsinghua.edu.cn/git/git-repo命令将git-repo下载到本地,然后从git-repo将repo工具考被到~/bin目录下。

然后打开repo,设置REPO_URL = 'https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'这里默认是google的repo仓库地址,这里替换为清华大学的地址。在执行repo init的时候会下载repo仓库或者执行export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'也是同样的效果。

 

执行repo init –u manifest的仓库url 命令,安装Repo仓库和Manifest仓库。其中,Manifest仓库的地址由-u后来带的参数给出。

执行成功后会在该文件夹下生成一个.repo的隐形文件夹,这个文件夹里面包含了repo仓库和manifest仓库

 

在gitblit中创建需要管理的仓库,仓库的名称需要和default.xml文件中的相符合。最后使用repo sync命令同步操作,将远程仓库中的使用repo管理的仓库同步到本地。这样在本地就可以使用repo对相应的git仓库进行管理了,具体的repo使用命令在此博客中说明的比较清楚https://blog.csdn.net/sunweizhong1024/article/details/8987494 ,具体使用可以参考该博客

注意,如果初始代码都在本地,则在服务器中建立仓库的时候不能建立一个空的仓库,至少需要包含readme文件,如果是空的仓库,则使用repo sync命令同步的时候会出错,同步失败。

 

同步成功后,则使用repo forall –c git checkout master 命令将所有管理的git仓库由origin/master分支切换到master分支。

然后repo forall –c git add . 将所有文件添加到暂存区,注意对于不需要进行版本管理的文件添加到.gitignore文件中。

然后repo forall –c git commit –m “日志信息”,进行提交

最后执行 repo forall –c push –all 将所有代码推送到git服务器中。

 

这样就把本地的代码进行了版本管理并且推送到远程服务器中,其他使用repo进行的管理参考上面的博客可以实现。

 

3.如何从服务器中下载代码

首先按照上面的说明下载repo工具并安装

然后执行repo init –u  manifest url 连接命令进行repo仓库和manifest仓库的下载

最后执行repo sync命令进行同步,将服务器上的代码同步到本地

 

参考相关资料路径

https://blog.csdn.net/davidsky11/article/details/23291483

https://blog.csdn.net/obarong/article/details/79624468

https://blog.csdn.net/sunweizhong1024/article/details/8987494

https://www.zhihu.com/question/41440585

https://blog.csdn.net/kanyueliang410/article/details/79146145

如上面有不对的地方请多指正

你可能感兴趣的:(使用repo管理android系统源码实现)