搭建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连接时候是双向的,所以断开的时候也是双向的。 步骤 三次…...
Frida-server魔改实战:Android native层反调试对抗七步法
1. 这不是“绕过检测”,而是让frida-server从“被识别对象”变成“系统一部分”在安卓逆向和安全测试一线干了十多年,我见过太多人把Frida检测对抗理解成一场猫鼠游戏:App加个检测逻辑,测试方就写个绕过脚本;检测逻辑升…...
Android Method Tracing深度解析:Unity性能瓶颈跨层归因实战
1. 为什么Method Tracing不是“点一下就出报告”的银弹,而是Android性能诊断的听诊器在Unity项目上线前的最后两周,我接手了一个卡顿严重的AR应用——启动后3秒内帧率从60掉到22,用户滑动模型时UI直接冻结。团队里有人立刻打开Profiler&#…...
STM32 USB开发避坑指南:手把手教你读懂并配置端点描述符(附完整代码)
STM32 USB开发避坑指南:手把手教你读懂并配置端点描述符(附完整代码) 在嵌入式开发领域,USB通信一直是让工程师又爱又恨的技术。爱它的通用性和高速传输能力,恨它那晦涩难懂的协议栈和层出不穷的配置问题。特别是当项目…...
告别操作割裂感:保存你的专属Blender配置文件(含Unity键位预设)
告别操作割裂感:保存你的专属Blender配置文件(含Unity键位预设) 在三维创作流程中,Blender与Unity的组合堪称黄金搭档。但当你在两个软件间频繁切换时,截然不同的操作方式就像开车时突然换挡——明明想左转却按了雨刷器…...
超越UNO:手把手教你为ESP8266和AVR单片机配置任意GPIO中断(附端口变化中断PCINT实战)
突破硬件限制:ESP8266与AVR单片机全引脚中断配置实战指南 在嵌入式开发中,中断处理是提升系统响应效率的核心技术。传统Arduino UNO仅提供2个专用外部中断引脚(D2和D3),当项目需要同时监控多个传感器或按钮时ÿ…...
别再纠结Unity和Godot了!用Python写游戏,从零开始30分钟搞定你的第一个Ren`Py视觉小说
用Python写游戏:30分钟打造你的第一款RenPy视觉小说 当Python开发者想要涉足游戏创作时,往往会面临一个尴尬的选择:要么学习C#配合Unity,要么用GDScript适应Godot,这些额外的语言学习曲线常常让人望而却步。但鲜为人知…...
从弹簧小车到悬臂梁:用Python和SymPy手把手推导变分法与欧拉方程
从弹簧小车到悬臂梁:用Python和SymPy手把手推导变分法与欧拉方程 在工程力学和数学物理方程的学习中,变分法是一个既令人着迷又让人望而生畏的领域。它像一座桥梁,连接着抽象的数学原理和具体的物理现象。传统教学中,变分法往往以…...
如何在Linux系统上安装Realtek RTL8125 2.5GbE网卡驱动:完整配置指南
如何在Linux系统上安装Realtek RTL8125 2.5GbE网卡驱动:完整配置指南 【免费下载链接】realtek-r8125-dkms A DKMS package for easy use of Realtek r8125 driver, which supports 2.5 GbE. 项目地址: https://gitcode.com/gh_mirrors/re/realtek-r8125-dkms …...
从用户一句话到任务完成:Hermes Agent 一次请求完整链路详解
一、先说结论:Hermes 不是“问一句答一句”的普通聊天框很多人理解 AI 应用时,会把它想成一个 Chatbot:用户发一句话,模型回一句话。但 Hermes Agent 的请求链路更像一个“任务操作系统”。用户的一句话进入系统后,Her…...
Unity TMP InputField光标稳定方案:字体、渲染与输入法深度适配
1. 为什么InputField光标会“消失”、错位、卡死——不是Bug,是渲染管线的底层博弈 你有没有在Unity项目里遇到过这样的场景:UI界面一切正常,唯独InputField的光标不显示;或者光标明明在文字末尾,点击却跳到中间&#…...
