搭建repo服务器管理多个git工程

news2025/2/22 12:19:20

参考自:搭建repo服务器管理多个git工程
    repo系列讲解 —— Android系统源码(AOSP)下载

1、repo介绍

Android使用git作为代码管理工具,开发了gerrit进行代码审核,以便更好的对代码进行集中式管理。还开发了repo命令行工具,对git部分命令进行封装,将百多个git库有效的组织。

鉴于repo能够管理多个git库,针对一个项目需要多个git库分开管理,使用repo就非常方便。如嵌入式项目一般由uboot、kernel、文件系统rootfs、用户程序等组成。这里就以这样的项目组织来搭建repo服务器。

├── kernel
│   └── linux-3.5.y
├── rootfs
│   └── rootfs
├── uboot
│   └── uboot-2018.11
└── userdata
    └── UartTest

服务器:https://git.haier.net
账户:ihaier工号和门户密码

2、下载并配置repo工具

2.1 下载repo

git-repo下载可在服务器端通过以下任一方式下载。

git clone https://gerrit.googlesource.com/git-repo		(谷歌官方源)
git clone https://mirrors.tuna.tsinghua.edu.cn/git/git-repo	(国内清华源)
git clone https://gerrit-googlesource.lug.ustc.edu.cn/git-repo	(国内中科大源)

将下载的git-repo切换到master分支,然后进行下面的修改。

在这里插入图片描述
此处修改的目的:在客户端上通过repo拉取服务器端代码时,避免 repo 从git-repo源码中拷贝过来,而是让其从我们的服务器上拷贝过来,这样既省时又稳定。

注意:也可在客户端下载repo,进行相应修改后上传服务器端。

在这里插入图片描述

2.2 安装repo

将下载的 repo安装到您linux账号的环境变量的路径下,推荐安装到/usr/bin/目录,由于写入/usr/bin/目录需要管理员权限,这需要您的linux账号拥有管理员权限。

sudo cp git-repo-haier/repo /usr/bin/repo   #此处需确保repo有执行权限

3、初始化工程和mainifest git仓库

3.1 初始化项目代码仓库(git server端)

在这里插入图片描述

3.2 初始化manifest仓库(git server端)

3.2.1 初始化 manifest (git server端)

在这里插入图片描述

3.2.2 mainfest 提交default.xml

在这里插入图片描述
x30-default.xml

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

  <remote  name="origin"
           fetch="../../.."
           review="https://git.haier.net:18022/zhjdn_ai/aiot_terminal" />

  <default revision="master"
           remote="origin"
           sync-j="4" />

  <project path="Haier-x30-tina/tina3.5/build" name="os/tina3.5/build" groups="tina3.5" >
	  <copyfile src="top_main.mk" dest="Haier-x30-tina/tina3.5/Makefile" />
	  <copyfile src="rules.mk" dest="Haier-x30-tina/tina3.5/rules.mk" />
  </project>
  <project path="Haier-x30-tina/tina3.5/config" name="os/tina3.5/config" groups="tina3.5" >
	  <copyfile src="top_config.in" dest="Haier-x30-tina/tina3.5/Config.in" />
  </project>
  <project path="Haier-x30-tina/tina3.5/dl" name="os/tina3.5/dl" groups="tina3.5" />
  <project path="Haier-x30-tina/tina3.5/docs" name="os/tina3.5/docs" groups="tina3.5" />
  <project path="Haier-x30-tina/tina3.5/lichee/brandy-2.0/tools" name="os/tina3.5/lichee/brandy-2.0/tools" groups="tina3.5" >
	  <copyfile src="build.sh" dest="Haier-x30-tina/tina3.5/lichee/brandy-2.0/build.sh" />
  </project>
  <project path="Haier-x30-tina/tina3.5/lichee/brandy-2.0/u-boot-2018" name="os/tina3.5/lichee/brandy-2.0/u-boot-2018" groups="tina3.5" />
  <project path="Haier-x30-tina/tina3.5/lichee/linux-4.9" name="os/tina3.5/lichee/linux-4.9" groups="tina3.5" />
  <project path="Haier-x30-tina/tina3.5/package" name="os/tina3.5/package" groups="tina3.5" />
  <project path="Haier-x30-tina/tina3.5/prebuilt" name="os/tina3.5/prebuilt" groups="tina3.5" />
  <project path="Haier-x30-tina/tina3.5/scripts" name="os/tina3.5/scripts" groups="tina3.5" >
	  <copyfile src="clean_kernel.sh" dest="Haier-x30-tina/tina3.5/clean_kernel.sh" />
	  <copyfile src="rebuild.sh" dest="Haier-x30-tina/tina3.5/rebuild.sh" />
  </project>
  <project path="Haier-x30-tina/tina3.5/target" name="os/tina3.5/target" groups="tina3.5" />
  <project path="Haier-x30-tina/tina3.5/toolchain" name="os/tina3.5/toolchain" groups="tina3.5" />
  <project path="Haier-x30-tina/tina3.5/tools" name="os/tina3.5/tools" groups="tina3.5" />

  <project path="x30_uaibot_app/aibot-x30" name="app/x30/aibot-x30" groups="x30" />

  <project path="ota_pack_tool" name="tools/ota_pack_tool" groups="tools" />
