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

正点原子repo放到自己的git服务器

atk-rk3568_android11

导出project-objects对应仓库

.repo/repo/repo list -n > project-object.txt

project-object.txt格式化,并通过gitolite.conf创建对应仓库

@atk-rk3568_android11_repo = atk-rk3568_android11/RKTools
@atk-rk3568_android11_repo = atk-rk3568_android11/device/common
@atk-rk3568_android11_repo = atk-rk3568_android11/device/generic/arm64
...
...
@atk-rk3568_android11_repo = atk-rk3568_android11/toolchain/benchmark
@atk-rk3568_android11_repo = atk-rk3568_android11/toolchain/pgo-profiles
@atk-rk3568_android11_repo = atk-rk3568_android11/tools/platform-compat

repo @atk-rk3568_android11_repo
  RW+CD = evan

获取路径和项目

.repo/repo/repo forall -c 'echo $REPO_PATH' > path.txt
.repo/repo/repo forall -c 'echo $REPO_PROJECT' > project.txt

脚本

#!/bin/bash

# 常量定义
REP_URL="git@127.0.0.1:atk-rk3568_android11"
# 获取脚本的真实路径
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LOG_FILE="$SCRIPT_DIR/script.log"

# 日志函数
log() {
  echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}

# 显示帮助信息
usage() {
  cat << EOF
Usage: $0 [OPTIONS] <DIR> <SRC_DIR>

This script initializes and pushes Git repositories based on paths and projects specified in files.

Options:
  -h, --help     Display this help message and exit.

Arguments:
  DIR            Directory containing path.txt and project.txt files.
  SRC_DIR        Source directory where the repositories are located.

Example:
  $0 /path/to/dir /source/directory

The script reads paths from 'path.txt' and corresponding projects from 'project.txt',
initializes a Git repository for each path, commits changes, and pushes to the remote repository.
EOF
}

# 检查文件是否存在
check_files() {
  if [ ! -f "$1" ] || [ ! -f "$2" ]; then
    log "错误:找不到文件 $1$2"
    usage
    exit 1
  fi
}

# 初始化并推送 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" ]; then
    rm -rf .git
  fi

  # 初始化 Git 仓库
  git init || { log "初始化 Git 仓库失败: $path"; return; }

  # 添加所有文件
  git add . || { log "添加文件失败: $path"; return; }

  # 提交更改
  git commit -m "first commit && create master branch" || { log "提交失败: $path"; return; }

  # 添加远程仓库
  git remote add origin "$REP_URL/$project" || { log "添加远程仓库失败: $path"; return; }

  # 推送至远程仓库
  git push -u origin master || { log "推送失败: $path"; return; }

  log "成功处理: $path : $project"
}

# 主逻辑
main() {
  # 参数检查
  if [ $# -eq 1 ] && ([ "$1" == "-h" ] || [ "$1" == "--help" ]); then
    usage
    exit 0
  fi

  if [ $# -ne 2 ]; then
    log "错误:参数数量不正确"
    usage
    exit 1
  fi

  # 获取参数
  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")" ]; then
    log "警告:$path_file$project_file 的行数不一致。"
  fi
}

# 调用主逻辑
main "$@"

http://www.kler.cn/a/509156.html

相关文章:

  • 探索与创作:2024年CSDN平台上的成长与突破
  • Redis 中 TTL 的基本知识与禁用缓存键的实现策略(Java)
  • 【Linux系列】查看服务器是否使用了 SSD 的多种方法
  • wireshark抓路由器上的包 抓包路由器数据
  • 使用 Docker 部署 Java 项目(通俗易懂)
  • Oracle报错ORA-01078、LRM-00109
  • 第k小(经典Top k问题)
  • springboot整合libreoffice(两种方式,使用本地和远程的libreoffice);docker中同时部署应用和libreoffice
  • Vector的模拟实现与迭代器失效问题
  • 什么是SSL及SSL的工作流程
  • 线性表代码实战
  • 开发完全开源的AI会议助手:提升会议效率
  • STM32的DMA作用
  • Ubuntu20.04安装mysql9.0.1,并且修改数据文件路径
  • 【C++】哈希表的使用
  • Solidity03 Solidity变量简述
  • SpringBoot的AOP-入门
  • nvm 管理nodejs,安装pnpm后报错,出现:pnpm不是内部或外部命令,也不是可运行的程序或批处理文件。
  • Plume :RWAfi 叙事引领者,全新加密时代的新蓝筹生态
  • 第4章 Kafka核心API——Kafka客户端操作
  • 深度学习常见术语解释
  • 计算机网络ENSP课设--三层架构企业网络
  • 后盾人JS -- JS数组挖掘(成年篇)
  • Mysql--实战篇--连接池(连接池原理,HikariCP、C3P0、Druid和DBCP等)
  • LLama 架构一览
  • QT的TCP通讯