git-repo系列教程(2) manifest 文件

manifest 文件

文章目录

manifest文件介绍

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
    <remote fetch="ssh://git@git.software.team/learn-repo" name="origin" review="http://xxx.xxx.xxx:8080"/>
    <remote fetch="https://github.com" name="github" alias="origin"/>
    <default remote="origin" revision="master" sync-j="4" />
    <project name="build" path="build">
        <linkfile dest="build.sh" src="build.sh"/>
    </project>
    <project name="docs" path="docs">
        <copyfile dest="README.md" src="README.md"/>
    </project>
    <project name="third_party/openssl" path="third_party/openssl" revision="OpenSSL_1_1_1l" />
    <project name="curl/curl" path="third_party/curl" remote="github" />
    <project name="src" path="src" revision="release" />
</manifest>
  • remote元素: remote元素可以有多个,用于存在多个git远程服务器的情况。
    • fetch:使用此remote的所有项目的Git URL前缀。 **每个项目的名称都附加到此前缀以形成用于克隆项目的实际 URL。**如果使用此remote的所有项目的前缀和manifest仓库前置一致的话,可以使用...代替。
    • name:此清单文件唯一的短名称。此处指定的名称用作每个项目的 .git/config 中的远程名称,因此可自动用于 git fetch、git remote、git pull 和 git push 等命令。
    • review:通过repo upload将评论上传到的 Gerrit 服务器的主机名。 该属性是可选的; 如果未指定,则repo upload将不起作用。
    • alias:该属性可以省略,当指定了该属性时,可以覆盖name属性设置每个项目的.git/config中的远程名称。不同remote元素的alias属性可以相同,比如不同remote元素的alias属性可以都是origin。
    • groups属性:所有的projects都属于group "all",如果你只想下载部分project,你可以在初始化的时候加入-g选型。
bash 复制代码
repo init -u https://android.googlesource.com/platform/manifest -g all,-notdefault,tools
#示例中的-g all,-notdefault,tools表示下载所有default的project和tools project。
  • default元素 default元素只能有一个。
    • remote:project部分不单独指定remote的话就使用default部分的。
    • revision:project部分不单独指定revision的话就使用default部分的。
    • sync-j:同步时(执行repo sync命令时)使用的并行作业数
    • sync_c:如果设置为true,则只同步指定的分支(revision 属性指定),而不是所有的ref内容
    • sync_s:如果设置为true,则会同步git的子项目
  • project元素 该部分定义了项目代码由哪些子仓库组成
    • name:相对于remote部分fetch指定的前缀的相对路径
    • path:把代码下载下来后在本地的相对于当前路径的相对路径
    • revision:是指下载下来的代码要checkout到哪个revision上,这里的revision可以是commit id、branch name、tag name,本质上都是commit id。default.xml中通常用branch name做revision,可以下载到并且checkout出该branch上最新的代码,标签和/或commit id在理论上应该有效,但尚未经过广泛测试。如果revision用commit id的话,那后面必须跟上upstream,upstream的值是个branch name。revision部分如果省略的话,就等于使用default部分定义的revision。
    • remote:前面定义的远程元素的名称。如果未提供,则使用默认元素提供的值。
  • copyfile元素 project元素的子元素 ,每个元素描述了一对 src-dest 文件对。同步时(即执行repo sync命令时)src文件会被拷贝到dest。通常会被用于 README 或 Makefile 或其他构建脚本。
    • dest:是相对于当前目录(执行repo init和repo sync命令的目录)的路径
    • src:是相对于project path的相对路径
  • linkfile元素 与copyfile类似,只不过不是拷贝,而是建立软连接。

清单库manifest.git例子

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
    <remote name="server" alias="origin" fetch="https://www.sample.com/git/xxx" />
    <remote name="home" alias="origin" fetch="http://server:3000/xxx" />

    <default remote="home" revision="master" sync-j="4" sync_s="ture" sync_c="false" />

    <project name="build_docs" path="build_docs"></project>
    <project name="pc_sdk" path="pc_sdk"></project>

</manifest>
bash 复制代码
touch default.xml
git init
git add default.xml
git commit -m "first commit"
git remote add origin http://server:3000/xxx.git
git push -u origin master
相关推荐
海岛日记2 小时前
git常用操作
git
喝鸡汤2 小时前
一起学Git【番外篇:如何在Git中新建文件】
git
“αβ”2 小时前
Windows下使用git配置gitee远程仓库
git
谢家小布柔7 小时前
Git图形界面以及idea中集合Git使用
java·git
winner88818 小时前
git merge 冲突 解决 show case
java·git·git merge·git冲突
玩电脑的辣条哥13 小时前
怎么给git动图扣除背景?
git·抠图
谢家小布柔14 小时前
git中的多人协作
git
isolusion15 小时前
git分支管理及策略
git
isolusion16 小时前
git仓库的基本概念和流程以及一些基本命令
git
scoone17 小时前
VSCode 中 Git 功能比较:内置 Git、GitLens 与 Git History 插件
ide·git·vscode