使用 repo 管理项目代码 —— repo 清单配置

使用 repo 管理项目代码 —— repo 清单配置

随着业务越来越复杂,代码库也随之越来越多,多个代码库的管理就显得更加重要。在 Android 源码开发中,Google 开发了一个 repo 脚本用于管理项目中的数百个仓库(之前拉取的一份 Android 源码中,有 514 个 Git 仓库)。个人在使用中需要如何使用 repo 来管理项目代码呢?

使用 repo 最重要的就是 repo 脚本和项目清单仓库,在执行repo init执行过程中就会下载完整的 repo 仓库和项目清单仓库。repo 脚本是 Google 开发的,在 Android 源码中就包含了 repo 仓库,我们需要做的就是根据自己的项目来配置清单仓库。

1. 获取 repo 脚本

由于 Google 无法直接访问,我们可以使用清华镜像源中的 repo 脚本,或者使用我提供的github mirror

# 1. 获取 repo 脚本
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
# 或
# curl https://github.com/dezng/git-repo/raw/master/repo -o repo

# 2. 修改 repo 脚本
# 替换 repo 源,  REPO_URL = 'https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
# 或 REPO_URL = 'https://github.com/dezng/git-repo'
# 3. 授予执行权限
chmod +x repo
# 4. 添加到 PATH 环境变量中,或放置到 PATH 变量包含的目录中,此处选用第二种方式
sudo mv repo /usr/local/bin

使用下面的命令可以先下载一个 repo 示例
repo init -u https://github.com/dezng/AndroidLibManifests --repo-url=https://github.com/dezng/git-repo

2. 配置项目清单文件

repo 使用的项目清单是一个 git 仓库,默认配置是仓库中包含一个 default.xml文件,此文件指定了项目地址和代码下载之后的目录结构。

2.1 default.xml 文件示例
<?xml version="1.0" encoding="UTF-8" ?>

<manifest>
    <!-- 
    remote: 远程代码库配置
    name: 远程仓库名,在使用 git clone 时默认为 origin
    fetch: 远程仓库地址,用户和 project 节点中的 name 一起确定项目地址
    -->
    <!-- remote server -->
    <remote
        name="github"
        fetch="https://github.com" />
    <remote
        name="rx"
        fetch="https://github.com/ReactiveX" />
    <remote
        name="square"
        fetch="https://github.com/square" />

    <!--
    default: 默认配置
    remote: 默认使用的远程仓库
    revision: 默认使用的分支
    sync-j: 同步代码时的并发数
    -->
    <default
        remote="github"
        revision="master"
        sync-j="1" />

    <!--
    project: 单个代码库配置
    name: 项目地址,和指定的 remote 节点中的 fetch 一起组成仓库地址(fetch + name)
    group: 项目所属分组,可选
    path: 项目拉取到本地后所在目录
    remote: 指定所在远程仓库
    revision: 指定代码分支
    -->
    <!-- RxJava -->
    <project
        name="RxJava"
        group="android,rx"
        path="lib/RxJava"
        remote="rx"
        revision="2.x" />
    <!-- RxAndroid -->
    <project
        name="RxAndroid"
        group="android,rx"
        path="lib/RxAndroid"
        remote="rx"
        revision="2.x" />

    <!-- OkHttp -->
    <project
        name="okhttp"
        group="android,square"
        path="lib/OkHttp"
        remote="square" />

    <!-- LeakCanary -->
    <project
        name="leakcanary"
        group="android,square"
        path="lib/LeakCanary"
        remote="square" />

    <!-- Retrofit -->
    <project
        name="retrofit"
        group="android,square"
        path="lib/Retrofit"
        remote="square" />

    <!-- Glide -->
    <project
        name="bumptech/glide"
        group="android,bumptech"
        path="lib/Glide"/>

    <!-- Volley -->
    <project
        name="google/volley"
        group="android,google"
        path="lib/Volley"/>
</manifest>

remote: 可配置多个,一个项目清单中的代码可以来自不同服务器

project: 必须包含 name 和 path 属性,name 用于指定远程仓库位置,path 指定下载后的代码相对路径

project 中 path 可以很好的组织本地目录结构

2.2 创建清单仓库
mkdir manifests
cd manifests
vim default.xml
# 按示例配置 `default.xml`

# 初始化仓库
git init
git remote add xx REMOTE/URL
# 提交并 push 到远程
git add default.xml
git commit -m "init manifests"

3. 同步代码

# 初始化
repo init -u URL_FOR_MANIFEST_PROJECT
# 同步代码库
repo sync

4. 本地项目配置

使用 repo 统一配置项目代码之后,一些本地示例代码不需要的上传的可以使用 local_manifest 来处理,同步的过程中会同步更新。

配置文件:$TOP_DIR/.repo/local_manifests/*.xml
$TOP_DIR/.repo/local_manifest.xml (deprecated)

local_manifests 中的项目在repo sync过程中会同时同步下来,local_manifest.xml中的项目会优先加载,在local_manifests中的文件会已字母顺序加载。

5. 总结

以上,repo就可以用来管理所有的项目

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值