repo manifest文件

article/2025/10/27 0:34:01

一、前言:

repo用于管理多个git项目,同一产品可能包含多个git项目,不同的git项目集合,可能形成不同产品,通过repo可以实现方便的管理。

那么repo如何管理多个git项目的呢?管理的git项目的配置信息都存放在什么地方呢?

是通过一个manifest文件配置的。

二、manifest文件分析

<?xml version="1.0" encoding="UTF-8"?>  
<manifest>  <remote  name="shift"  fetch="git://git.mygit.com/" />  <default revision="kk-shift"  remote="shift"  sync-j="1" />  <project path="packages/shift/VideoPlayer" name="platform/packages/shift/VideoPlayer" />  <include name="another_manifest.xml" />
</manifest>  
  1. manifest
    这个是配置的顶层元素,即根标志

  2. remote

    name:在每一个.git/config文件的remote项中用到这个name,即表示每个git的远程服务器的名字(这个名字很关键,如果多个remote属性的话,default属性中需要指定default remote)。git pull、get fetch的时候会用到这个remote name。
    alias :可以覆盖之前定义的remote name,name必须是固定的,但是alias可以不同,可以用来指向不同的remote url
    fetch :所有git url真正路径的前缀所有git 的project name(就是后面的project标签的name元素)加上这个前缀,就是git url的真正路径
    review :指定Gerrit的服务器名,用于repo upload操作。如果没有指定,则repo upload没有效果

  3. default
    设定所有projects的默认属性值,如果在project元素里没有指定一个属性,则使用default元素的属性值。
    remote :远程服务器的名字(上面remote属性中提到过,多个remote的时候需要指定default remote,就是这里设置了)
    revision :所有git的默认branch,后面project没有特殊指出revision的话,就用这个branch
    sync_j : 在repo sync中默认并行的数目
    sync_c :如果设置为true,则只同步指定的分支(revision 属性指定),而不是所有的ref内容
    sync_s : 如果设置为true,则会同步git的子项目

  4. manifest-server
    它的url属性用于指定manifest服务的URL,通常是一个XML RPC 服务
    它要支持一下RPC方法:
    GetApprovedManifest(branch, target) :返回一个manifest用于指示所有projects的分支和编译目标。
    target参数来自环境变量TARGET_PRODUCT和TARGET_BUILD_VARIANT,组成$TARGET_PRODUCT-$TARGET_BUILD_VARIANT
    GetManifest(tag) :返回指定tag的manifest

  5. project
    需要clone的单独git
    name :git 的名称,用于生成git url。URL格式是:${remote fetch}/${project name}.git 其中的 fetch就是上面提到的remote 中的fetch元素,name 就是此处的name
    path :clone到本地的git的工作目录,如果没有配置的话,跟name一样
    remote :定义remote name,如果没有定义的话就用default中定义的remote name
    revision :指定需要获取的git提交点,可以定义成固定的branch,或者是明确的commit 哈希值
    groups :列出project所属的组,以空格或者逗号分隔多个组名。所有的project都自动属于"all"组。每一个project自动属于name:'name' 和path:'path'组。例如,它自动属于default, name:monkeys, and path:barrel-of组。如果一个project属于notdefault组,则,repo sync时不会下载
    sync_c :如果设置为true,则只同步指定的分支(revision 属性指定),而不是所有的ref内容。
    sync_s : 如果设置为true,则会同步git的子项目
    upstream :在哪个git分支可以找到一个SHA1。用于同步revision锁定的manifest(-c 模式)。该模式可以避免同步整个ref空间
    annotation :可以有0个或多个annotation,格式是name-value,repo forall命令是会用来定义环境变量
    linkfile:

  6. include
    通过name属性可以引入另外一个manifest文件(路径相对与当前的manifest.xml 的路径)
    name :另一个需要导入的manifest文件名字
    可以在当前的路径下添加一个another_manifest.xml,这样可以在另一个xml中添加或删除project

  7. remove-project
    从内部的manifest表中删除指定的project。经常用于本地的manifest文件,用户可以替换一个project的定义

三、实战

repo命令的使用格式如下所示:

$ repo <COMMAND> <OPTIONS>

可选的的有:help、init、sync、upload、diff、download、forall、prune、start、status,每一个命令都有实际的使用场景, 下面我们先对这些命令做一个简要的介绍:

3.1 init

repo init -u url [options]

在当前目录中安装 Repo。这样会创建一个 .repo/ 目录,其中包含存放 Repo 源代码和标准 Android 清单文件的 Git 代码库。

