相关文章推荐
打酱油的小刀  ·  巧用Excel ...·  1 年前    · 
飞奔的口罩  ·  python requests ...·  1 年前    · 
失恋的瀑布  ·  seaborn scatter plot ...·  1 年前    · 

使用 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就可以用来管理所有的项目

随着业务越来越复杂,代码库也随之越来越多,多个代码库的管理就显得更加重要。在 Android 源码开发中,Google 开发了一个 repo 脚本用于管理项目中的数百个仓库(在我拉取的一份 Android 源码中,有 514 个 Git 仓库)。个人在使用中需要如何使用 repo 来管理项目代码呢?使用 repo 最重要的就是 repo 脚本和项目清单仓库,在执行repo init执行过程中就会... 链接:https://www.zhihu.com/question/41440585/answer/91102156 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 通常repo通过以下两个命令来下载代码: repo init -u git://http://xxx.xxx.xxx/platform/manifest -b $bra... 简单来说,repo是git仓库的管理工具,它能更方便的管理由若干个git仓库组成的项目。 它是python脚本,平常我们操作的repo命令只是一个入口,其实它还有一个git仓库,是一系列python脚本的集合 repo通过清单文件(.xml)来管理清单文件里记录了所有的git仓库信息。也可以当作是项目的快照,根据某一个清单文件,就能将整个项目里的所有git仓库都还原到生成清单文件时的状态。所有的清单需要一个git仓库管理 一、准备工作
1.   关于repo repo是Google开发的用于管理Android版本库的一个工具。repo并不是用来取代Git,而是用Python对Git进行了一定的封装,简化了对多个Git版本库的管理。对应repo管理的任何一个版本库,都需要使用Git命令进行操作。 repo使用过程大致如下: l  运行repo init命令,克隆Android的一个清单库。这个清单库是通过XML技术建立的版
搭建repo服务器管理多个git工程 原文链接: http://www.lisongze.com/2018/11/02/repo/ or http://www.lisongze.cn/2018/11/02/repo/ 1.repo介绍 android使用git作为代码管理工具,开发了gerrit进行代码审核以便更好的对代码进行集中式管理。还开发了repo命令行工具,对git部分命令进行封...
1.repo介绍 Android使用git作为代码管理工具,开发了gerrit进行代码审核以便更好的对代码进行集中式管理。还开发了repo命令行工具,对git部分命令进行封装,将百多个git库有效的组织。 鉴于repo能够管理多个git库,针对一个项目需要多个git库分开管理使用repo就非常方便。如嵌入式项目一般由uboot、kernel、文件系统rootfs、用户程序等组成。这里就以这样的项目组织来搭建r
关于repo Android使用Git作为代码管理工具,开发了Gerrit进行代码审核以便更好的对代码进行集中式管理,还开发了Repo命令行工具,对Git部分命令封装,将百多个Git库有效的进行组织。 下载安装repo curl http://git-repo.googlecode.com/files/repo-1.12 > ~/bin/repo 然后将repo加入系统变量 如果是在mac下安装了brew,可以用如下命令行安装repo: brew install rep...
本文基于repo v1.12.37和repo launcher 1.23 文中manifest文件有时也称为清单文件 文中对40个字符的commit id进行截断处理,例如将"221a1acee8047ae65c2d5980e3a7c5f73362c59d"截断为8个字符的"221a1ace" 1. manifest文件之痛 有没有遇到过这样的场景: 例如,想冻结某个时间点调试好的代码, <manifest> <remote fetch="ssh://10.XX.XX.XX" name="origin" review="10.XX.XX.XX:8090"/> <default remote="origin" revision="develop" sync-j="4"/> <project groups='all' name="XXX/XXX" path="XXX/XXX" remote="origin" revi... 可以使用Python的configparser模块读取配置文件,然后使用open函数来读写Linux的repo文件。比如: import configparserconfig = configparser.ConfigParser() config.read('/etc/repo.conf')with open('/etc/repo.conf', 'w') as configfile: config.write(configfile)