Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
845fd56f50 | ||
|
c97eaa0da8 | ||
|
1490805c4e |
31
README.md
31
README.md
|
@ -1 +1,30 @@
|
||||||
1
|
# 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
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
148
同步脚本.zsh
Normal file
148
同步脚本.zsh
Normal file
|
@ -0,0 +1,148 @@
|
||||||
|
#!/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 <<EOF
|
||||||
|
用法: $0 [-帮助] 任务名 [分支]
|
||||||
|
|
||||||
|
任务名: 需要同步任务的任务文件名(支持绝对路径和相对路径, 相对路径自动查找脚本同级, 上级, 家目录, 根目录)
|
||||||
|
分支: 选填项, 在未指定默认的情况下会使用 ${默认分支}
|
||||||
|
|
||||||
|
示例:
|
||||||
|
$0 uefi-loongarch
|
||||||
|
$0 linux-4.19-loongson desktop-release-4.19.190-7
|
||||||
|
|
||||||
|
EOF
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
#################################
|
||||||
|
# 函数 #
|
||||||
|
#################################
|
||||||
|
|
||||||
|
输出帮助(){
|
||||||
|
echo "\n*-*-*-*-*-*-*-*-*-*-*-*-*-*\n\n"${帮助一信息}
|
||||||
|
echo "\n*-*-*-*-*-*-*-*-*-*-*-*-*-*\n"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# 检测路径是否存在, 并为目录
|
||||||
|
路径检测(){
|
||||||
|
if [[ -d "$1" ]]; then
|
||||||
|
return 0 # 路径存在
|
||||||
|
else
|
||||||
|
return 1 # 路径不存在
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 检测环境是否有问题
|
||||||
|
初始化(){
|
||||||
|
# 检测言灵相关依赖是否被正常引入
|
||||||
|
输出 2 "RD同步( ${同步任务} -> ${默认分支} )任务启动"
|
||||||
|
# 判断任务是绝对路径还是相对路径, 并检测路径是否存在
|
||||||
|
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
|
||||||
|
|
||||||
|
初始化
|
||||||
|
镜像同步
|
||||||
|
|
Loading…
Reference in New Issue
Block a user