repo仓库转移到自己本地的git服务器
前提条件:搭建好gitolite
以转移正点原子rk3568_linux工程为例子,将其转移到自己的git服务器。
获取完整repo仓库
将正点原子epo
仓库sync
出来
evan@evan-X99:~/SRC/atk$ .repo/repo/repo sync -l -j10
evan@evan-X99:~/SRC/atk$ .repo/repo/repo list -n > ·/project.txt
evan@evan-X99:~/SRC/atk$ cat project.txt
android/rk/platform/system/rk_tee_user
android/rk/u-boot
linux/alientek/qt_demo
linux/app-new/LibIPCProtocol
linux/app-new/qfm
linux/app/QLauncher
linux/app/aiserver
linux/app/dbserver
linux/app/eptz_demo
linux/app/libgdbus
linux/app/librkdb
linux/app/multivideoplayer
linux/app/qcamera
linux/app/qplayer
linux/app/rkaiq_tool_server......
创建仓库
gitolite创建@atk-at3568_linux_repo
组,project
路径和正点原子的repo
一样:
evan@evan-X99:~/tools/gitolite-admin$ git diff
diff --git a/conf/gitolite.conf b/conf/gitolite.conf
index 47bb499..9bb5dad 100644
--- a/conf/gitolite.conf
+++ b/conf/gitolite.conf
@@ -3,3 +3,74 @@ repo gitolite-adminrepo testingRW+ = @all
+
+@atk-at3568_linux_repo = atk-rk3568_linux/android/rk/platform/system/rk_tee_user
+@atk-at3568_linux_repo = atk-rk3568_linux/android/rk/u-boot
+@atk-at3568_linux_repo = atk-rk3568_linux/linux/alientek/qt_demo
+@atk-at3568_linux_repo = atk-rk3568_linux/linux/app-new/LibIPCProtocol
...
...
+@atk-at3568_linux_repo = atk-rk3568_linux/rk/rkbin
+@atk-at3568_linux_repo = atk-rk3568_linux/rk/rknn-toolkit2
+@atk-at3568_linux_repo = atk-rk3568_linux/rk/rknpu2
+
+repo @atk-at3568_linux_repo
+ RW+CD = evan
对应 repo list -n
创建自己本地的git服务器
evan@evan-X99:~/tools/gitolite-admin$ git commit -m "add @atk-at3568_linux_repo"
[master 5abf05a] add @atk-at3568_linux_repo1 file changed, 71 insertions(+)
evan@evan-X99:~/tools/gitolite-admin$ git push origin master
枚举对象中: 7, 完成.
对象计数中: 100% (7/7), 完成.
使用 48 个线程进行压缩
压缩对象中: 100% (3/3), 完成.
写入对象中: 100% (4/4), 1.03 KiB | 1.03 MiB/s, 完成.
总共 4(差异 0),复用 0(差异 0),包复用 0
remote: 已初始化空的 Git 仓库于 /home/git/repositories/atk-rk3568_linux/android/rk/platform/system/rk_tee_user.git/
remote: 已初始化空的 Git 仓库于 /home/git/repositories/atk-rk3568_linux/android/rk/u-boot.git/
remote: 已初始化空的 Git 仓库于 /home/git/repositories/atk-rk3568_linux/linux/alientek/qt_demo.git/
...
...
remote: 已初始化空的 Git 仓库于 /home/git/repositories/atk-rk3568_linux/rk/rkbin.git/
remote: 已初始化空的 Git 仓库于 /home/git/repositories/atk-rk3568_linux/rk/rknn-toolkit2.git/
remote: 已初始化空的 Git 仓库于 /home/git/repositories/atk-rk3568_linux/rk/rknpu2.git/
To 127.0.0.1:gitolite-admin04b1df0..5abf05a master -> master
转移.repo
atk的仓库是深度为1的浅仓库, 无法使用git push --all
直接推送。
需要逐个将仓库原来的.git
删除, 从新创建提交和推送。
获取路径和项目
evan@evan-X99:~/SRC/atk$ .repo/repo/repo forall -c 'echo $REPO_PATH' > path.txt
evan@evan-X99:~/SRC/atk$ .repo/repo/repo forall -c 'echo $REPO_PROJECT' > project.txt
通过$REPO_PATH
进入到每个目录,删除原来的.git
然后从新初始化.git
并将其推送到本地对应的$REPO_PROJECT
的远程仓库
创建和推送脚本
你的脚本已经基本实现了所需的功能,但可以进行一些优化以提高可读性和健壮性。以下是一些改进建议:
- 错误处理:增加更多的错误处理,确保每一步操作都成功。
- 日志记录:添加日志记录,以便在出现问题时更容易调试。
- 使用函数:将重复的代码封装到函数中,使脚本更简洁。
- 避免硬编码:将一些常量提取出来,便于修改。
以下是优化后的脚本:
#!/bin/bash# 常量定义
REP_URL="git@127.0.0.1:atk-rk3568_linux"
LOG_FILE="script.log"# 日志函数
log() {echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}# 检查文件是否存在
check_files() {if [ ! -f "$1" ] || [ ! -f "$2" ]; thenlog "错误:找不到文件 $1 或 $2"exit 1fi
}# 初始化并推送 Git 仓库
init_and_push() {local path="$1"local project="$2"local src_dir="$3"# 进入目录cd "$src_dir/$path" || { log "无法进入目录 $src_dir/$path"; return; }# 删除 .git 目录(如果存在)if [ -d ".git" ]; thenrm -rf .gitfi# 初始化 Git 仓库git init || { log "初始化 Git 仓库失败: $path"; return; }# 添加所有文件git add . || { log "添加文件失败: $path"; return; }# 提交更改git commit -m "first commit" || { log "提交失败: $path"; return; }# 添加远程仓库git remote add origin "$REP_URL/$project" || { log "添加远程仓库失败: $path"; return; }# 推送至远程仓库git push origin master || { log "推送失败: $path"; return; }log "成功处理: $path : $project"
}# 主逻辑
main() {# 参数检查if [ $# -ne 2 ]; thenecho "用法: $0 <DIR> <SRC_DIR>"exit 1fi# 获取参数DIR="$1"SRC_DIR="$2"# 文件路径path_file="$DIR/path.txt"project_file="$DIR/project.txt"# 检查文件是否存在check_files "$path_file" "$project_file"# 打开文件并逐行读取{while IFS= read -r path_line && IFS= read -r project_line <&3; do# 处理每一行init_and_push "$path_line" "$project_line" "$SRC_DIR"echo "==================================="done < "$path_file" 3< "$project_file"} 3<&- # 关闭文件描述符3# 检查文件行数是否一致if [ "$(wc -l < "$path_file")" -ne "$(wc -l < "$project_file")" ]; thenlog "警告:$path_file 和 $project_file 的行数不一致。"fi
}# 调用主逻辑
main "$@"
解释:
- 日志函数:
log
函数用于记录日志信息,并将日志输出到控制台和日志文件script.log
中。 - 检查文件函数:
check_files
函数用于检查两个文件是否存在。 - 初始化并推送 Git 仓库:
init_and_push
函数封装了初始化 Git 仓库、添加文件、提交更改、添加远程仓库和推送的操作。 - 主逻辑:
main
函数是脚本的主逻辑部分,包括参数检查、文件检查、逐行读取和处理每一对路径和项目。
使用说明:
- 将上述代码保存到一个文件中,比如命名为
process_paths.sh
。 - 确保
path.txt
和project.txt
文件存在于指定的目录下。 - 给脚本执行权限:
chmod +x process_paths.sh
- 运行脚本:
./process_paths.sh /path/to/dir /path/to/src_dir
这样,脚本会逐行读取 path.txt
和 project.txt
文件,并同步处理每一对路径和项目。同时,日志记录功能可以帮助你更好地跟踪脚本的执行情况。
创建中心仓库
evan@evan-X99:~/tools/gitolite-admin$ git diff
diff --git a/conf/gitolite.conf b/conf/gitolite.conf
index 6d44180..4d6ce0e 100644
--- a/conf/gitolite.conf
+++ b/conf/gitolite.conf
@@ -72,5 +72,7 @@ repo testing@atk-at3568_linux_repo = atk-rk3568_linux/rk/rknn-toolkit2@atk-at3568_linux_repo = atk-rk3568_linux/rk/rknpu2+@atk-at3568_linux_repo = atk-rk3568_linux/manifests
+repo @atk-at3568_linux_repoRW+CD = evan
将atk下的manifests推动到刚刚新建的仓库
evan@evan-X99:~$ git clone /home/evan/SRC/atk/.repo/manifests.git
正克隆到 'manifests'...
remote: 枚举对象中: 14, 完成.
remote: 对象计数中: 100% (14/14), 完成.
remote: 压缩对象中: 100% (12/12), 完成.
remote: 总共 14(差异 3),复用 0(差异 0),包复用 0
接收对象中: 100% (14/14), 4.71 KiB | 4.71 MiB/s, 完成.
处理 delta 中: 100% (3/3), 完成.
evan@evan-X99:~$ cd manifests/
evan@evan-X99:~/manifests$ rm .git/ -rf
evan@evan-X99:~/manifests$ git init
已初始化空的 Git 仓库于 /home/evan/manifests/.git/
evan@evan-X99:~/manifests$ git add .
evan@evan-X99:~/manifests$ git commit -m "first commit"
[master (根提交) 3a3d45c] first commit9 files changed, 386 insertions(+)create mode 100755 common/yocto.xmlcreate mode 100755 include/rk356x_doc.xmlcreate mode 120000 rk3568_linux_release.xmlcreate mode 100644 rk356x_linux/ATK-RK3568_Linux_SDK_Note.mdcreate mode 100644 rk356x_linux/atk-rk3568_linux_alpha_v1.0.xmlcreate mode 100644 rk356x_linux/atk-rk3568_linux_release_v1.0_20230620.xmlcreate mode 100644 rk356x_linux/atk-rk3568_linux_release_v1.1_20230901.xmlcreate mode 100644 rk356x_linux/atk-rk3568_linux_release_v1.2_20240129.xmlcreate mode 100644 rk356x_linux/rk356x_linux_release_v1.3.0_20220620.xml
evan@evan-X99:~/manifests$ git remote -v
evan@evan-X99:~/manifests$ git remote add origin git@127.0.0.1:atk-rk3568_linux/manifests
evan@evan-X99:~/manifests$ git push origin master
枚举对象中: 14, 完成.
对象计数中: 100% (14/14), 完成.
使用 48 个线程进行压缩
压缩对象中: 100% (12/12), 完成.
写入对象中: 100% (14/14), 4.64 KiB | 2.32 MiB/s, 完成.
总共 14(差异 3),复用 0(差异 0),包复用 0
To 127.0.0.1:atk-rk3568_linux/manifests* [new branch] master -> master
拉取
- 安装
repo
命令
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod +x repo
sudo mv repo /usr/bin/
echo "export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'" >> ~/.bashrc
- 新建git-repo仓库
evan@evan-X99:~/tools/gitolite-admin$ git diff
diff --git a/conf/gitolite.conf b/conf/gitolite.conf
index 4d6ce0e..4d74d8b 100644
--- a/conf/gitolite.conf
+++ b/conf/gitolite.conf
@@ -4,6 +4,9 @@ repo gitolite-adminrepo testingRW+ = @all+repo git-repo
+ RW+ = evan
+@atk-at3568_linux_repo = atk-rk3568_linux/android/rk/platform/system/rk_tee_user@atk-at3568_linux_repo = atk-rk3568_linux/android/rk/u-boot@atk-at3568_linux_repo = atk-rk3568_linux/linux/alientek/qt_demo
- 克隆
git-repo
镜像到本地git服务器
evan@evan-X99:~/tools$ git clone --mirror https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
evan@evan-X99:~/tools$ cd git-repo.git/
evan@evan-X99:~/tools/git-repo.git$ git remote add gitolite git@127.0.0.1:git-repo
evan@evan-X99:~/tools/git-repo.git$ git push gitolite --all
evan@evan-X99:~/tools/git-repo.git$ git push gitolite --tags
-
修改中心仓库配置
- 指定同步分支为
master
(前文脚本自动化推送仓库, 默认推送到了master分支) - 删除
depth
选项
- 指定同步分支为
-
执行命令
evan@evan-X99:~/work$ repo init -u git@127.0.0.1:atk-rk3568_linux/manifests.git -b master -m rk3568_linux_release.xml --repo-url=git@127.0.0.1:git-repo.git --no-repo-verify
evan@evan-X99:~/work$ repo sync -j10
evan@evan-X99:~/work$ repo start master --all
新增dl仓库
将dl/
包也一起增加到git
服务器做备份下载
evan@evan-X99:~/work$ tar xzf ~/swap-x99/dl.tgz -C buildroot/
evan@evan-X99:~/work$ cd buildroot
evan@evan-X99:~/work/buildroot$ git add -f dl/
evan@evan-X99:~/work/buildroot$ git commit -m "add dl/"
evan@evan-X99:~/work/buildroot$ git push origin master
相关文章:
repo仓库转移到自己本地的git服务器
前提条件:搭建好gitolite 以转移正点原子rk3568_linux工程为例子,将其转移到自己的git服务器。 获取完整repo仓库 将正点原子epo仓库sync出来 evanevan-X99:~/SRC/atk$ .repo/repo/repo sync -l -j10 evanevan-X99:~/SRC/atk$ .repo/repo/repo list -n…...

