搭建Repo服务器
1 安装repo
参考:清华大学开源软件镜像站:Git Repo 镜像使用帮助


2 创建manifest仓库
2.1 创建仓库
git init --bare manifest.git

2.2 创建default.xml文件
default.xml文件内容:
<?xml version="1.0" encoding="UTF-8" ?>
<manifest><remotename="origin"fetch="ssh://linux@192.168.1.53:/tmp/codes"/><defaultremote="origin"revision="master"sync-j="4"/><project path="module1" name="module1.git"/><project path="module2" name="module2.git"/>
</manifest>

提交并推送default.xml文件:

3 创建工程仓库
在文件中有两个示例仓库module1.git和module2.git,需要创建:
git init --bare module1.git
git init --bare module2.git

3.1 空仓库提交一次(可忽略)


4 Repo使用
4.1 repo初始化
repo init -u ssh://linux@192.168.1.53:/tmp/codes/manifest.git

4.2 同步代码到本地
repo sync

4.3 推送代码到服务器
注意:此时说的是推送代码到服务器,修改代码及提交代码还是使用git工具(git add/commit)。
repo提供了upload命令可以提交代码,但是不是将代码直接提交到git仓,而是提交到Gerrit评审工具,且需要在xml文件中配置,本文没有配置xml,也没有搭建Gerrit评审工具服务,那么就无法使用repo upload命令上传代码,直接使用会报找不到review路径:

但是可以使用repo forall命令:
repo forall -pv -c "git push origin master"
repo forall命令将‘-c’后边的指令在每一个git仓下去执行一次,可以达到将代码直接推送到服务器的目的。
5 搭建本地repo源码服务器
在repo初始化时,需要联网下载依赖脚本,4.1节使用的是清华大学开源镜像export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
地址,本节介绍本地搭建repo源码服务器。
4.1节初始化后,就已经下载了repo源码,其路径是.repo/repo。
5.1 创建git-repo仓库
git init --bare git-repo.git

5.2 添加仓库地址
进入repo源码目录,添加git-repo仓库地址
git remote add local_vm ssh://linux@192.168.1.53:/tmp/codes/git-repo.git

5.3 推送代码到git-repo仓库

注意:必须上传stable分支


5.4 使用本地repo源码服务器初始化repo
5.4.1 方法1:使用‘–repo-url=’选选项
repo init -u ssh://linux@192.168.1.53:/tmp/codes/manifest.git --repo-url=ssh://linux@192.168.1.53:/tmp/codes/git-repo.git

5.4.2 方法2:使用’REPO_URL’环境变量
export REPO_URL='ssh://linux@192.168.1.53:/tmp/codes/git-repo.git'
repo init -u ssh://linux@192.168.1.53:/tmp/codes/manifest.git

6 Repo使用扩展:forall
本章主要介绍repo forall命令,方便操作git仓库。
6.1 查看remote
repo forall -pv -c 'git remote -v'

6.2 添加备份remote
repo同步后只有一个仓库连接,当需要添加多个路径时,可以单个仓库单独添加,也可以使用forall命令批量添加:
repo forall -pv -c 'git remote add baiducloud ubuntu@106.12.156.236:/codes/git/$REPO_PROJECT'
说明:REPO_PROJECT是repo的环境变量,代表当前仓库名。
可以将以上命令用alias命令虫命名:
alias repo_remote_add="echo repo forall -pv -c \'git remote add baiducloud ubuntu@106.12.156.236:/codes/git/'$'REPO_PROJECT\' | bash"