常用的几个选项:

  • -u:指定manifest文件所在的网址。
  • -m:选择代码库中的清单文件。如果未选择清单名称,则默认为 default.xml
  • -b:指定修订版本,即特定的 manifest-branch。注意,这个分支是manifst文件所在仓库的分支,并不是repo管理的项目git的分支。
  • --repo-url=URL:repo 工具本身的 git库地址。缺省为git://android.git.kernel.org/tools/repo.git。好多公司都将repo工具本身放在了自己的git仓库中,那么这个选项可以指定本公司的仓库地址。
  • --repo-branch=REVISION:使用 repo 的版本库,即 repo git 库的分支或者里程碑名称。缺省为 stable

注意:对于所有剩余的 Repo 命令,当前的工作目录必须是 .repo/ 的父目录或该父目录的子目录。-u和-m组合起来,就精确到manifest文件的git路径

该命令执行之后会生成一个.repo的文件夹,文件夹中的内容如下:

具体解释如下:

  • repo/manifests.git:此为repo配置信息的git库,不同版本包含不同配置信息,配置信息大致描述内容见后面。
  • repo/manifests:此为repo配置信息的工作目录(将配置信息的工作目录和相应的实际git目录分离管理,并且配置信息中的.git目录实际只是指向实际git库的软连接),其中可能包含一个或多个xml文件描述的配置。每个xml文件是独立的一套配置,配置内容包括当前repo工作目录包含哪些git项目、所有git项目所处的默认公共分支、以及远端地址等。
  • repo/manifest.xml:repo工作目录中的内容同一时刻只能采用manifests中的一个xml文件做为其配置,该文件就是其软连接,通过init的-m选项指定采用哪个文件;另外,同一xml文件也可能处于manifests库的不同版本或者不同分支,通过init的-b选项指定使用manifests中的哪个分支,每次init命令都会从服务器更新最新的配置。这里通过-m指定的manifests中的xml文件中
  • repo/repo:此为repo脚本集的git库,用于repo管理所需的各种脚本,repo的所有子命令就是其中的对应脚本实现。该脚本也通过git管理,.repo/repo/.git为对应的git目录。这里包含repo命令所需的所有子命令脚本实现,由python完成(我们可以在.repo/repo/subcmds中看到类似repo的init等的子命令脚本实现,如repo的init子命令即repo init,它由.repo/repo/subcmds/init.py实现)

3.2 sync

$ repo sync [PROJECT_LIST]

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

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

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

也就是说,多出了一个projects目录,和.repo外面的许多目录,具体内容如下:

(*).repo/projects:此为repo所管理的所有git项目集,包含repo当前配置所指定的所有git项目对应的git目录。不同的清单文件(即manifest.xml)内容,指定不同的git项目集组合,表征不同的项目版本或者项目,而如上所述,manifest.xml文件的内容又由其指向的manifests中的、具体的分支下的、xml文件来决定。

