diff --git a/README.md b/README.md index 56a6051..4a62646 100644 --- a/README.md +++ b/README.md @@ -1 +1,30 @@ -1 \ No newline at end of file +# RD同步脚本使用说明 + +由于龙芯总部Git同步只能使用ssh模式, 而Gitea镜像只能使用http模式, 故无法直接调用gitea本身的镜像模式镜像总部仓库, 本项目主要目的就是将远程仓库 A 的指定分支自动同步到远程仓库 B 中 + +本脚本需要在具有 言灵 环境的主机下使用, 且需要按照特定方式拉去仓库后方可使用 + +## git镜像方法 + +这里我们所有的拉去方式使用ssh拉去, 这样能避免输入用户密钥的操作! + +### 从原始仓库中拉去项目 + +需要将原始仓库的远程名称改成rd, 然后在将我们镜像仓库添加取名为`origin`, 具体使用示例如下: +```shell + +``` + +### 从镜像仓库中拉去项目 + +如果项目已经被我们手动同步到自建的仓库中, 可以先使用`git clone`拉去后在手动添加原始仓库连接 +```shell +git clone ssh://git@gitea.whlug.cn:33262/rd-mirror/uefi-loongarch.git +cd uefi-loongarch +# 主要要添加这一句, 添加一个名为rd的远程同步仓库 +git remote add rd ssh://fanxudong@rd.loongson.cn:29418/uefi-loongarch +``` + + + + diff --git a/同步脚本.zsh b/同步脚本.zsh new file mode 100644 index 0000000..e52cc65 --- /dev/null +++ b/同步脚本.zsh @@ -0,0 +1,113 @@ +#!/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" + +任务路径="" + +################################# +# 函数 # +################################# + +# 检测路径是否存在, 并为目录 +路径检测(){ + if [[ -d "$1" ]]; then + return 0 # 路径存在 + else + return 1 # 路径不存在 + fi +} + +# 检测环境是否有问题 +初始化(){ + # 检测言灵相关依赖是否被正常引入 + [[ ${言灵一函数} == 1 ]] || . ${目录一根}/公共/函数.zsh || exit 1 || echo "*-*-* 缺少必要环境(言灵) *-*-*" + 输出 2 "RD同步( $同步任务 )任务启动" + # 判断任务是绝对路径还是相对路径, 并检测路径是否存在 + if [[ "$同步任务" == /* ]]; then + 输出 2 "发现绝对值路径, 正在识别路径是否存在" + 检查路径 "$同步任务" + if [[ $? -eq 0 ]]; then + 任务路径=$同步任务 + 输出 0 "已找到 $任务路径" + else + 输出 1 "未找到任务目标($同步任务)" + exit 1 + fi + else + 输出 2 "发现相对路径, 正在查找常用路径是否存在指定项目(本级, 上级, 家, 根)" + # 遍历路径列表 + 检查数量=0 + for 路径 in "${路径列表[@]}"; do + 任务路径=$路径/$同步任务 + 路径检测 "$任务路径" || 输出 0 "检测到 $任务路径" + if [[ $? -eq 0 ]]; then + 输出 0 "已找到 $任务路径" + break + else + 检查数量=$((检查数量 + 1)) + fi + done + if [[ $检测数量 -eq ${#路径列表[@]} ]]; then + 输出 1 "未找到任务目标($同步任务)" + 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 --all --tags + # 推送所有分支和标签 + git push origin --all --tags + 色彩一清除 + cd - +} + +#cd $任务路径 +# 从rd上拉去最新的任务 ( 后续考虑使用: git fetch rd 代替) +#git pull rd master + + +################################# +# 入口 # +################################# + +初始化 +镜像同步 +