#!/usr/bin/zsh # 本脚本适用于将 总部 RD仓库 中的代码定期镜像到 子公司 Gitea仓库 中 # 加载言灵配置( http://yum.gdie.top:50200/LK/x ) source $HOME/.config/xunmi/信息 source $言灵一路径/x/公共/函数.zsh # 路径列表包含脚本本身路径, 脚本路径的上一级路径, 执行脚本用户的家路径, 以及根路径 脚本路径="$(dirname "$(realpath "$0")")" 路径列表=("$(dirname "$脚本路径")" "$脚本路径" "$HOME" "/") # 需要同步任务的任务文件名(支持绝对路径和相对路径, 相对路径自动查找脚本同级, 上级, 家目录, 根目录) 同步任务="uefi-loongarch" # 根据同步任务自动生成 任务路径="" # 如果需要写明一个默认分支名 默认分支="master" # 帮助信息 帮助一信息=$(cat < ${默认分支} )任务启动" # 判断任务是绝对路径还是相对路径, 并检测路径是否存在 if [[ "$同步任务" == /* ]]; then 输出 2 "发现绝对值路径, 正在识别路径是否存在" 路径检测 "$同步任务" if [[ $? -eq 0 ]]; then 任务路径=$同步任务 输出 0 "[绝对路径]已找到 $任务路径" else 输出 3 "[绝对路径]未找到任务目标($同步任务)" 输出帮助 fi else 输出 2 "发现相对路径, 正在查找常用路径是否存在指定项目(本级, 上级, 家, 根)" # 遍历路径列表 检查数量=0 for 路径 in "${路径列表[@]}"; do 任务路径=$路径/$同步任务 路径检测 "$任务路径" if [[ $? -eq 0 ]]; then 输出 0 "[相对路径]已找到 $任务路径" break else 检查数量=$((检查数量 + 1)) fi done if (( 检查数量 == ${#路径列表[@]} )); then 输出 3 "[相对路径]未找到任务目标($同步任务)" 输出帮助 fi fi # 判断是否为正常git仓库, 仓库中是否包含指定远程地址 配置文件="$任务路径/.git/config" if [[ -e $配置文件 ]]; then 输出 2 "检测Git配置..." # 判断是否有rd仓库的地址 if grep -P -z -q '\[remote "rd"\][\s\S]*?url = ssh://fanxudong@rd.loongson.cn:29418/' $配置文件; then 输出 0 "已找到rd配置" cd $任务路径 if git show-ref --quiet refs/heads/$默认分支; then 输出 0 "已找到分支: $默认分支" else 输出 1 "未找到分支($默认分支)" fi cd - else 输出 1 "未找到rd地址, 请按照说明文档(README.md)中的方案配置仓库后在调用此脚本!" fi else 输出 1 "未找到Git配置($配置文件)" fi } 镜像同步(){ 输出 2 "开始同步镜像" cd $任务路径 色彩一灰色 # 更新默认分支 git pull rd $默认分支 # 更新所有分支和标签 git fetch rd git fetch --tags # 推送所有分支和标签 git push origin --all git push origin --tags 色彩一清除 cd - } ################################# # 入口 # ################################# [[ ${言灵一函数} == 1 ]] || . ${目录一根}/公共/函数.zsh || exit 1 || echo "*-*-* 缺少必要环境(言灵) *-*-*" # 处理用户输入 # 检查参数数量, 少于1一个参数就输出帮助 [ $# -ge 1 ] || 输出帮助 case "$1" in -h | -帮助 | --help ) 输出帮助 ;; *) if [ $# -eq 2 ]; then 默认分支=$2 fi 同步任务=$1 ;; esac 初始化 镜像同步