</manifest>

● remote标签: 包含一些远程仓库的一些信息
(1) name:远程仓库在本地的别名,可以理解为讲解git仓库时提到的origin
(2) fetch:项目名称的前缘,在构造项目仓库远程地址时使用到
(3) review:code review的服务器地址

● default标签: 默认标签,下面的<project>标签会默认包含这个标签的属性,当然也可以在<project>里重新更改这几个属性
(1) revision:repo init -b的时候指定的分支或tag,默认是master分支。当然如果直接在manifests里切换分支并git pull,这里也会相应改变。
(2) remote:对应上面的<remote>标签的名字
(3) sync-j:指定同步工作的并行数量,个人理解最大数不宜超过cpu的线程数
(4) sync-c:【sync-c=“true”】代表repo sync的时候只同步revision指定的分支或tag

● project标签: 每个<project>标签指定的都是一个git管理的源码库
(1) path:源码库下载后存放的本地路径
(2) name:远程仓库的名称

3.3 客户端git提交初始代码

以3.1图中tina3.5目录下build仓库为例,其他仓库同理。

cd tina3.5/build
git init
git add . -A
git commit -s -m "add initial code"
git remote add origin https://git.haier.net/zhjdn_ai/aiot_terminal/os/tina3.5/build.git
git branch -M master #此步可有可无,作用是将当前分支重命名为master
git push -uf origin master

4、repo拉取工程代码

在客户端上repo拉取服务器端代码

mkdir Haier-X30-Project
cd Haier-X30-Project
repo init -u ssh://git@git.haier.net:18022/zhjdn_ai/aiot_terminal/tools/git_repo/r328_tina/manifest.git -b master -m x30-default.xml
repo sync
repo start master --all # 全部下载完成之后,创建分支

repo init 参数
-u: 指定项目清单库的url地址
-m: 指定使用哪个项目清单文件
-b: 指定具体的分支,默认情况下指定master分支
--repo-url: 指定repo库的url地址
--config-name: 指定访问服务器的用户名和邮箱。这个选项后面不接内容,运行的时候会提示你输入用户名和邮箱
.
repo init主要有两部分工作:下载两个git管理的仓库(repo库和manifest库)。
repo库: 主要存放一些python脚本,配合之前说的repo脚本来共同管理众多源码仓库;
manifest库: 项目清单库,用来管理各个版本的清单文件。

在这里插入图片描述

5、repo常用指令

5.1 对每个git仓库执行相同的shell命令

用法:

repo forall -c "命令"         #不限于repo或者git的命令,其他shell命令也可以,例如ls,pwd等。

举例: 恢复用repo管理的系统源码

repo forall -c "git clean -df" && repo forall -c "git checkout ."

5.2 给整个工程打tag标签

git打tag命令:

git tag -a TAG_NAME -m "add tag TAG_NAME"

我们在此版本上打上标签为TINY4412_V1.0.0,命令如下

repo sync
repo forall -pv -c "git tag -a TINY4412_V1.0.0 -m "add tag TINY4412_V1.0.0""
repo forall -pv -c "git push origin TINY4412_V1.0.0"

5.3 帮助命令

用法:

repo help 命令选项

举例: 查看repo forall的使用帮助

repo help forall


