目录

repo

批量管理git项目

manifest.xml文件结构如下

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
    <remote name="bare" fetch="file:///home/fangqiang/maketest/git/bare3/" />
    <default revision="branch_name" remote="bare" /> // revision 为每个项目指定分支
    <project name="test" path="test" groups="g1" revision="master"/>  //  revision 可以指定master, SHA,但是不能用tag(很奇怪)
    <project name="test2" path="test2" groups="g2" revision="17beafc4f040b1801e56e33e0ff2cba7c52f0d8d"/>
</manifest>

repo init

repo init 
-u	指定从哪个仓库下载,
-b	指定分支,
-m	指定manifest文件名称(默认master)
-g	指定项目组。

生成repo某个版本的manifest.xml

每次执行repo sync之后,执行一遍repo sync -r -o my_manifest.xml会成一个记录当前版本所有SHA值得manifest.xml文件(我猜测这个操作的底层是将repo sync之后每隔仓库中的 .git/HEAD文件中的值取出来而已)

文件 A 如下

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote fetch="url" name="re"/>
  <default remote="re" revision="master"/>
  <project name="fang/test" path="test"/>
</manifest>

文件 B 日下 【 只是多了一个SHA值 和upstream(记录SHA所在的分支)属性 】

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote fetch="url" name="re"/>
  <default remote="re" revision="master"/>
    <project name="fang/test" path="test" revision="d9b86b0ef8a373e3be6705f9f6ef4bb91e892d38" upstream="master"/>
</manifest>

repo文件详解

Android使用repo来管理多个git项目。它需要一个manifest XML文件来指示这些git项目的属性。

repo manifest XML可以包含下面的元素:

本地manifest

本地的manifest文件存放在$(TOP_DIR)/.repo/local_manifest/*.xml。$TOP_DIR/.repo/local_manifests/local_manifest.xml
如果存在,会被最先装入。然后是以字母顺序的$TOP_DIR/.repo/local_manifests/*.xml文件。这些manifest会在repo sync
之前被处理。以便repo下载和管理额外的project。

 

Example:

  $ ls .repo/local_manifests

  local_manifest.xml

  another_local_manifest.xml

 

  $ cat.repo/local_manifests/local_manifest.xml

  <?xml version="1.0"encoding="UTF-8"?>

  <manifest>

    <project path="manifest"

             name="tools/manifest"/>

    <projectpath="platform-manifest"

             name="platform/manifest"/>

  </manifest>