微服务即时通讯系统的实现(服务端)----(2)
目录 1. 语音识别子服务的实现1.1 功能设计1.2 模块划分1.3 模块功能示意图1.4 接口的实现 2. 文件存储子服务的实现2.1 功能设计2.2 模块划分2.3 模块功能示意图2.4 接口的实现 3. 用户管理子服务的实现3.1 功能设计3.2 模块划分3.3 功能模块示意图3.4 数据管理3.4.1 关系数据…...

人工智能-深度学习-神经网络-激活函数
激活函数通过引入非线性来增强神经网络的表达能力,对于解决线性模型的局限性至关重要。由于反向传播算法(BP)用于更新网络参数,因此激活函数必须是可微的,也就是说能够求导的。 满足激活函数的条件 1.可微分,也就是可求导 激活函…...

vue3+ts+uniapp微信小程序顶部导航栏
这是colorui改的,不用就不用看啦 color-ui(https://docs.xzeu.com/#/) 新建component文件夹创建topNavigation.vue <template><view><view class"cu-custom" :style"height: CustomBar px"><view class"cu-bar…...

IAR中编译下载未下载问题
第一张图片是正常下载,第二张未正常下载。经过查看download选项发现 启用了 suppress download (禁用下载)...

springboot(20)(删除文章分类。获取、更新、删除文章详细)(Validation分组校验)
目录 一、删除文章分类功能。 (1)接口文档。 1、请求路径、请求参数。 2、请求参数。 3、响应数据。 (2)实现思路与代码书写。 1、controller层。 2、service接口业务层。 3、serviceImpl实现类。 4、mapper层。 5、后端接口测试。…...
英语系统语法书面记载:高级语法 8 的状语从句
在英语高级语法中,状语从句是一种用来修饰动词、形容词、副词或整个句子的从句,它提供有关时间、地点、原因、条件、方式、让步等信息。状语从句通常由特定的连词引导。以下是常见的几种状语从句类型及其用法: 1. 时间状语从句 (Adverbial Cl…...

C语言:深入理解指针(1)
一.内存和地址 在讲内存和地址之前,我们想有个生活中的案例: 假设有一栋宿舍楼,把你放在楼里,楼上有100个房间,但是房间没有编号,你的一个朋友来找你玩,如果想找到你,就得挨个房子去…...
priority_queue--优先队列
一、认识优先队列 priority_queue(优先队列)是 C 标准模板库(STL)中的一个容器适配器。它的底层实现通常是用堆(一般是二叉堆)来实现的。优先队列中的元素按照一定的优先级顺序进行排列,在队首的…...

Paper -- 建筑物高度估计 -- 基于深度学习、图像处理和自动地理空间分析的街景图像建筑高度估算
论文题目: Building height estimation from street-view imagery using deep learning, image processing and automated geospatial analysis 中文题目: 基于深度学习、图像处理和自动地理空间分析的街景图像建筑高度估算 作者: Ala’a Al-Habashna, Ryan Murdoch 作者单位: …...

开发一套ERP 第八弹 RUst 插入数据
更全面的报错,方便检查错误在哪里,现代高级语言越来越智能 还是得看下原文档怎么操作的 src 目录为crate 的根目录 想在crate 中模块相互引入需要在 main 中声明,各个模块,然后才能在各个模块中相互引入和使用 原始工程引入,避免直接使用 lib.rs 回合cargo 中的一些 工程管理出…...
回退用 git revert 还是 git reset?
git revert 会生成一个新的 commit 来记录此次操作;git reset 是把 HEAD 指针向前挪动一次,会减少一个 commit。 回退用 git revert 回退还是用 git reset,核心就一点: 是否需要记录这次回退。 如果需要记录这次回退,…...
【docker】多阶段构建与基础构建,及企业案例展示
基础构建与多阶段构建对比 基础构建(单阶段构建) 在基础构建中,所有构建过程和最终的应用程序都在同一个镜像中进行,构建工具和最终应用程序都会在最终镜像中。 这样构建镜像时会包含所有的构建工具和依赖,因此最终镜…...
基于链表的基础笔试/面试题
1. 反转链表 问题描述:反转一个单向链表。 示例: 输入:1 → 2 → 3 → 4 → 5 输出:5 → 4 → 3 → 2 → 1 class ListNode {int val;ListNode next;ListNode(int x) {val x;} }public class LinkedList {public ListNode …...
SARIMA 模型Matlab代码
% 导入数据 data readtable(data.xlsx); % 假设数据在第一列 y data{:, 1}; % 获取第一列数据% 划分训练集和测试集,80% 训练,20% 测试 trainSize floor(0.8 * length(y)); trainData y(1:trainSize); testData y(trainSize1:end);% 创建时间序列…...

第八课 Unity编辑器创建的资源优化_特效篇(Particle System)详解
无论是CPU还是GPU,粒子系统对其的影响面都是不容小觑的。随着项目的重度化和3A化,玩家的口味变挑剔了、游戏玩法复杂度变高了、画面的特效表现变复杂了......所以我们还是更加谨慎地对待粒子系统。 特效(Particle System) 游戏效…...

Oracle对比表与表之间的结构
自己首先想到的就是,navicat有提供结构同步 但是有些时候情况不一样,比如我遇到的是连接不同,而且是互相同步,以最多的列的那个表为样 没有说一个固定的源 那么还可以通过导出表结构去另一个库中执行看是否报错,以此来判断结构的不同 但是我感觉有点儿麻烦 最后想到通过sql语…...

基于JSP+MySQL的网上招聘系统的设计与实现
摘要 在这样一个经济飞速发展的时代,人们的生存与生活问题已成为当代社会需要关注的一个焦点。对于一个刚刚 踏入社会的年轻人来说,他对就业市场和形势了解的不够详细,同时对自己的职业规划也很模糊,这就导致大量的 时间被花费在…...

【Linux】进程地址空间(虚拟地址vs物理地址vs页表)
Linux 进程概念补充【Linux】 进程是什么(不熟悉的兄弟可以看看)。 1. C/C内存分布图 对于有c/c基础的同学相信对上面的图片并不陌生,实际上其描述的并不是正真的物理内存,而是虚拟内存,我们把它叫做进程地址空间 。 2…...
pytorch 融合 fuse 学习笔记
目录 fuse_lora 作用是什么 fuse_modules源码解读 fuse_lora 作用是什么 在深度学习模型微调场景下(与 LoRA 相关) 参数融合功能 在使用 LoRA(Low - Rank Adaptation)对预训练模型进行微调后,fuse_lora函数的主要作…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...
从实验室到产业:IndexTTS 在六大核心场景的落地实践
一、内容创作:重构数字内容生产范式 在短视频创作领域,IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色,生成的 “各位吴彦祖们大家好” 语音相似度达 97%,单条视频播放量突破百万…...
python读取SQLite表个并生成pdf文件
代码用于创建含50列的SQLite数据库并插入500行随机浮点数据,随后读取数据,通过ReportLab生成横向PDF表格,包含格式化(两位小数)及表头、网格线等美观样式。 # 导入所需库 import sqlite3 # 用于操作…...
基于Java项目的Karate API测试
Karate 实现了可以只编写Feature 文件进行测试,但是对于熟悉Java语言的开发或是测试人员,可以通过编程方式集成 Karate 丰富的自动化和数据断言功能。 本篇快速介绍在Java Maven项目中编写和运行测试的示例。 创建Maven项目 最简单的创建项目的方式就是创建一个目录,里面…...

多模态学习路线(2)——DL基础系列
目录 前言 一、归一化 1. Layer Normalization (LN) 2. Batch Normalization (BN) 3. Instance Normalization (IN) 4. Group Normalization (GN) 5. Root Mean Square Normalization(RMSNorm) 二、激活函数 1. Sigmoid激活函数(二分类&…...