Git-Repo的使用

构建步骤

请按以下步骤执行

  1. 安装repo
1
2
3
$ cd /usr/local/bin
$ curl https://storage.googleapis.com/git-repo-downloads/repo > repo
$ chmod a+x repo
  1. 初始化整个仓库

首先挂上 SSR.

1
2
3
4
$ export https_proxy=http://127.0.0.1:1087
$ cd <Repo 的工程目录>
$ repo init -u <YOUR GIT REPO>
$ repo sync

That’s All.

下面是详细介绍以及对Android适配的说明。

安装 Git-Repo

Git-Repo源码地址
Git-Repo 本质上就是一款基于 Git 上的Python工具,它是google用来管理aosp(Android open source platform)的,具体功能很像git的submodule.
Git-Repo 能够管理多个 Git 项目并且能够自动执行部分开发工作流程。

很多系统都会使用 Repo, 安装方法如下:

1
2
3
4
5
# Debian/Ubuntu.
$ sudo apt-get install repo

# Gentoo.
$ sudo emerge dev-vcs/repo

也可以将其作为一个脚本单独安装在文件夹中

1
2
3
4
$ mkdir -p ~/.bin
$ PATH="${HOME}/.bin:${PATH}"
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo
$ chmod a+x ~/.bin/repo

以 Mac 举例

1
2
3
$ cd /usr/local/bin
$ curl https://storage.googleapis.com/git-repo-downloads/repo > repo
$ chmod a+x repo

如果放在其他地方,要记得配置环境变量

使用 Manifest 配置

Repo所有项目地址都是由 Manifest 配置,Manifest放在项目文件夹中,默认名字为 default.xml

Bangumi项目的配置举例说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<!-- 指定远程服务器地址,name为该远程地址的标识,整个项目中可以存在多个remote -->
<remote name="acggroup" fetch="https://git.bangumi.com/acggroup/" />

<!-- revision表示该远程地址的默认分支,其为master, sync-j表示四个子线程同时进行处理-->
<default revision="master" remote="acggroup" sync-j="4" />

<!-- 一个project代表一个模块, name表示在git服务器上的路径,remote表示远程服务器地址,path表示在本地路径-->
<project name="app" remote="acggroup" path="." />

<project name="lib-arch" remote="acggroup" path="lib_network" />
<project name="lib-base" remote="acggroup" path="lib_base" />
<project name="lib-download" remote="acggroup" path="lib_download" />
<project name="lib-cominterface" remote="acggroup" path="lib_cominterface" />

<project name="module-comic" remote="acggroup" path="module_comic" />
<project name="module-ad" remote="acggroup" path="module_ad" />

</manifest>

除此之外,还有一些如<copyfile> <linkfile> <include> <group>等标签,可以参考以下地址学习一下

aosp default.xml

manifest-format

repo 命令

具体参考Repo 命令参考资料,这里举几个常用的命令

repo 初始化

repo init -u [OPTIONS>]

在当前目录中安装 Repo,

  1. -u:参数指向 Mainfest文件地址
  2. -m:在代码库中选择清单文件。如果未选择任何清单名称,则会默认选择 default.xml
  3. -b:指定修订版本,即特定的清单分支。
  4. options额外一些配置,比如指定repo的源码地址(不指定repo源码地址的话,需要翻墙才能init成功)

repo 更新

repo sync

下载新的更改并更新本地环境中的工作文件。如果您在未使用任何参数的情况下运行 repo sync,则该操作会同步所有项目的文件.
运行 repo sync 后,将出现以下情况:

如果目标项目从未同步过,则 repo sync 相当于 git clone。远程代码库中的所有分支都会复制到本地项目目录中。
如果目标项目已同步过,则 repo sync 相当于以下命令:

1
2
git remote update
git rebase origin/<BRANCH>

其中 是本地项目目录中当前已检出的分支。如果本地分支没有在跟踪远程代码库中的分支,则相应项目不会发生任何同步。
如果 git rebase 操作导致合并冲突,那么您需要使用普通 Git 命令(例如 git rebase --continue)来解决冲突。
repo sync 运行成功后,指定项目中的代码会与远程代码库中的代码保持同步。

选项:

  1. -d:将指定项目切换回清单修订版本。如果项目当前属于某个主题分支,但只是临时需要清单修订版本,则此选项会有所帮助。
  2. -s:同步到当前清单中清单服务器元素指定的一个已知的良好版本。
  3. -f:即使某个项目同步失败,系统也会继续同步其他项目。

repo 状态

repo status []

对于每个指定的项目,将工作树与临时区域(索引)以及此分支 (HEAD) 上的最近一次提交进行比较。在这三种状态存在差异之处显示每个文件的摘要行。
要仅查看当前分支的状态,请运行 repo status。系统会按项目列出状态信息。

每次Git提交完后记得 repo status,防止漏掉其他项目上的修改。

repo 开发

repo start [] # —all 表示对所有项目进行操作
Repo forall –c git ….. # 对由repo管理的git库进行操作,

从清单中指定的修订版本开始,创建一个新的分支进行开发。

参数应简要说明您尝试对项目进行的更改。如果您不知道,则不妨考虑使用默认名称。

指定了将参与此主题分支的项目。

这个可以在不同的项目中使用不同的分支,防止代码冲突

Android上的额外工作

app主模块

因为app主模块中会携带一些 build.gradle,gradle.properites,settings.gradle等文件,所有需要将app里面的文件直接放入repo下,如下所示

1
<project name="app" remote="acggroup" path="." />

防止各个模块在Git上的污染

因为app直接放在 repo 目录中,所以不可避免的会产生git的文件污染,这时候需要配置 .gitignore文件来进行避免

1
2
3
...
*/
!/app

*/表示所有文件夹都不加入代码版本控制,!/app app主文件夹除外。

所以若以后在主目录下加入新的文件夹并要加入版本控制,必须要在 .gitignore 中进行除外 !/<YOUR DIR>

忽略 .repo 文件夹

因为 .repo 文件夹中会额外存一份从git上拉取过来的代码,所以为了防止在开发中误修改 .repo 中的文件需要将 .repoAndroid Studio IDE 中除外.

具体操作:Android Studio -> Editor -> File Types -> Ignore files and folders(在最下方) -> 编辑并添加 .repo;

总结

多git项目开发能够即时的将修改的代码同步到其他项目上,这样就能随心所欲的开 project 了。

而且方便调试和修改,不用再每次改一处代码上传一次maven然后在download下来,简直折磨。

Repo操作其实没多少,其余的还是git操作为主,不过第三方的git管理软件比如 sourcetree 可能会出问题(我没试过),所以还是乖乖用git命令行吧。

文章作者: cpacm
文章链接: http://www.cpacm.net/2020/01/06/Git-Repo的使用/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 cpacm
打赏
  • 微信
  • 支付宝

评论