Repo学习笔记

repo是什么

repo是Google开发的用于管理Android版本库的一个工具,repo并不是用于取代git,而是用Python对git进行了一定的封装,简化了对多个Git版本库的管理。对于repo管理的任何一个版本库,都需要使用git命令进行操作。

repo是什么?
Repo是基于git的仓库管理工具,是一个python脚本

repo干什么?
Repo管理很多的git仓库,可以做统一的上传等其他操作,并且可以自动化部分Andoid开发流程

repo的使用:

1.运行repo init 命令,克隆Android的一个清单库,这个清单库是通过xml技术建立的版本清单库。

2.清单库中的manifest.xml文件,列出了160多个版本库的克隆方式。包括版本库的地址和工作去地址的对应关系,以及分支的对应关系。

3.运行repo sync的命令,开始同步,即分别克隆这160个版本库到本地的工作区中。

4.同时对160多个版本库进行切换分支操作,切换到某个分支。

5.repo upload(等同于git push 操作)

1,repo init

首先要说一下repo分为两部分, 一部分时一个名叫repo的python文件,另一部分是一个名叫repo.git这么一个git仓库. 而这个repo文件是一个引导器,以下命令下载它并设置它为可执行:

$curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo  
$chmod a+x ~/bin/repo 
$export PATH=$PATH:~/bin

此时,你可以运行一下它,会提示没有安装repo,这就说明,这个repo文件是一个引导器,或者是安装器.

它要如何安装呢? 需要使用repo init.

repo init的用法是必须指定一个manifest的url:在工作目录中执行repo init -u <url>,完成repo完整的下载及项目清单版本库的下载:

$repo init -u https://android.googlesource.com/platform/manifests -m dalvik-plus.xml

清单库实际上只包含一个xml文件,这个XML文件定义了多个版本库和本地地址的映射关系,是repo工作的指引文件,所以在使用repo引导脚本进行初始化的时候,必须通过-u参数指定清单库的源地址。

repo引导脚本的init子命令可以使用下列和清单库相关的参数:

-u manifests:设定清单库的git服务器地址

-b REVISION :检出清单库的特定分支,否则检出 manifest git 库的 master 分支

-m NAME.xml :使用自己定义的版本清单xml,否则使用缺省值 default.xml

–mirror:只在repo第一次初始化的时候调用,以和Android服务器同样的结构在本地建立镜像

在执行完这个命令后,会在当前目录创建一个目录.repo,在它里面有个目录repo,是从repo.git仓库检出的代码.

2,repo sync

当以上一切准备完毕.,我们就可以使用repo sync 将所有远程仓库拉取到本地。

当然,我们可以在repo sync后面跟上需要的项目名称,项目的名称来自.repo/manifest.xml这个XML文件中project元素的name属性值。例如克隆platform/build项目:

repo sync platform/build

3, repo upload

进入相应目录,就可以使用
git checkout
git add
git commit
等基本操作了。
但最后的 git push 必须使用 repo upload 来替代。

repo的其他用法

  1. repo diff [ project-list ]

    显示提交的代码和当前工作目录代码之间的差异。

  2. repo download target revision

    下载特定的修改版本到本地, 例如: repo download pltform/frameworks/base 1241 下载修改版本为 1241 的代码

  3. repo start newbranchname .

    创建新的branch分支。 “.” 代表当前工作的branch 分支。

  4. repo prune [project list]

    删除已经merge 的 project

  5. repo forall -c

    这个命令会遍历所有的git仓库,并在每个仓库执行-c所指定的命令(这个被执行的命令就不限于仅仅是git命令了,而是任何被系统支持的命令,比如:ls 、 pwd 、cp 等等的 )

    比如通过这个命令遍历所有的仓库并在每个仓库执行”git reset”,用以将每个仓库的改动都清除的时候:

    repo forall -c git reset –hard HEAD

    再补充一点:以前用repo forall 执行一些命令的时候,可能在遍历到某个仓库的时候出了问题,但是我却苦于不知道这个仓库到底是哪个!

    repo help forall 用这个命令查看下针对forall的帮助吧。说的很清楚,repo执行的时候加上-p参数就可以在遍历到每个仓库的时候先打印出当前的pwd,然后再继续执行-c所指定的命令。举例如下:

    repo forall -p -c git branch

    //该命令会遍历所有仓库并打印每个仓库的分支情况,由于有了-p参数,这样便会打印出每个仓库的路径!!!

  6. repo status

    显示 project 中每个仓库的状态,并打印仓库名称

猜你喜欢

转载自blog.csdn.net/qq_15437629/article/details/80025352