添加成功后就可以使用repo forall -pv -c "git push baiducloud master"命令推送代码了。
附录(扩展)
仓库关联多个远程仓库
参考:Git仓关联多个远程仓路径.md
本地台式机指令:
EBX_COM_GIT_ROOT_URL='ssh://wanghb@192.168.10.120:29418/codes/git/'
BAIDU_CLOUT_GIT_ROOT_URL='ssh://ubuntu@192.168.0.110:/codes/git/'alias repo_remote_show="echo repo forall -pv -c \'git remote -v\' | bash"
alias repo_remote_push_master_to_origin="echo repo forall -pv -c \'git push origin master:master\' | bash"alias repo_remote_add_origin_ebx_showcmd="echo repo forall -pv -c \'git remote set-url origin --push --add $EBX_COM_GIT_ROOT_URL'$'REPO_PROJECT\'"
alias repo_remote_add_origin_baidu_showcmd="echo repo forall -pv -c \'git remote set-url origin --push --add $BAIDU_CLOUT_GIT_ROOT_URL'$'REPO_PROJECT\'"
alias repo_remote_add_origin_ebx="echo repo forall -pv -c \'git remote set-url origin --push --add $EBX_COM_GIT_ROOT_URL'$'REPO_PROJECT\' | bash"
alias repo_remote_add_origin_baidu="echo repo forall -pv -c \'git remote set-url origin --push --add $BAIDU_CLOUT_GIT_ROOT_URL'$'REPO_PROJECT\' | bash"
仓库备份或迁移
将一个仓库克隆,并将完整仓库(分支和标签)推送到另一个服务器
git clone remote_url --mirror
git push new --mirror
多仓库处理脚本:
#!/bin/bashWORKROOT_PATH=${PWD}GIT_REMOTE_URL_HEAD="http://192.168.10.120/r/codes/git/"
GIT_REMOTE_NEW_URL_HEAD="git@192.168.57.140:git/"
RESP_LIST=" bindemoDocumentsgnc_api_liblibmodbus"for sub_repo in $RESP_LIST
doremote_url="$GIT_REMOTE_URL_HEAD$sub_repo.git"remote_new_url="$GIT_REMOTE_NEW_URL_HEAD$sub_repo.git"echo " sub_repo:$sub_repo"echo " remote_url:$remote_url"echo "remote_new_url:$remote_new_url"cd $WORKROOT_PATH# clonegit clone $remote_url --mirror || { echo "[line:$LINENO] failed"; exit $LINENO; }cd $sub_repo.git &> /dev/null || { echo "[line:$LINENO] failed"; exit $LINENO; }# 设置远端路径git remote add new $remote_new_url || { echo "[line:$LINENO] failed"; exit $LINENO; }# 推送代码git push new --mirror || { echo "[line:$LINENO] failed"; exit $LINENO; }# 完成echo "push $sub_repo finished "echo "-----------------------------------------------------"echo ""
done相关文章:
搭建Repo服务器
1 安装repo 参考:清华大学开源软件镜像站:Git Repo 镜像使用帮助 2 创建manifest仓库 2.1 创建仓库 git init --bare manifest.git2.2 创建default.xml文件 default.xml文件内容: <?xml version"1.0" encoding"UTF-8" ?…...
安卓:MMKV——键值存储库
目录 一、MMKV介绍 1.特点和优势: 2.使用指南: 3.依赖包: 二、MMKV的常用方法 1、初始化和获取实例: 2、存储数据: 3、读取数据 4、删除数据 5、其他操作: 三、MMKV的使用例子 MainActivityÿ…...
使用Python将图像转换为PDF:一次性解决您的批量转换需求
导语: 在数字化时代,我们经常需要处理大量的图像文件。将这些图像转换为PDF格式可以方便地存档、分享和打印。本文将介绍如何使用Python编程语言将图像批量转换为PDF,并提供了一个简单易用的图形界面来跟踪转换进度。 准备工作 在开始之前…...
Vue——webpack
webpack 一、Install1.全局安装2.局部安装 二、总结1.打包2.定义脚本3.配置文件定义(webpack.config.js)4.项目重新加载依赖5.webpack打包Css6.style-loader 一、Install 1.全局安装 npm install webpack webpack-cli -g2.局部安装 以项目为单位,一个项…...
springboot房地产管理java购房租房二手房j客户sp源代码mysql
本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 springboot房地产管理 系统1权限:管理员 …...
Gartner 发布影响数据科学和机器学习未来方向重要趋势
出品 | CSDN 云计算 供稿 | Gartner Gartner今日发布了影响数据科学与机器学习(DSML)未来方向的重要趋势。随着DSML行业的快速发展和演变,数据对于人工智能(AI)开发与运用的重要性日益提高,尤其是投资重点…...
72. 编辑距离
题目介绍 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符删除一个字符替换一个字符 示例 1: 输入:word1 "horse", word2 &q…...
Android12.0 原生系统SystemUI下拉状态栏和通知栏视图之锁屏通知布局
1.前言 在12.0的系统rom定制化开发中,对于系统原生systemui的锁屏界面的功能也是非常重要的,所以在锁屏页面布局中,也是有通知栏布局的,所以接下来对于息屏亮屏 通知栏布局的相关流程分析,看下亮屏后锁屏页面做了哪些功能 2.原生系统SystemUI下拉状态栏和通知栏视图之锁…...
周末在家值班,解决几个月前遗忘的Bug
问题: 周末被迫在家值班,无聊之际打开尘封已久的Bug清单,发现有Bug拖了几个月还没解决… 场景是这样子的,有个功能是拿Redis缓存热点数据进行展示,暂且称它为功能A,有个另外的功能B,它会去更新缓…...
Shell编程基础(十五)文本三剑客(sed)
文本三剑客(sed) 使用场景基本语法实例命令列表 使用场景 sed提供了一种面交互的方式修改文件内容。 它是一行一行处理,可以通过正则匹配要修改的部分 基本语法 基本语法 sed [-opt] command files(多个文件 空格隔开) sed 使用正则 sed -…...
5,二叉树【p6-p7】
二叉树 5.1二叉树5.1.1例1:用递归和非递归两种方式实现二叉树的先序、中序、后序遍历5.1.1.1递归序的先序、中序、后序遍历先序遍历:中序遍历:后序遍历: 5.1.1.2非递归序的先序、中序、后序遍历先序遍历:中序遍历&…...
【Spring】如果你需要使用重试机制,请使用Spring官方的Spring Retry
文章目录 前言Spring Retry的基本使用第一步,引入Spring Retry的jar包第二步,构建一个RetryTemplate类第三步,使用RETRY_TEMPLATE注意事项 拓展方法降级操作重试策略:时间策略重试策略:指定异常策略 前言 Spring Retr…...
pagehelper 优化自定义分页和排序位置
pagehelper开源地址 https://github.com/pagehelper/Mybatis-PageHelper 1.手写Count查询优化 源码分页count时首先是判断是否存在手写的 {业务查询id}_COUNT 的查询count统计 private Long count(Executor executor, MappedStatement ms, Object parameter,RowBounds rowBound…...
Linux下查询文件夹中文件数量的方法
一、前言 在Linux系统中,我们经常需要查询文件夹中包含多少文件。本文将介绍三种在Linux中查询文件夹中文件数量的方法,帮助你轻松获取所需信息。 二、方法 1、使用ls命令和wc命令 使用ls命令的-l选项和管道操作符|结合wc命令来统计文件数量…...
PS透明屏,在科技展示中,有哪些优点展示?
PS透明屏是一种新型的显示技术,它将传统的显示屏幕与透明材料相结合,使得屏幕能够同时显示图像和透过屏幕看到背后的物体。 这种技术在商业展示、广告宣传、产品展示等领域有着广泛的应用前景。 PS透明屏的工作原理是利用透明材料的特性,通…...
Hbase-面试题
1. Hbase-region切分 自动切分,默认情况下 2.0版本,第一次region的数据达到256M,会进行切分,以后就是每达到10G切分一次,切分完成后,会进行负载均衡,均衡到其他regionserver预分区自定义rowke…...
图的宽度优先深度优先遍历
图常见的遍历方式有两种,一种是宽度优先遍历,一种是深度优先遍历。 宽度优先遍历 宽度优先遍历和之前介绍的二叉树的层级遍历类似,主要也是利用Queue来完成层级的遍历,除此之外,因为图中很可能有环,所以还…...
redis Set类型命令
Redis中的Set是一种无序、不重复的集合数据结构,它提供了一系列的操作命令用于对Set进行添加、删除和查找等操作。以下是Redis中Set类型常见的一些命令: SADD key member [member …]:将一个或多个成员添加到指定的集合中。 示例:…...
Netty框架自带类DefaultEventExecutorGroup的作用,用来做业务的并发
一、DefaultEventExecutorGroup的用途 DefaultEventExecutorGroup 是 Netty 框架中的一个类,用于管理和调度事件处理器(EventExecutor)的组。在 Netty 中,事件处理是通过多线程来完成的,EventExecutor 是处理事件的基…...
TCP的四次挥手与TCP状态转换
文章目录 四次挥手场景步骤TCP状态转换 四次挥手场景 TCP客户端与服务器断开连接的时候,在程序中使用close()函数,会使用TCP协议四次挥手。 客户端和服务端都可以主动发起。 因TCP连接时候是双向的,所以断开的时候也是双向的。 步骤 三次…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...
前端开发者常用网站
Can I use网站:一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use:Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站:MDN JavaScript权威网站:JavaScript | MDN...
AWS vs 阿里云:功能、服务与性能对比指南
在云计算领域,Amazon Web Services (AWS) 和阿里云 (Alibaba Cloud) 是全球领先的提供商,各自在功能范围、服务生态系统、性能表现和适用场景上具有独特优势。基于提供的引用[1]-[5],我将从功能、服务和性能三个方面进行结构化对比分析&#…...
android 之 KeyguardService
一、功能定位与核心作用 KeyguardService 是 Android 锁屏功能的核心服务,负责管理设备锁屏界面(如密码、图案、指纹等验证流程),并协调系统安全策略与用户交互。主要职责包括: 锁屏状态管理 控制锁屏界面的显示/隐藏…...
