【工具使用】【Shell脚本】【gitlab】下拉所有的仓库代码并指定分支推送给客户仓库

news/2024/9/22 23:25:41

1  前言

这不是项目要结束了么,项目验收要交付源代码,客户在阿里云上买了个云效,需要把我们公司的代码同步上去。

首先云效支持各种导入,比如直接贴上你的 gitlab地址,再加个token 他就会自己同步,但我不能这么做,主要是因为我们公司有的别的项目代码也在一块,只是分支不一样,并且做事情要干精细点负责点。用了哪个分支就只推哪个分支。

那同步一个仓库的代码,大概需要这么几步:

(1)拉代码 git clone xxx地址

(2)切换分支

(3)添加新仓库地址 git remote add new-origin xxxx新仓库地址

(4)推送 git push new-origin 完事

看似简单其实中间还是遇到一些问题,比如:

(1)权限:拉代码要权限 推代码也要权限  这个我们通过 ssh 方式来方便些 先本地生成下 ssh 然后把 key 配置到拉代码仓库的 key里  也在推的新仓库地址里配置上这个 key 这样拉推的权限就解决了

(2)ssh 推送的时候会有个这个 Are you sure you want to continue connecting (yes/no/[fingerprint]? 可以执行这个 set GIT_SSH_COMMAND=ssh -o StrictHostKeyChecking=accept-new

(3)获取全部仓库,这个还是通过 gitlab 的接口去拉,需要 token,但是不知道是不是 gitlab 的问题还是我的问题 总是获取的不全  我是用的这个 api:/api/v4/projects?per_page=9999&simple=true  它是分页的所以加上 per_page 参数,因为输出的信息很多加上 simple=true

(4)过滤仓库,因为并不是所有的都推,所以要筛选过滤一下,这个维护一个数组 要么在数组里的才推 要么在数组里的不推 或者某个名称开头等 看你们选择

(5)分支筛选,分支命名各种不规范要筛选出一些特定的分支,没有特定分支的话,再推一个默认test分支

(6)打扫战场,推送完后续不用的话,配的 key 该删的就删 token不用的话也删掉等

大概能回忆的暂时是这些问题,基本都解决了,就剩 gitlab 获取所有的仓库感觉它返回的就是不全,是真不全,不知道是不是权限不够还是怎么的,明明我能看到的仓库,JSON数据里边就是没有,大家有知道的还望指点下。

另外参考:这是我之前拉仓库的时候写的另一个 【工具使用】【Shell脚本】【gitlab】下拉所有的仓库代码。

2  前置

前置的工作主要就是,ssh 的 key 的生成加配置即可。

生成命令:

ssh-keygen -t rsa -b 4096 -C "xxx"

windows 默认的生成位置 c:/用户/名称/.ssh:

然后把 id_rsa.pub 里的密钥复制到拉推仓库,比如 gitlab:

阿里云效的在这里:

另外拉全部仓库的时候,是调用 gitlab 的 HTTP 接口所以也需要一个 Token,在这个页面生成一个即可。

 

好,前置工作基本就这样。

3  脚本

脚本的话,我这里也就直接贴了,都有注释,大家可以试试,需要变化的可能就是前面的四个地址以及后边要推送分支根据你的情况进行更改:

#!/bin/bash# 要拉取仓库的HTTP地址
GIT_ADDR="https://xxxxxx"
# 要拉区仓库的 TOKEN
GIT_ACCESS_TOKEN="xxxxx"# 要拉取的仓库的 SSH 前缀
GIT_CLONE_ADDR="ssh://git@xxxxx:23"
# 要推送的仓库 SSH 前缀
GIT_PUSH_ADDR="git@xxxxxxx"# 获取的json文件名称
JSON_FILE="data.json"# 获取所有的仓库
echo "download start"
curl -H "PRIVATE-TOKEN:$GIT_ACCESS_TOKEN" -H "Content-Type: application/json" "$GIT_ADDR/api/v4/projects?per_page=9999" > $JSON_FILE# json解析
objs=$(cat $JSON_FILE | jq '.[].path_with_namespace')echo "handle start"
for obj in $objs
do # 去掉双引号    obj=`echo $obj | sed -e 's/"//g'`echo $obj# 分支计算标识 如果有指定分支 num++ 没有最后就是 0  等于0的话推默认分支 num=0# 前缀筛选 判断是不是以某个字符串开头的if [[ $obj == stock* ]]; then# 截取最后的仓库名称 比如 a/b/c 得出 cresult="${obj##*/}"# 打印一下echo $result# 拼接 clone 地址信息obj=`echo $GIT_CLONE_ADDR/$obj`# 打印完整的地址信息echo $obj# 拉取代码git clone $obj# 进入代码目录cd $result# 添加新的远程仓库norigin=`echo $GIT_PUSH_ADDR/$result`echo $norigingit remote add new-origin $norigin# 按分支进行筛选推送test=$(git branch -a | grep test)echo $testif [ ${#test} -gt 0 ]; thenecho "我找到test了"((num++))git checkout test# 推送git push new-originfimaster=$(git branch -a | grep master)echo $masterif [ ${#master} -gt 0 ]; thenecho "我找到master了"((num++))git checkout master# 推送git push new-originfidev=$(git branch -a | grep dev)echo $devif [ ${#dev} -gt 0 ]; thenif [ ${#num} -eq 0 ]; thenecho "我找到dev了"git checkout dev# 推送git push new-originfifi# 退出当前仓库路径cd ..# !!!可以先测试一个  可以的话把 break 去掉即可breakfi
done
echo "handle end"

最后总共 55个仓库代码的推送,代码就不能给大家看了哈:

shell 脚本不经常写就容易忘,有的数组包含、字符串处理什么的都不会写了= =,但是有逻辑的话,先干什么后干什么最终都可以实现,后续空了看看能不能再优化下,加油。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/60596.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

南沙C++信奥老师解一本通题: 1361:产生数(Produce)

​[题目描述】给出一个整数n(n≤2000)和k个变换规则(k≤15)。规则: ① 1个数字可以变换成另1个数字; ② 规则中,右边的数字不能为零。 例如:n=234,k=2规则为 2 → 5 3 → 6 上面的整数234经过变换后可能产生出的整数为(包括原数)234,534,264,564共4种不同的产生数…

Switch大气层游戏下载服务及实测列表

朗读全文Your browser does not support the audio element. 有什么用/怎么用 更新实测的Switch大气层中安装的游戏列表, 分享安装和测试体验, 列表会不定时更新 已记录实测了的Switch游戏会在本地存储, 方便客户直接从本地快速获取 (请联系博主, 提供线上线下有偿安装服务…

WIFI远程无线中继之K2P刷机Padavan无线桥接功能

WI-FI无线中继, 无线桥接, 扩大WIFI信号覆盖范围/面积朗读全文Your browser does not support the audio element. 有什么用/怎么用 本文仅围绕着有限的硬件投入情况下, 如何扩大WIFI信号覆盖范围/面积. 抛砖引玉, 如果您有更好的方案, 请大方地留言告诉我, 提前感谢 需求…

Switch串流PC让Switch运行PC或Steam大作

游戏串流: 游戏的计算和渲染过程发生在远程服务器上(而不是玩家的本地设备上), 本地设备可以轻松游玩远程游戏(这个远程游戏的概念很广, 可是是PC, Steam游戏, 安卓游戏等等. 本文的讨论范围可以理解为大型游戏被投屏到了Switch主机屏幕上, 并且用Switch的外设可直接操控游戏)朗…

0基础学Pine量化 动态EMA改进

动态EMA改进改进前 源策略是基于唐奇安上下轨,先看看15mink线USDT的2023.7.30-2024.7.30的结果下面是2022-7-30到2023-7-30下面是2021-7-30到2022-7-30改进后 加入动态EMA和止盈止损 15mink线USDT的2023.8.30-2024.8.30的结果下面是2022-7-30到2023-7-30下面是2021-7-30到2022…

决策论——决策模型三要素精解

运筹学中的决策论主要针对不确定环境下的决策问题,提供数学化和系统化的工具,帮助决策者在复杂情境中选择最优方案。相比一般的决策分析,运筹学更注重定量分析,借助模型、损益表等工具,将不确定性和风险因素纳入考虑。决策模式可以分为确定性、风险性和不确定性三种,每种…

Cisco Modeling Labs (CML) 2.7.2 发布下载,新增功能概览

Cisco Modeling Labs (CML) 2.7.2 发布下载,新增功能概览Cisco Modeling Labs (CML) 2.7.2 - 网络仿真工具 思科建模实验室 (CML) 请访问原文链接:https://sysin.org/blog/cisco-modeling-labs-2/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.orgCisco Modelin…