2021-10-11

repo:从零开始搭建repo环境

概要

  1. 简单来说,repo是git仓库的管理工具,它能更方便的管理由若干个git仓库组成的项目。
  2. 它是python脚本,平常我们操作的repo命令只是一个入口,其实它还有一个git仓库,是一系列python脚本的集合
  3. repo通过清单文件(.xml)来管理。清单文件里记录了所有的git仓库信息。也可以当作是项目的快照,根据某一个清单文件,就能将整个项目里的所有git仓库都还原到生成清单文件时的状态。所有的清单需要一个git仓库管理

一、准备工作

1、repo的源码:不仅仅是repo命令那一个脚本,而是repo的源码库,源码库中也会有repo命令。提供一下,仅供参考

ps:其实我也是从清华大学里下载下来的,然后建一个自己的repo源码库。谷歌的就不放了,很难下的下来

2、清单库:自己建一个叫manifest名字的git库,用来存放清单文件就可以。注意,必须至少有一个清单文件,这样才能根据清单文件拉代码,之后也才能生成新的清单文件。提供一下,仅供参考

ps:其实就是xml文件,掌握基本语法之后根据自己的项目写一个就可以了

二、搭建

1、repo源码库:一个git仓库。将之前准备好的repo源码建成一个git库,注意以下几点就可以了

  • repo默认是找stable分支,所以最简单的就是建一个stable分支,将准备好的repo源码提交到stable分支上。当然也可以提交到任意分支上,然后每次初始化时都用 –repo-branch 指定,或者改一下repo命令,让它默认找某个分支
  • 确定初始化使用的分支之后,针对该分支最新的提交,新建一个tag并提交到远端仓库。因为repo会根据分支的commit查找tag
  • 该tag必须使用gpg加密(怎么生成秘钥自行百度),因为找到tag之后repo会用gpg解密。公钥写在repo命令中。所以,没错,需要改repo脚本,将公钥写进去,这个后面再说

2、manifest库:一个git仓库。里面有写好的xml文件

<?xml version="1.0" encoding="UTF-8"?>                                          
<manifest>
    <remote fetch="ssh://git@github.com/newbie-plan" name="origin"/>

    <project name="vmix.git" path="vmixlocal" remote="origin" revision="main" up
    <project name="amix.git" path="amixlocal" remote="origin" revision="main" up
</manifest>
  • remote标签里的fetch,如果不带ssh://前缀,那就会默认添加manifest的url
<remote fetch="git@github.com:newbie-plan" name="origin"/>
实际上
fetch = git@github.com:newbie-plan/manifest.git/git@github.com:newbie-plan

<remote fetch="/" name="origin"/>
实际上
fetch = git@github.com:newbie-plan/manifest.git

<remote fetch="../" name="origin"/>
实际上
fetch = git@github.com:newbie-plan/
  • project标签中的name是git仓库url减去fetch剩余的部分。所以实际上我是要拉这个仓库的代码
ssh://git@github.com/newbie-plan/vmix.git

3、往repo脚本中添加gpg公钥

  • 添加公钥的地方

2021-10-11

  • repo脚本原本就有一个公钥,跟在后面添加自己的就可以了
  • Repo Maintainer repo@android.kernel.org 是秘钥id。就是生成gpg秘钥时输入的名字
  • BEGIN - END中间的就是公钥,导出后完整拷贝过来就可以了
  • 所以这个repo脚本文件就和repo源码库对应了,因为repo源码库中的tag是gpg私钥加密的,只有这个repo文件中有gpg公钥可以解密。所以可以替换repo源码库中的repo脚本文件

4、举个栗子

  • 我的repo库:git@github.com:newbie-plan/git-repo.git
  • 我的manifest库:git@github.com:newbie-plan/manifest.git,里面有一个default.xml
  • 所以在本地初始化repo命令是
repo init --repo-url=git@github.com:newbie-plan/git-repo.git -u git@github.com:newbie-plan/manifest.git -m default.xml

三、可能遇到的错误

  • python版本不对
      我下载的repo源码可能比较新,要求是python3.5以上,其实必须要3.6以上,因为有用到python3.6新增的语法 f-Strings

  • git版本不对

2021-10-11

    如上图可以看到,脚本执行了git ls-remote命令,带着三个选项。但是我的git ls-remote
  根本就没有–symref选项,所以遇到这个问题,升级git版本。或者跟我一样,改repo源码,去
  掉或换掉–symref选项

四、最后

  • 基本上我就是这样在debian8.9上搭建出来的,可能环境不一样,遇到的问题不一样,这个只能到时候根据报错来解决了
  • 全当记录一下,万一后面真需要呢
上一篇:Spark SQL:基于Spark的结构化数据操作的API


下一篇:Java线程的各种状态及其转换