网站建设技术发展趋势预测,北京优化互联网公司,wordpress评论cdn刷新,制作网站免费Repo简介
“Repo” 是一个用于管理多个Git存储库的工具#xff0c;通常与Google的Android开发项目一起使用。它允许您在一个命令下轻松地进行多个Git存储库的同步、下载和管理。
repo下载安装
从清华镜像源下载
mkdir ~/bin
PATH~/bin:$PATH
curl https://mirrors.tun…Repo简介
“Repo” 是一个用于管理多个Git存储库的工具通常与Google的Android开发项目一起使用。它允许您在一个命令下轻松地进行多个Git存储库的同步、下载和管理。
repo下载安装
从清华镜像源下载
mkdir ~/bin
PATH~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo #~/bin/repo为repo下载本地的存放路径
chmod ax ~/bin/repo 其实下载下来的repo文件只是一个使用Python编写的引导脚本Google 称之为 Repo launcher本质上是一个python脚本可以使用vim打开的完整的repo(即repo的主体部分)还没有下载。
repo help
查看repo帮助说明该帮助列举了repo所支持的子命令及各个子命令的简要介绍。 如果需要查看某个具体子命令的详细介绍执行命令repo help 即可。例如查看repo init的帮助可以输入repo help init。
上一小节已经提及到了下载下来的repo只是一个引导脚本完整的repo工具还没有下载此时执行repo help命令只能看到init和help两个子命令而且帮助信息中还会提示repo还未安装需要执行repo init安装。(需要注意repo init需要跟参数的后面会单独介绍repo init的使用) 当执行完repo init下载了完整的repo工具之后再执行repo help就会看到repo更多的子命令。 注意repo init -u 后跟url地址如果是自己项目则是Android源码项目源码编辑的Repo的地址如果是官方AOSP repo是官方配置好的可以对比如下两个安装repo工具的方式
repo init -u https://github.com/remote-android/platform_manifests.git -b redroid-11.0.0 --depth1 --git-lfs # 自定义repo工具中描述源码仓库地址组织形式repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-12.0.0_r1 # 官方AOSP repo中源码仓库组织形式
或者
repo init -u https://android.googlesource.com/platform/manifest -b android-12.0.0_r12
如果需要某个特定的 Android 版本特定版本标记查看
https://source.android.google.cn/docs/setup/about/build-numbers?hlzh-cn#source-code-tags-and-buildsrepo init -u 命令效果 首先当前目录产生一个.repo目录 然后克隆一份repo的源代码到.repo/repo下里面存放了其他repo子命令即repo的主体部分。 接着从manifest_git_path仓库地址clone清单库到.repo/manifests和.repo/manifests.git目录。 同时.repo目录下还包括manifest仓库(清单库)内容
.repo文件夹简介 执行repo init命令之后会在当前目录创建一个.repo文件夹。
文件夹 描述
manifests manifest仓库(清单库)内容即repo init的-u选项对应的仓库
manifests.git manifest仓库(清单库)的.git目录
manifest.xml 指明当前生效的Manifest文件即repo init的-m选项对应的参数(没有该选项时默认为default.xml)
repo repo命令的主体包含了最新的 repo 命令manifest文件分析
所谓manifest仓库(清单库)其实就是存放manifest(清单)文件的仓库实际上可以是任意仓库只要该仓库中存在repo init命令-m选项指定的manifest文件即可清单库命名为manifest只不过是一种约定俗成的写法罢了。 manifest仓库一般都会有一个manifests\default.xml文件该文件为默认的manifest文件。
?xml version1.0 encodingUTF-8?
manifestremote nameaospfetchhttps://mirrors.tuna.tsinghua.edu.cn/git/AOSP/reviewhttps://android-review.googlesource.com/ /default revisionrefs/tags/android-12.0.0_r32remoteaospsync-j4 /superproject nameplatform/superproject remoteaosp revisionandroid-12.0.0_r32 /contactinfo bugurlgo/repo-bug /project pathbuild/make nameplatform/build groupspdk copyfile srccore/root.mk destMakefile /linkfile srcCleanSpec.mk destbuild/CleanSpec.mk /linkfile srcbuildspec.mk.default destbuild/buildspec.mk.default /linkfile srccore destbuild/core /linkfile srcenvsetup.sh destbuild/envsetup.sh /linkfile srctarget destbuild/target /linkfile srctools destbuild/tools //projectproject pathbuild/bazel nameplatform/build/bazel groupspdk linkfile srcbazel.WORKSPACE destWORKSPACE /linkfile srcbazel.sh desttools/bazel /linkfile srcbazel.BUILD destBUILD //projectproject pathbuild/blueprint nameplatform/build/blueprint groupspdk,tradefed /project pathbuild/pesto nameplatform/build/pesto groupspdk /project pathbuild/soong nameplatform/build/soong groupspdk,tradefed linkfile srcroot.bp destAndroid.bp /linkfile srcbootstrap.bash destbootstrap.bash //projectproject pathart nameplatform/art groupspdk /project pathbionic nameplatform/bionic groupspdk /project pathbootable/recovery nameplatform/bootable/recovery groupspdk /project pathbootable/libbootloader nameplatform/bootable/libbootloader groupsvts,pdk /project pathcompatibility/cdd nameplatform/compatibility/cdd groupspdk /project pathcts nameplatform/cts groupscts,pdk-cw-fs,pdk-fs /project pathdalvik nameplatform/dalvik groupspdk-cw-fs,pdk-fs /project pathdevelopers/build nameplatform/developers/build groupsdevelopers,pdk /省略一部分....repo-hooks in-projectplatform/tools/repohooks enabled-listpre-upload /
/manifest清单文件各元素解释 manifest 根标签 这个是配置的顶层元素即根标志 remote 标签 remote元素可以有多个用于存在多个git远程服务器的情况。 name 即表示每个git的远程服务器的名字(这个名字很关键如果多个remote属性的话default属性中需要指定default remote)。git pull、get fetch的时候会用到这个remote name。 fetch 所有git url真正路径的前缀所有git 的project name(就是后面的project标签的name元素)加上这个前缀就是git url的真正路径如果使用此remote的所有项目的前缀和manifest仓库前置一致的话可以使用…代替。 repo init -u https://github.com/remote-android/platform_manifests.git -b redroid-11.0.0 的manifest仓库前置https://github.com/remote-android/ review通过repo upload将评论上传到的 Gerrit 服务器的主机名。 该属性是可选的 如果未指定则repo upload将不起作用。 alias该属性可以省略当指定了该属性时可以覆盖name属性设置每个项目的.git/config中的远程名称。不同remote元素的alias属性可以相同比如不同remote元素的alias属性可以都是origin。 default标签元素 default元素只能有一个。设定所有project标签的默认属性值如果在project元素里没有指定一个属性则使用default元素的属性值。 remote 远程服务器的名字上面remote属性中提到过多个remote的时候需要指定default remote就是这里设置了revision 所有git的默认branch后面project没有特殊指出revision的话就用这个branchsync_j 在repo sync中默认并行的数目 superproject 标签是该清单文件中的一个元素用于定义一个超级项目也称为manifest项目。 超级项目是一个特殊的项目它通常用于组织多个子项目。在Android源代码管理中这些子项目可以是不同的软件组件、库、应用程序等。超级项目本身通常不包含实际的源代码它主要用于管理和同步这些子项目的代码。 default.xml 文件中的 superproject 标签主要包含以下信息 name 属性指定超级项目的名称。这个名称通常是一个唯一标识符用于区分不同的超级项目。path 属性指定超级项目的路径。这是超级项目在本地文件系统中的相对路径Repo将会在该路径下创建一个文件夹来管理超级项目。remote 属性指定与超级项目相关联的Git远程存储库的名称。这个远程存储库通常包含了清单文件的信息以及管理所有子项目的信息。revision 属性指定要使用的Git分支、标签或提交ID。这决定了超级项目所管理的子项目的版本。 project 标签 需要clone的单独git每一个代表了一个可以被clone到工作区的仓库定义了一个 Git 仓库项目的配置信息。 name git 的名称用于生成git url。URL格式是 r e m o t e f e t c h / {remote fetch}/ remotefetch/{project name}.git 其中的 fetch就是上面提到的remote中标签的fetch属性name 就是此处的name如果这个project有一个parent属性则该project最终的url会被这样拼凑 r e m o t e f e t c h / {remote_fetch}/ remotefetch/{project_parent}/${project_name}.gitpath 指定仓库在本地文件系统中的路径。clone到本地的git的工作目录如果没有配置的话使用name属性值相对于repo的根目录而言的相对路径remote 指定该仓库使用的远程仓库的名称。定义remote name如果没有定义的话就用default中定义的remote namerevision 指定该仓库使用的分支、标签或提交。指定需要获取的git提交点可以定义成固定的branch或者是明确的commit 哈希值groups 指定该仓库所属的分组用于组织仓库。列出project所属的组以空格或者逗号分隔多个组名。所有的project都自动属于all组。每一个project自动属于name:‘name’ 和path:path’组。例如它自动属于default, name:monkeys, and path:barrel-of组。如果一个project属于notdefault组则repo sync时不会下载 copyfile 标签 project元素的子元素每个元素描述了一对 src-dest 文件对。同步时(即执行repo sync命令时)src文件会被拷贝到dest。通常会被用于 README 或 Makefile 或其他构建脚本。 dest是相对于当前目录(执行repo init和repo sync命令的目录)的路径src是相对于project标签的path属性值的相对路径 linkfile标签 与copyfile类似只不过不是拷贝而是进行一个符号链接。 include 标签 通过name属性可以引入另外一个manifest文件(路径相对与当前的manifest.xml 的路径),name另一个需要导入的manifest文件名字 可以在当前的路径下添加一个another_manifest.xml这样可以在另一个xml中添加或删除project remove-project 标签 从内部的manifest表中删除指定的project。用于从清单文件中移除一个项目。这可以用于停止同步某个项目的代码。 annotation标签 提供对 元素的注释用于描述仓库的用途或其他信息。 repo-hooks 标签 用于定义 Repo 在执行特定操作时应该触发的钩子hooks脚本。Repo 钩子是一种机制允许你在特定的 Git 操作发生时自动执行一些自定义的脚本或命令。 in-project指定钩子脚本的相对路径这是相对于当前 Repo 的路径。这个属性通常用于为特定 Repo 设置钩子脚本而不是全局设置。enabled-list一个用逗号分隔的钩子名称列表指定哪些钩子应该在当前 Repo 上启用。这允许你选择性地启用或禁用 Repo 钩子。
搭建repo服务
简而言之 部署通用的工具仓库git-repo.git。 部署自己的清单仓库manifests.git。 编写清单文件manifests.xml 批量创建工程子仓库和上传源代码。