Options:
  -h, --help            show this help message and exit
  -r, --regex           Execute the command only on projects matching regex or
                        wildcard expression
  -i, --inverse-regex   Execute the command only on projects not matching
                        regex or wildcard expression
  -g GROUPS, --groups=GROUPS
                        Execute the command only on projects matching the
                        specified groups
  -c, --command         Command (and arguments) to execute
  -e, --abort-on-errors
                        Abort if a command exits unsuccessfully
  --ignore-missing      Silently skip & do not exit non-zero due missing
                        checkouts

  Output:
    -p                  Show project headers before output
    -v, --verbose       Show command error messages
    -j JOBS, --jobs=JOBS
                        number of commands to execute simultaneously

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28921.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL8.0 binlog进阶

MySQL8.0经过这几年的操揉磨治&#xff0c;已经上升到海平面了。其中binlog也悄然无声带来了不一样的变化。高可用核心复制基础binlog变化更应该进一步了解。从参数入手&#xff0c;了解带来的变化。 slave回放算法 slave_rows_search_algorithms 当使用基于 row-based复制格…

牛客网语法篇练习循环控制(二)

1.今天牛牛学到了回文串&#xff0c;他想在数字里面找回文&#xff0c;即回文数&#xff0c;回文数是正着读与倒着读都一样的数&#xff0c;比如1221&#xff0c;343是回文数&#xff0c;433不是回文数。请输出不超过n的回文数。 a int(input()) for i in range(1,a1):n str…

CSS-counter 计数器详细教程+使用场景示例

counter一. counter计数器二. 属性和方法1. 计数器命名/重置2. 计数器-值递增规则3. 计数器显示 counter() / counters() 函数三 代码示例1. 重新开始计数2. counters嵌套使用3. 借助CSS计数器呈现CSS var变量值一. counter计数器 计数器是一种特殊的数字跟踪器&#xff0c;通常…

systemd的unit配置文件详解

Systemd 是 Linux 的系统和服务的管理器&#xff0c;兼容 SysV 和 LSB初始化脚本&#xff0c;Systemd有以下特性&#xff1a; 积极的并行化能力使用套接字和 D-Bus 激活来启动服务提供按需启动守护进程&#xff0c;使用 Linux cgroups 跟踪进程支持系统状态的快照和恢复维护挂…

艾美捷Cas9核酸酶应用说明及实例展示

Product Description:Recombinant Streptococcus pyogenes Cas9 (wt) protein expressed in an E. coli . Form:Liquid Preparation Method:E. coli expression system Purity:≥ 95% by SDS-PAGE Activity:20 nM CRISPR/Cas9-C-NLS nuclease incubated for 1 hour at 37℃…

【新知实验室 TRTCIM】实时互动课堂最佳实践

