当前位置: 首页 > news >正文

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的远程仓库


创建和推送脚本

你的脚本已经基本实现了所需的功能,但可以进行一些优化以提高可读性和健壮性。以下是一些改进建议:

  1. 错误处理:增加更多的错误处理,确保每一步操作都成功。
  2. 日志记录:添加日志记录,以便在出现问题时更容易调试。
  3. 使用函数:将重复的代码封装到函数中,使脚本更简洁。
  4. 避免硬编码:将一些常量提取出来,便于修改。

以下是优化后的脚本:

#!/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 "$@"

解释:

  1. 日志函数log 函数用于记录日志信息,并将日志输出到控制台和日志文件 script.log 中。
  2. 检查文件函数check_files 函数用于检查两个文件是否存在。
  3. 初始化并推送 Git 仓库init_and_push 函数封装了初始化 Git 仓库、添加文件、提交更改、添加远程仓库和推送的操作。
  4. 主逻辑main 函数是脚本的主逻辑部分,包括参数检查、文件检查、逐行读取和处理每一对路径和项目。

使用说明:

  1. 将上述代码保存到一个文件中,比如命名为 process_paths.sh
  2. 确保 path.txtproject.txt 文件存在于指定的目录下。
  3. 给脚本执行权限:chmod +x process_paths.sh
  4. 运行脚本:./process_paths.sh /path/to/dir /path/to/src_dir

这样,脚本会逐行读取 path.txtproject.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

拉取

  1. 安装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
  1. 新建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
  1. 克隆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
  1. 修改中心仓库配置

    1. 指定同步分支为master(前文脚本自动化推送仓库, 默认推送到了master分支)
    2. 删除depth选项
  2. 执行命令

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服务器

前提条件&#xff1a;搭建好gitolite 以转移正点原子rk3568_linux工程为例子&#xff0c;将其转移到自己的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 关系数据…...

人工智能-深度学习-神经网络-激活函数

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

vue3+ts+uniapp微信小程序顶部导航栏

这是colorui改的&#xff0c;不用就不用看啦 color-ui(https://docs.xzeu.com/#/) 新建component文件夹创建topNavigation.vue <template><view><view class"cu-custom" :style"height: CustomBar px"><view class"cu-bar…...

IAR中编译下载未下载问题

第一张图片是正常下载&#xff0c;第二张未正常下载。经过查看download选项发现 启用了 suppress download &#xff08;禁用下载)...

springboot(20)(删除文章分类。获取、更新、删除文章详细)(Validation分组校验)

目录 一、删除文章分类功能。 &#xff08;1&#xff09;接口文档。 1、请求路径、请求参数。 2、请求参数。 3、响应数据。 &#xff08;2&#xff09;实现思路与代码书写。 1、controller层。 2、service接口业务层。 3、serviceImpl实现类。 4、mapper层。 5、后端接口测试。…...

英语系统语法书面记载:高级语法 8 的状语从句

在英语高级语法中&#xff0c;状语从句是一种用来修饰动词、形容词、副词或整个句子的从句&#xff0c;它提供有关时间、地点、原因、条件、方式、让步等信息。状语从句通常由特定的连词引导。以下是常见的几种状语从句类型及其用法&#xff1a; 1. 时间状语从句 (Adverbial Cl…...

C语言:深入理解指针(1)

一.内存和地址 在讲内存和地址之前&#xff0c;我们想有个生活中的案例&#xff1a; 假设有一栋宿舍楼&#xff0c;把你放在楼里&#xff0c;楼上有100个房间&#xff0c;但是房间没有编号&#xff0c;你的一个朋友来找你玩&#xff0c;如果想找到你&#xff0c;就得挨个房子去…...

priority_queue--优先队列

一、认识优先队列 priority_queue&#xff08;优先队列&#xff09;是 C 标准模板库&#xff08;STL&#xff09;中的一个容器适配器。它的底层实现通常是用堆&#xff08;一般是二叉堆&#xff09;来实现的。优先队列中的元素按照一定的优先级顺序进行排列&#xff0c;在队首的…...

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 来记录此次操作&#xff1b;git reset 是把 HEAD 指针向前挪动一次&#xff0c;会减少一个 commit。 回退用 git revert 回退还是用 git reset&#xff0c;核心就一点&#xff1a; 是否需要记录这次回退。 如果需要记录这次回退&#xff0c…...

【docker】多阶段构建与基础构建,及企业案例展示

基础构建与多阶段构建对比 基础构建&#xff08;单阶段构建&#xff09; 在基础构建中&#xff0c;所有构建过程和最终的应用程序都在同一个镜像中进行&#xff0c;构建工具和最终应用程序都会在最终镜像中。 这样构建镜像时会包含所有的构建工具和依赖&#xff0c;因此最终镜…...

基于链表的基础笔试/面试题

1. 反转链表 问题描述&#xff1a;反转一个单向链表。 示例&#xff1a; 输入&#xff1a;1 → 2 → 3 → 4 → 5 输出&#xff1a;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}; % 获取第一列数据% 划分训练集和测试集&#xff0c;80% 训练&#xff0c;20% 测试 trainSize floor(0.8 * length(y)); trainData y(1:trainSize); testData y(trainSize1:end);% 创建时间序列…...

第八课 Unity编辑器创建的资源优化_特效篇(Particle System)详解

无论是CPU还是GPU&#xff0c;粒子系统对其的影响面都是不容小觑的。随着项目的重度化和3A化&#xff0c;玩家的口味变挑剔了、游戏玩法复杂度变高了、画面的特效表现变复杂了......所以我们还是更加谨慎地对待粒子系统。 特效&#xff08;Particle System&#xff09; 游戏效…...

Oracle对比表与表之间的结构

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

基于JSP+MySQL的网上招聘系统的设计与实现

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

【Linux】进程地址空间(虚拟地址vs物理地址vs页表)

Linux 进程概念补充【Linux】 进程是什么&#xff08;不熟悉的兄弟可以看看&#xff09;。 1. C/C内存分布图 对于有c/c基础的同学相信对上面的图片并不陌生&#xff0c;实际上其描述的并不是正真的物理内存&#xff0c;而是虚拟内存&#xff0c;我们把它叫做进程地址空间 。 2…...

pytorch 融合 fuse 学习笔记

目录 fuse_lora 作用是什么 fuse_modules源码解读 fuse_lora 作用是什么 在深度学习模型微调场景下&#xff08;与 LoRA 相关&#xff09; 参数融合功能 在使用 LoRA&#xff08;Low - Rank Adaptation&#xff09;对预训练模型进行微调后&#xff0c;fuse_lora函数的主要作…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...