repo命令大全

时间:2024-10-08 09:05:04

1. 项目清单库

  1. <manifest>
  2.  <remote fetch="ssh://" name="origin" review=":8090"/>
  3.  <default remote="origin" revision="develop" sync-j="4"/>
  4.  <project groups='all' name="XXX/XXX" path="XXX/XXX" remote="origin" revision="develop">
  5.    <linkfile dest="XX/XX/" src="../.."/>
  6.    <copyfile dest="XX/XX/" src="./"/>
  7.  </project>
  8.  <project name="XXX/repohooks" path="XXX/XXX" remote="origin" revision="develop"/>
  9.  <repo-hooks enabled-list="post-sync" in-project="XXX/repohooks"/>
  10. </manifest>  

常用参数:

  • <remote>:描述了远程仓库的基本信息。

    name:远程仓库的名称,通常我们看到的命名是origin

    fetch:git库地址

    review:用作code review的server地址

  • <default>:default标签定义的属性,将作为<project>标签的默认属性,在<project>标签中,也可以重写这些属性。

    revision:默认分支

    remote:默认的远程版本库名称

    sync-j:表示在同步远程代码时,并发的任务数量

  • <project>:每一个repo管理的git库,就是对应到一个<project>标签

    path:把代码下载到指定目录下

    name:该项目远程版本库的相对路径

    groups:该项目远程版本库所属组

    revision:单独指定分支

    remote:单独指定远程版本库名称

  • <project><copyfile>:project元素下的子元素copyfile,定义clone后从src到dest拷贝操作。

  • <project><linkfile>:project元素下的子元素linkfile,定义clone后dest到src的软连接

  • <repo-hooks>:repo钩子,in-project下面应该有一个与钩子同名的python文件。因此,如果您想支持预上传钩子,您需要创建一个名为的文件。Repo将在处理钩子时动态加载该模块,然后调用其中的主函数。

    in-project:定义挂钩的项目。该值必须与先前定义的元素的name属性(而不是属性)匹配。

    enabled-list:要使用的钩子列表,空格或逗号分隔。

脚本库

repo对git命令进行了封装,提供了一套repo的命令集(包括init, sync等),所有repo管理的自动化实现也都包含在这个git库中。在第一次初始化的时候,repo会从远程把这个git库下载到本地。在repo的引导脚本中指定了repo脚本库的地址。

。。。。

常用命令

init 初始化

repo init -u <URL> [<OPTIONS>]
  • -u:指定manifest项目清单库地址

  • -m,–manifest-name:指定manifests库中的清单文件,默认为maniftests/。

  • -b, –manifest-branch:指定manifest仓的分支,默认为master分支。

  • -g:指定manifests库中的组来下载代码,默认为all。

不常用参数:

  • –repo-url:指定远程repo库地址,当引导脚本中的地址不可访问时,可以通过该参数指定可访问的repo地址。

  • –repo-branch:同manifest这个git库一样,repo这个git库也是有版本差异的,可以通过该参数来指定下载repo这个远程git库的特定分支。

  • –no-repo-verify:在下载repo库时,会对repo的源码进行检查。通过–repo-url指定第三方repo库时,可能会导致检查不通过,所以可以配套使用该参数,强制不进行检查。

  • --depth {number}:限制下载记录次数,加速代码下载。

sync 同步代码

repo sync [PROJECT_LIST]

常用参数:

  • -j:开启多线程同步操作,这会加快sync命令的执行速度。该参数在中有默认设置。

  • -c, –current-branch:只同步指定的远程分支。默认情况下,sync会同步所有的远程分支。

不常用参数:

  • -d, –detach:脱离当前的本地分支,切换到中设定的分支。

  • -f, –force-broken:当有git库sync失败了,不中断整个同步操作,继续同步其他的git库。

  • –no-clone-bundle:在向服务器发起请求时,为了做到尽快的响应速度,会用到内容分发网络(CDN, Content Delivery Network)。

命令说明:

下载远程代码,并将本地代码更新到最新,这个过程称为“同步”。如果不使用任何参数,那么会对所有repo管理的git仓进行同步操作;也可以通过使用PROJECT_LIST参数,指定若干要同步的PROJECT。 根据本地git库代码不同,同步操作会有不同的行为:

  • 当本地的git库是第一次触发同步操作时。该命令等价于git clone,会将远程git库直接拷贝到本地。

  • 当本地已经触发过同步操作时。该命令等价于git remote update && git rebase origin/<BRANCH>,<BRANCH>就是当前与本地分支所关联的远程分支。在代码合并时可能会产生冲突,当冲突出现时,只需要解决完冲突,然后执行git rebase --continue即可。

upload 上传代码

repo upload [PROJECT_LIST]

命令说明:

将本地的新增或者修改代码上传到远程服务器。upload命令首先会找出本地分支从上一次同步操作以来发生的改动,然后会将这些改动生成Patch文件,上传至Gerrit服务器。 如果没有指定PROJECT_LIST,那么upload会找出所有git库的改动;如果某个git库有多个分支,upload会提供一个交互界面,提示选择其中若干个分支进行上传操作。

执行repo upload之前,需保证代码已经commit

不常用参数:

  • -re

当有多个git库的改动提交时,为了避免在网页上频繁的填选Reviewer这种重复劳动, upload提供了–re, –reviewer参数,在命令行一次性指定Reviewer。

forall 多仓执行

repo forall [PROJECT_LIST] -c <COMMAND>

常用参数:

  • -c:后面可以带的任何可以被系统支持的shell命令

  • -p:在shell命令输出之前列出项目名称

  • -v:列出执行shell指令输出的错误信息

该命令还可以添加环境变量:

环境变量参数:

  • REPO_PROJECT:指定项目的名称

  • REPO_PATH:指定项目在工作区的相对路径

  • REPO_REMOTE:指定项目远程仓库的名称

  • REPO_LREV:指定项目最后一次提交服务器仓库对应的哈希值

  • REPO_RREV:指定项目在克隆时的指定分支,manifest里的revision属性

如果-c后面的shell指令是上述的环境变量,则需要用单引号把shell命令括起来使用。

打标签:

repo forall -c git tag 标签名

start 创建并切换分支

repo start <BRANCH_NAME> [<PROJECT_LIST>]

repo start 的实质就是对git checkout -b 的封装

常用参数:

  • --all:对所有的PROJECT都执行分支切换操作

checkout 切换分支

repo checkout <BRANCH_NAME> [<PROJECT_LIST>]

该命令实际是对git checkout命令的封装。检出之前由repo start创建的分支。

status 状态查询

repo status [<PROJECT_LIST>]

用于查看指定仓的工作空间,类似于git status,如果不添加参数,则是查看所有仓 。

说明:

每个小节的第一行显示的是项目名称和所在的分支名称

每个小节的第二行的第一个字母表示暂存区文件修改的状态

  • -:没有改变

  • A:添加(不在HEAD中,在暂存区中)

  • M:修改(在HEAD中,在暂存区中,内容不同)

  • D:删除(在HEAD中,不在暂存区)

  • R:重命名(不在HEAD中,在暂存区,路径修改)

  • C:拷贝(不在HEAD中,在暂存区,从其他文件拷贝)

  • T:文件状态改变(在HEAD中,在暂存区,内容相同)

  • U:未合并,需要冲突解决

每个小节的第二行的第二个字母表示工作区文件的更改状态

  • -:新/未知(不在暂存区,在工作区)

  • m:修改(在暂存区,在工作区,被修改)

  • d:删除(在暂存区,不在工作区)

branchs 分支查询

repo branches [<PROJECT_LIST>]

命令说明:

读取各个项目的分支列表并汇总显示。可指定只读取某一项目的列表。

diff 文件对比

repo diff [<PROJECT_LIST >]

命令说明:

该命令实际是对git diff命令的封装。用于显示各项目工作区下的文件差异,可指定只显示某一项目工作区下的文件差异。

download 下载代码

repo download <TARGET> <CHANGE>

命令说明:

download是从Gerrit下载改动代码。

  • <TARGET>:指定要下载的PROJECT,譬如Tapp/eCommApp

  • <CHANGE>:指定要下载的改动内容的change_number

prune 删除合并分支

repo prune [<PROJECT_LIST>]

命令说明:

删除指定PROJECT中,已经合并的分支。当在开发分支上代码已经合并到主干分支后,使用该命令就可以删除这个开发分支。随着时间的演进,开发分支会越来越多,在多人开发同一个git库,多开发分支的情况会愈发明显,假设当前git库有如下分支:

* master
​
  dev_feature1_201501   # 已经合并到master
​
  dev_feature2_201502   # 已经合并到master
​
  dev_feature3_201503   # 正在开发中,还有改动记录没有合并到master

那么,针对该git库使用prune命令,会删除dev_feature1_201501和dev_feature2_201502。

stage 添加文件至暂存区

repo stagei [<PROJECT_LIST >]

命令说明:

该命令实际是对git add --interactive命令的封装,用于将项目工作区中的改动添加到暂存区。

abandon 删除分支

repo abandon <branchName> [<PROJECT_LIST > ]

命令说明:

该命令实际是对git branch -D命令的封装。作用是删除分支。

manifest 查看manifest

repo manifest -r -o %s_manifest.xml

常用参数:

  • -r:保存当前分支revisions。

  • -o :输出xml文件名。

命令说明:

用于显示manifest文件内容。

version 查看版本号

命令说明:

用于显示repo版本号。

打tag

  1. repo forall -c 'git tag "tag名"'
  2. repo forall -c 'git push origin tag名'