【新知实验室 TRTC&IM】实时互动课堂最佳实践一、新知实验室-TRTC腾讯云音视频产品体验官计划活动简介二、产品简介TRTCIM三、最佳实践3.1 官方快速上手TRTC(快速跑通)3.1.1 注册腾讯云账号3.1.2 使用实时音视频(需先开通)3.1.3 创建应用3.1.4 查看项目(查看密钥和快速上手…

java基础—String

我们都知道 创建一个字符串最简单的方式是 String meaasge "java资讯";当然还可以用构造来创建 &#xff08;不推荐&#xff0c;开发中不要用&#xff09; String str2new String("java资讯");这两种创建最主要的区别在于&#xff0c;一个在公共池中&…

gitlab CI/CD 自动化部署vue项目到阿里云服务器步骤

目录1&#xff0c;gitlab托管vue项目2&#xff0c;本地项目连接到远程仓库3&#xff0c;设置gitlab-runner4&#xff0c;编写yml文件5&#xff0c;部署到阿里云服务器&#xff08;本地设置&#xff09;5.1 安装相关依赖5.2 vue项目中添加deploy.js文件5.3 注册deploy命令5.4 验…

文本生成图像工作简述2--常用数据集分析与汇总

文本到图像的 AI 模型仅根据简单的文字输入就可以生成图像。用户可以输入他们喜欢的任何文字提示——比如&#xff0c;“一只可爱的柯基犬住在一个用寿司做的房子里”——然后&#xff0c;人工智能就像施了魔法一样&#xff0c;会产生相应的图像。 文本生成图像&#xff08;te…

实验2:Arduino的nRF24L01双向收发实验

实验结果: 00节点向01发送:00ReqMesFor01 01节点向00发送:CodeNewNiceBoy 并且在串口打印出相应信息 硬件电路: 01 软件 00节点代码: /*00 */#include <SPI.h> #include <nRF24L01.h> #include <RF24.h> RF24 radio(9, 10);// CE, CSNconst char te…

dolphinscheduler 2.0.5 性能手动测试

目录&#x1f42c;官方配置文件说明&#x1f42c;测试并发量&#x1f420;线程数量设置100&#x1f420;线程数量设置200&#x1f420;线程数量设置500&#x1f42c;测试结论&#x1f42c;官方配置文件说明 官方说明 master.exec.threads&#xff1a; master工作线程数量,用于…

智能晾衣架(二)--功能实现

本文素材来源于红河学院 工学院 作者&#xff1a;赵德森 张艺锦 潘志慧 曹紫康 指导老师&#xff1a;江洁 张龙超 1. 自动升降功能 我们设计时采用了热释电传感器&#xff08;人体红外传感器&#xff09;&#xff0c;在热释电传感器感应到有人靠近时&#xff0c;晾衣架通…

C++:内存管理:C++内存管理详解(二):带你攻破内存管理

前言&#xff1a; 任何程序运行起来都需要分配内存空间存放该进程的资源信息&#xff0c;C程序也不例外。C程序中的变量、常量、函数、代码等等信息所存放的区域都有所不同&#xff0c;不同的区域又有不同的特性。 欺骗C进程 每一个C语言的程序被执行起来的时候系统为了方便开…

字符串的简单介绍和字符串的大小比较

以前就写过一篇关于String的文章&#xff0c;今天再来写一篇&#xff0c;更加深入了解一下String类 &#x1f550;1.String类的定义 &#x1f551;2.String类的创建 &#x1f552;3.字符串的大小比较 1.之前在C语言中我们已经学到了字符类型&#xff0c;但是C语言没有Strin…

Oracle-Rman duplicate文件坏块问题处理ORA-19849 19612

前言: 最近&#xff0c;在使用rman duplicate进行备库环境搭建时&#xff0c;遇到了ORA-19849 19612坏块报错&#xff0c;最终分析是发现由于网络的配置导致。 问题: 在 ORACLE 12.2.0.1.180417 通过RMAN duplicate进行备库初始化&#xff0c;在复制文件的过程中&#xff0c;…

FTP服务器移植到Linux开发板

FTP服务器移植到Linux开发板 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录FTP服务器移植到Linux开发板前言一、vsftpd源码下载二、vsftpd移植及配置1.vsftpd移植2.vsftpd配置2.1 配置vsftpd.conf2.2 添加新用户2…

LVS+Keepalived群集

目录 一.keeepalived工具介绍 1.1 专为LVS和HA设计的一款健康检查工具 1.2 Keepalived实现原理剖析 1.3 VRRP工作过程 1.4 Keepalived&#xff0c;VRRP及其工作原理 1.5 Keepalived体系主要模块及其作用 二、LVSKeepalived 高可用群集的搭建步骤 1、配置负载调度器&…

项目管理(PMO的作用)

项目管理办公室 (PMO) 是对与项目相关的治理过程进行标准化&#xff0c;并促进资源、方法论、工具和技 术共享的一个组织结构。PMO 的职责范围可大可小&#xff0c;从提供项目管理支持服务&#xff0c;到直接管理一个 或多个项目。 PMO的三种类型&#xff1a; PMO的作用&#…

ppt背景图片怎么设置?6步教你快速搞定!

在制作 ppt的过程中&#xff0c;需要将一些内容进行设置&#xff0c;来保证整体美观&#xff0c;也就是将背景图片设置好。背景图片设置的好&#xff0c;可以很好地体现页面上的内容&#xff0c;提高页面上的内容展示效果。所以大家在制作 ppt时&#xff0c;需要将一些背景图片…

进程和线程详解

目录 前言&#xff1a; 操作系统定位 并发 并行 并发 进程 描述 PCB 管理 内存管理 进程间通信 线程 小结&#xff1a; 前言&#xff1a; 当一个程序运行起来时&#xff0c;操作系统要为之分配一些资源&#xff0c;这样的运行起来的程序称之为一个进程。为了有效解…