repo工具是如何简化我们使用git的?

《repo与git的关系》让我们知道如何在linux配置repo。repo是一个python写的脚本,脚本里依然用git命令来管理仓库,git命令是很多的,功能很强大。往往,功能越强大,就意味着越灵活,也就意味着学习它是需要花较多时间和精力的。另外一个事实是,每个开发都不会用完git所有的功能。所以为了简化git的使用,repo就出现了,我们来看看repo封装了git后,向我们了哪些功能。

  1. help:获得repo的帮助文档

查看帮助文档:

repo help

查看repo命令的帮助信息,如查看init命令的帮助信息

repo help init
  1. init
    在当前目录初始repo,它会创建一个.repo隐藏目录,这个隐藏目录包含了repo源代码和标准的android manifest 文件等的git仓库信息。
//-u:用于指定获取manifest仓库(清单仓库)的URL
repo init -u url [options ]

如获取openharmony OS的manifest仓库

repo init -u https://gitee.com/openharmony/manifest.git

指定要获取的分支

-b master --no-repo-verify

// -b master:获取master分支
repo init -u https://gitee.com/openharmony/manifest.git -b master

在仓库中选择一个manifest文件

// -m:指定要获取的文件
repo init -u https://gitee.com/openharmony/manifest.git -m oy-plus.xml

在init执行完成后,我们在~/HmOS的目录下有了一个隐藏目录.repo。那么接下来所有repo的命令的工作目录必须是.repo的父目录,如这里的~/HmOS或者~/HmOS的子目录,总的来说,都必须在~/HmOS这个目录里。

  1. sync
repo sync [project-list]

把远程仓库上的改变和更新都同步到本地环境,确保在开发前,本地仓库与远程仓库的一致性。减少以后合并代码的冲突或其他方面的问题。

这个命令后面有一个项目列表,意味着使用repo的项目往往比较大,依赖的项目也比较多,通过项目列表可以单独去更新某个项目的文件,如果次次都要更新全部项目,那会很耗时,现在可以指定更新会比较高效。如一个手机操作系统可能依赖camera project,network project,framwork project等等。如果不指定就是同步所有。

当我们执行repo sync这个命令时,如果项目从来没有与远程仓库同步过,那么这时操作就是git clone的行为,把远程仓库clone到本地,所有的分支都会被复制到本地来。如果项目曾经同步远程仓库,那么这时的作操就是git remote updategit rebase origin/branch这里的branch指是当前check out的分支名。如果本地当前的分支在远程并没有对应的分支,那么就什么都不操作。这里有个地方要提一下,如果repo sync操作出现了合并冲突(一般底层就是执行了git rebase操作),那么我们就要用git命令去处理这些冲突,如git rebase --continue(我不推这个,还是乖乖地处理好冲突再同步多一次。repo sync也会同步更新.repo文件夹里的文件。

  1. upload
repo upload [project-list ]

如果没有指定项目列表,就是上传所有的改动。如果有指定项目,那么repo会对比本地分支与远程分支,然后提醒你在还没有上传的分支中选择一个或多个来上传。当我们选择好要上传的分支后,我们在这些分支所做改动就会通过SSH连接传输到Gerrit。SSH是需要配置的。当Gerrit通过SSH服务器收到数据后,它将把每个提交转换为一个更改,以便审阅者可以单独对每个提交进行评论。就像在Github上那样去可以审查提交上来的代码,留评论。

  1. diff

显示提交和工作树之间的更改。

repo diff [project-list]
  1. download
    将指定的更改下载到指定的本地目录。
repo download target change

For example, to download change 1241 into your :

//下载改动1241到本地目录platform/frameworks/base directory
$ repo download platform/frameworks/base 1241
  1. forall
    执行shell命令
repo forall [project-list ] -c command [arg. ..]
  1. start
    创建一个新的分支
repo start newbranchname [project-list ]
  1. status
    显示当前工作目录或指定项目的状态
repo status [project-list ]

状态的信息:
A : 新增
M:修改
R: 重新命名
C:该文件是从另一个文件复制过来的。
T:文件模式被修改了
U:文件出现了冲突,未合并
- :文件状态未被修改。当你修改了,但未提交,就是这个状态。

从上面的命令使用,我们会发现repo在多项目开发中特别有用,尤其是那些有项目列表指定的命令。

你可能感兴趣的:(Git,git)