(*).repo/../*:此为repo的工作区。

当sync命令正确执行完毕后,本地代码就同远程代码保持一致了。在一些场景下,我们会用到sync命令的一些参数:

-j:开启多线程同步操作,这会加快sync命令的执行速度。默认情况下,使用4个线程并发进行sync

-c : –current-branch:只同步指定的远程分支。默认情况下,sync会同步所有的远程分支,当远程分支比较多的时候,下载的代码量就大。使用该参数,可以缩减下载时间,节省本地磁盘空间

疑问:本地已经创建了新的分析,这种情况下加-c和不加-c有什么区别?

-d :  –detach:脱离当前的本地分支,切换到manifest.xml中设定的分支。在实际操作中,这个参数很有用,当我们第一次sync完代码后,往往会切换到dev分支进行开发。如果不带该参数使用sync, 则会触发本地的dev分支与manifest设定的远程分支进行合并,这会很可能会导致sync失败

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

–no-clone-bundle:在向服务器发起请求时,为了做到尽快的响应速度,会用到内容分发网络(CDN, Content Delivery Network)。同步操作也会通过CDN与就近的服务器建立连接, 使用HTTP/HTTPS的$URL/clone.bundle来初始化本地的git库,clone.bundle实际上是远程git库的镜像,通过HTTP直接下载,这会更好的利用网络带宽,加快下载速度。 当服务器不能正常响应下载$URL/clone.bundle,但git又能正常工作时,可以通过该参数,配置不下载$URL/clone.bundle,而是直接通过git下载远程git库。

repo只同步某一个git仓库

repo是用来管理许多仓库的一种工具,使用manifest文件进行管理,当我们仅仅想下载某一个仓库的代码如何做?
首先到.repo这个目录下找到manifest.xml文件,查看需要下载的仓库名
比如这个文件内容是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <project name="mygallery" path="xxxx" revision="XXXX" />
</manifest>

repo sync -c mygallery就能下载这个仓库里面的代码了
 

ref:

Repo介绍

repo manifest.xml 分析 - Tao_Liu - 博客园

Repo 的使用小结 - v2m - 博客园

Repo 命令参考资料  |  Android 开源项目  |  Android Open Source Project

repo的理解 - 嘿十三 - 博客园

Manifest和Repo使用详解_weixin_33695082的博客-CSDN博客

Git 教程(三):仓库与分支 - 雪残梦影 - 博客园

Repo学习笔记 - Hello-World3 - 博客园

一篇通俗易懂的repo教程_wx5ce39a7086c98的技术博客_51CTO博客_repo基础教程

Repo使用详解_Kslient的博客-CSDN博客_repo使用教程


http://chatgpt.dhexx.cn/article/Zt3pPtGm.shtml

相关文章

Manifest文件详解

Manifest是个XML的描述文件&#xff0c;对于每个DLL有DLL的Manifest文件&#xff0c;对于每个应用程序Application也有自己的Manifest。对于应用程序而言&#xff0c;Manifest可以是一个和exe文件同一目录下的.manifest文件&#xff0c;也可以是作为一个资源嵌入在exe文件内部的…

AndroidManifest文件详解

AndroidManifest 官方解释是应用清单&#xff08;Manifest意思是货单&#xff09;&#xff0c;每个应用的根目录中都必须包含一个&#xff0c;并且文件名必须为AndroidManifest。这个文件中包含了APP的配置信息&#xff0c;系统需要根据里面的内容运行APP的代码&#xff0c;显示…

IIS 部署的网站无法启动

昨天更新了下电脑系统&#xff0c;早上一来发现自己原先在iis上部署的网站全部都被停止了。。。。。。。然后找其中一个网站进行重新启动&#xff0c;却是无法启动&#xff0c;提示如图&#xff1a; 这个是因为80端口被占用了&#xff0c;可以在 命令行 输入 netstst -ano …

如何打开IIS服务

windows10为例&#xff1a;右击此电脑--属性--控制面板--网络和Internet--程序--启用或关闭Windows功能--勾选Internet Information Services 所有选项--确定&#xff0c;等待操作完成后&#xff0c;就可以打开IIS服务了&#xff08;使用时直接搜索IIS即可&#xff09; 详细步…

Windows Server 2016 IIS无法启用W3SVC或IIS应用池状态未知服务无法启动

起因&#xff1a; 近期给客户部署系统&#xff0c;由于安装环境&#xff08;C、.net、dotnet&#xff09;出现了操作系统&#xff08;Windows Server 2016 Standard&#xff09;无法开机的情况。然后用PE修复系统之后&#xff0c;通过安全模式下&#xff0c;最后一次正确配置&a…

IIS因为World Wide Web Publishing Service无法启动 1068

IIS无法启动&#xff0c;报错&#xff1a; 然后在服务管理窗口中&#xff0c;找到World Wide Web Publishing Service 并启动。 如果World Wide Web Publishing Service 无法启动&#xff0c;右键属性查看依赖项&#xff0c;把依赖项都启动&#xff0c;再次启动World Wide Web …

iis启动 服务无法在此时接受控制信息。 (异常来自 HRESULT:0x80070425)

问题描述&#xff1a;每隔一段时间应用程序池就会自动停止。 再次启动就报错&#xff1a;服务无法在此时接受控制信息。 (异常来自 HRESULT:0x80070425) 处理办法&#xff1a;同时按下WinR,运行“services.msc”,进入服务管理&#xff0c; 里面有个“Credential Manager”,设…

IIS6/IIS7无法打开IIS管理器的解决方法。

症状&#xff1a;管理工具中的IIS管理器双击无反应&#xff0c;右键打开无反应。 我的电脑上右键管理&#xff0c;打开服务和应用程序&#xff0c;双击IIS管理器&#xff0c;闪开闪关。 解决办法&#xff1a;开始→运行→输入inetmgr.exe /reset 搞定&#xff0c;原因不明。。…

iis无法访问问题

早晨接到电话&#xff0c;说网络无法访问。想想昨天还可以怎么今天就不可以了呢&#xff1f; 回来后发现确实是&#xff0c;只有自己的机器可以访问&#xff0c;换一台就无法访问。 赶快百度。 首先百度到如下的网页&#xff0c;进行解决。 XP下iis服务器无法访问的问题 20…

『已解决』IIS启动 服务无法在此时接受控制信息

iis启动 服务无法在此时接受控制信息 问题描述&#xff1a;每隔一段时间应用程序池就会自动停止&#xff0c;报错&#xff1a;服务无法在此时接受控制信息。 (异常来自 HRESULT:0x80070425) iis启动 服务无法在此时接受控制信息。 (异常来自 HRESULT:0x80070425) iis应用池启动…

IIS已经安装,但无法打开的解决方法

问题描述: IIS(Internet Information Services)已经安装到电脑上,但是进入管理工具就是无法打开,双击后无法弹出相应程序. 解决方法: 卸载IIS服务重新安装IIS服务 卸载步骤: 进入控制面板,点击启用或关闭Windows功能.出现第二个界面,取消勾选红色方框的两项后确定,一段时间后会…

IIS无法启动计算机上的服务W3SVC如何修复

错误提示 启动iis7管理服务器提示:无法启动计算机上的服务W3SVC 启动Windows Process Activation Service服务,报错:6801 指定资源管理器中的事务支持未启动或已关闭 启动world wide web publishing service服务,报错:1068&#xff1a;依赖服务或组无法启动 执行步骤 打开命令…

IIS站点无法启动,万维网发布服务无法开机启动解决办法

1、IIS站点无法启动&#xff0c;点击启动报错。 2、World Wide Web 发布服务&#xff08;w3svc&#xff09;设置为自动 却没有启动。 特此记录下解决方法。 1&#xff09;打开服务列表&#xff0c;找到World Wide Web 发布服务&#xff0c;右键属性&#xff0c;查找依赖关系&a…

比较简单实用并且免费的端口映射(内网穿透)工具

“端口映射”通俗来说就是将外网主机的IP地址端口映射到内网中一台机器&#xff0c;提供相应的服务。内网相通&#xff0c;电因特网对外开放服务或者接收大数据&#xff0c;都需要端口映射。首先&#xff0c;想要做好端口映射&#xff0c;确定路由器&#xff0c;清楚的认识软件…

80端口映射外网方法

在本地服务器搭建了IIS或apache等web网站后&#xff0c;除了局域网内访问需要&#xff0c;还需要提供互联网访问站点&#xff0c;这时一般就需要路由器80端口映射设置。端口映射&#xff0c;即从一个网络环境下的端口映射到另一个网络环境下访问的过程。通常由软件方式来提供这…

内网用端口映射

第一步&#xff0c;保证你内网的机器通过所谓的代理服务器能顺利连上internet&#xff0c;这里就不多说了&#xff0c;粗略的写写。 看看这图&#xff0c;至于这个具有公网IP的代理服务器&#xff08;或称代理网关&#xff09;如何接入internet&#xff08;也是就问号里的东东&…

内网穿透用什么软件好?本地设置内网端口映射到外网访问

我们经常听到有人说在用内网穿透工具&#xff0c;那么内网穿透工具有什么作用呢&#xff1f;内网穿透工具的作用是将本地内网服务器和应用提供到互联网上连接访问&#xff0c;可以解决在无公网IP条件下跨网互通互连问题。比如在家远程办公&#xff0c;访问公司内部办公OA服务器…

windows 下端口转发 端口映射工具 passport 端口映射

下载地址 http://sourceforge.net/projects/pjs-passport/ 参考 https://yanbin.blog/windows-port-forwarding-passport/

windows10环境下进行端口映射连接内网

&#xff08;1&#xff09;下载安装包&#xff08;免安装&#xff09; tfcenter安装包https://share.weiyun.com/tFAN6x5p&#xff08;2&#xff09;解压并执行tfcenter.exe软件&#xff0c;提示运行已成功 &#xff08;3&#xff09;右击最小化图标&#xff0c;打开网页并选择…

免费内网端口映射、内网穿透

网络通永久免费内网端口映射,内网穿透软件&#xff0c;可轻松访问连接内网&#xff0c;100%穿透内网&#xff0c;不需设置路由器&#xff0c;不需公网ip,不需固定ip,不需动态域名&#xff0c;用户可免费添加多个映射,适合在公司&#xff0c;小区宽带&#xff0c;出租屋&#xf…