gitlab自动化脚本

news/2025/4/2 18:45:10/文章来源:https://www.cnblogs.com/yxh168/p/18803459

命令集合

1.查看特定时间段的提交信息
timedatectl set-time "2021-10-02 13:00:00"
git log --since="2021-10-01" --before="2021-10-30" --author="张斌"
git log --until="2021-08-01"2.截取commitid创建新的分支
timedatectl set-time "2021-10-02 13:00:00"
git checkout master-base
commitid=$(git rev-list -1 --before="2021-08-01 00:00:00" HEAD)
git checkout -b master-base-temp $commitid3.合并分支
timedatectl set-time "2024-10-02 13:00:00"
git checkout master-base-temp
git merge master-base
把master-base上的提交记录合并到master-base-temp分支上4.修改最近提交记录
git commit --amend -m "初始化分支代码" --author="管理员 <yxh@.cn>" --date="2023-01-01 11:30:30"
View Code

 

excel按照日期排序脚本

import pandas as pd
import random
from datetime import datetime#每个月份都要修改一下日期
template_dir="./template.xlsx"df = pd.read_excel(template_dir,sheet_name=0,engine='openpyxl')
df_cleaned = df[pd.notna(df['完成日期'])] #删除NaT(Not a Time)的行row_list=[]
for index, row in df_cleaned.iterrows():row_list.append({"user":row[7],"giturl":row[10],"gittime":row[11],"tablename":row[12],"copydir":row[13]})tag_list=[]
for trow in row_list:if "," in str(trow["gittime"]):ttimes = trow["gittime"].split(",")else:ttimes = [trow["gittime"]]for tindex,time in enumerate(ttimes):tag_list.append({"user":trow["user"],"giturl":trow["giturl"],"tablename":trow["tablename"],"copydir":trow["copydir"],"gittime":time,"main-index":(tindex%len(ttimes))})#这里是按照list中对象的某个属性字段进行排序
sorted_list = sorted(tag_list, key=lambda x: datetime.strptime(str(x["gittime"]).replace("-","/")[:10], '%Y/%m/%d'))df = pd.DataFrame(sorted_list)# 保存Excel文件
df.to_excel("output.xlsx", index=False, engine='openpyxl')
paixu.py

 

python调用shell

import pandas as pd
from datetime import datetime
import random
import subprocessfile_tokens_path = './gitusers.xlsx'#每个月份都要修改一下日期
template_dir="./2021-07/output.xlsx"#使用pandas的read_excel函数读取Excel文件
df_tokens = pd.read_excel(file_tokens_path,engine='openpyxl')token_dict={}
email_dict={}for index,token in  df_tokens.iterrows():#token_list.append({"name":token[0],"token":token[3]})token_dict[token[0]]=token[3]if str(token[2])=="nan":email_dict[token[0]]=str(token[1])+".cn"else:email_dict[token[0]]=token[2]msg_list=[]
#2.读取提交信息列表模板
with open('./msg.txt', 'r') as file:for line in file:msg_list.append(line.strip().replace("\n", ""))row_list=[]
df = pd.read_excel(template_dir,sheet_name=0,engine='openpyxl')for index, row in df.iterrows():row_list.append({"user":row[0],"giturl":row[1],"tablename":row[2],"copydir":row[3],"gittime":row[4],"main-index":row[5]})print("本次需要提交"+str(len(row_list))+"条大记录")success=0
for index,row in enumerate(row_list):if token_dict[row["user"]]:time = str(row["gittime"])time =time.replace("/", "-")print("***************************")print(token_dict[row["user"]])print(time)print(row["giturl"])print(random.choice(msg_list))print(row["user"])print(row["tablename"])print(str(row["main-index"]))print(email_dict[row["user"]])print(row["copydir"])print("***************************")result = subprocess.run(['sh', 'gitshell.sh', token_dict[row["user"]], time,row["giturl"],random.choice(msg_list),row["user"],row["tablename"],str(row["main-index"]),email_dict[row["user"]],row["copydir"]])if result.returncode !=0:print(row["user"]+""+time+"提交一次代码失败")with open('userfailpush.txt', 'a') as file:file.write(row["user"]+"     "+token_dict[row["user"]]+"     "+row["giturl"]+"  "+time+"   "+str(success)+"/"+str(totalpushs)+"\r\n")else:print(row["user"]+""+time+"成功提交一次代码")success=success+1print("\033[91m成功提交第"+str(success)+"/"+str(len(row_list))+"次代码\033[0m")else:print(row["user"]+"用户不存在")with open('soarusers.txt', 'a') as file:file.write(row["user"])
print("本次任务一共提交"+str(success)+"条记录")
pyexcel.py

 

shell操作git接口

#!/bin/bash################################################
#提交月代码
###############################################token=$1
time=$2
gitrepo=$3
gitmsg=$4
username=$5
tablename=$6
dirname=$7
emailname=$8
copydir=$9#这里需要按照项目修改
prodir="/home/admin/evan-data/csam/b-front/b-front/"
codedirs="/home/admin/evan-data/csam/b-front/"
month="2021-07"giturl=`echo "${gitrepo#https://}"`
res=https://oauth2:$token@$giturl.git
cd $prodir
git config user.name  $username
git config user.email $emailnamecodedate=$codedirs$month
trimtablename=$(echo "$tablename" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
echo "***************************"
echo "进入main-"$dirname"目录搜素文件"
echo $trimtablename
echo $codedate/main-$dirname
echo "***************************"rm -fr /tmp/gitfiles.txt
codedate=$codedirs$monthfind $codedate/main-$dirname  -name $trimtablename"*" >> /tmp/gitfiles.txtfile="/tmp/gitfiles.txt"
# 获取总行数
total_lines=$(wc -l < "$file")
current_line=1
batch=1
min_hour=8
count=0
echo "===== 开始读取文件: $file (共 $total_lines 行) ====="
while [ $current_line -le $total_lines ]; do# 生成随机批次大小(在min_batch和max_batch之间)# batch_size=$((RANDOM % (max - min + 1) + min))batch_size=$(( RANDOM % (4-1+1) + 1 ))count=$((count + 1))# 计算实际可读取的行数remaining=$(( total_lines - current_line + 1 ))if [ $batch_size -gt $remaining ]; thenbatch_size=$remainingfi# 显示批次信息printf "批次 %3d: 读取 %2d 行 (剩余: %4d/%4d)\n" \$batch $batch_size $((total_lines - current_line + 1)) $total_lines# 读取指定行范围sed -n "${current_line},$((current_line + batch_size - 1))p" "$file" | tee /tmp/gitlines.txtwhile IFS= read -r line; dotempdir=$(echo $line | sed 's#/'$month'\/main-[0-9]#/iesmp-front/'$copydir'#')dstfile=$(echo $tempdir | sed 's/\/\{2\}/\//g')mydirname=$(dirname "$dstfile")mkdir -p $mydirnamecp -r $line $mydirnamedone < /tmp/gitlines.txtgit checkout master-base-tempecho $timeecho "上一次提交的小时"$min_hour    add_hour=$((RANDOM % 2 + 1))random_hour=$((min_hour+ 1))if [ $random_hour -gt 23 ]; thenrandom_hour=23fimin_hour=$random_hour# 格式化小时,确保它是两位数(例如09而不是9)formatted_hour=$(printf "%02d" "$random_hour")# 生成随机分钟(00-59)random_minute=$((RANDOM % 60))# 格式化分钟,确保它是两位数formatted_minute=$(printf "%02d" "$random_minute")# 生成随机秒(00-59)random_second=$((RANDOM % 60))# 格式化秒,确保它是两位数formatted_second=$(printf "%02d" "$random_second")# 组合成完整的日期时间字符串(格式为YYYY-MM-DD HH:MM:SS)random_datetime="${time} ${formatted_hour}:${formatted_minute}:${formatted_second}"filename=$codedirs"msg.txt"random_line=$(shuf -n 1 "$filename")cleaned_string=$(echo "$random_line" | tr -d '[:space:]')echo $random_datetimetimedatectl set-ntp falsetimedatectl set-time "$random_datetime"git add .git commit -m $cleaned_stringecho $res# git -c http.sslVerify=false push $res master-base-tempecho "这是"$count"次提交"if [ $? -eq 0 ]; thensleep 3elseecho "git push出现异常"fi# 更新进度current_line=$((current_line + batch_size))batch=$((batch + 1))
done
gitshell.sh

 

merge分支

code_endtime="2021-05-01 00:00:00"
system_time="2021-05-01"
res="https://oauth2:M6@192.168.30.197:8090/base-repo/a.git"###################动态时间配置#####################################git config user.name "管理员"
git config user.email "yxh@.cn"git branch -D merge-dev
timedatectl set-time "$system_time 12:30:00"
git checkout master-dev
commitid=$(git rev-list -1 --before="$code_endtime" HEAD)
echo $commitid
git checkout -b merge-dev $commitid
git checkout master-base
git merge merge-dev --no-edit
git -c http.sslVerify=false push $res master-base
echo "成功merge分支并推送master-base分支"
View Code

 

实现git操作脚本化

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web前端入门第 23 问:CSS 选择器的优先级

任何地方都存在阶级,CSS 选择器也不例外,也会讲一个三六九等。选择器类别通配符选择器 标签选择器 类选择器 ID选择器 属性选择器 伪类选择器 伪元素选择器 关系选择器流传已久的阶级划分选择器 权重继承父标签的样式、* 通配符选择器 0,0,0,0标签选择器 0,0,0,1类选择器、属…

掌握设计模式--状态模式

状态模式(State Pattern) 状态模式(State Pattern)是一种行为设计模式,它允许对象在其内部状态改变时改变其行为,看起来像是改变了其类。这种模式通常用于解决对象在运行时状态多变且行为复杂的问题。 核心思想:将状态与行为绑定,每种状态对应一个具体类有独立的行为逻…

MySQL 主从复制:数据库的克隆军团

MySQL 主从复制:数据库的"克隆军团" 👯‍♂️ 如果说数据库世界也有科幻电影,那么 MySQL 的主从复制绝对堪比《星球大战》中的克隆人军队,一个原版,无数复制品,却保持着惊人的同步... 什么是主从复制?🤔 MySQL 主从复制是一种数据库技术,允许将一台 MySQL…

必看!Spring Boot 项目新老版本 Controller 低侵入式切换实战秘籍

在当今快速迭代的软件开发环境中,项目的迁移重构是许多开发团队都绕不开的工作。最近,业务方的一个项目就面临着这样的挑战,而在迁移重构的过程中,如何确保下游系统对接无感知成为了重中之重。具体来说,他们需要实现这样一个需求:读请求访问老版本 Controller 时,能够无…

第6章 异步原理

第6章 异步原理 6.1 生成代码的结构 异步模式的实现原理是基于 状态机 的,它负责追踪 async 方法当前的执行进度。从逻辑上讲,可以分为以下 4 种状态:未启动 正在执行 暂停 完成(成功或 faulted)Eureka 这里的“暂停”,指程序运行至 await 处,任务未完成时,当前方法在此…

用Arduino开发STM32

参考文档: https://blog.csdn.net/weixin_42880082/article/details/121619101 qq:505645074

【重点】文件摆渡系统如何简化跨平台跨网络的文件传输?

在当今数字化时代,企业数据的流动性和安全性变得愈发重要。随着业务规模的扩大和全球化协作的深入,跨平台、跨网络的文件传输需求日益增长。然而,传统的文件传输方式往往面临效率低下、安全性不足、兼容性差等问题。文件摆渡系统作为一种专门设计用于简化跨平台、跨网络文件…

想让你多爱自己一些的开源计时器

我用过 Pomotroid、Reminders MenuBar、Timer 等众多优秀、开源的番茄时钟和计时工具,它们帮我更高效地管理时间,让我更专注地投入工作。 但有一个问题始终困扰着我:每当计时结束时,我总是习惯性地忽略休息提醒,继续沉浸在手头的事情中,直到第二天身体不适才追悔莫及。 最…

VMware ESXi 8.0U3d macOS Unlocker OEM BIOS 标准版和厂商定制版,已适配主流品牌服务器

VMware ESXi 8.0U3d macOS Unlocker & OEM BIOS 标准版和厂商定制版,已适配主流品牌服务器VMware ESXi 8.0U3d macOS Unlocker & OEM BIOS 标准版和厂商定制版 ESXi 8.0U3d 标准版,Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科)、Hitachi (日…

AMS1117-LDO(线性稳压器)稳压电路

AMS1117-LDO(线性稳压器)稳压电路 原理图引脚说明编号 名称 功能描述1 GND GND2 VOUT 输出3 VIN 输入4 VOUT 输出拓展C8和C7为输出滤波电容,用于抑制自激振荡。如果这两个电容不接,线性稳压器的输出通常会是一个振荡波形。 电容C5和C6是输入电容。对于交流电压整流输入,它…

Avalonia 界面效果 滚动的渐变矩形边框

本文将和大家介绍一个 Avalonia 界面效果,制作一个滚动的渐变矩形边框本文代码基于 Avalonia 11.2.x 版本实现,预期在其他 Avalonia 版本也能正常使用 本文效果由 晓嗔戈 提供,我只是记录此实现方法的工具人 界面效果如下图所示,录制的gif中颜色存在一些偏差,动画有些卡顿…

Avalonia 界面效果 三个圆实现模糊界面动效背景

本文将和大家介绍一个 Avalonia 动效界面效果,由三个圆带模糊效果实现的模糊界面动效背景,适合用在各种 AIGC 主题的应用里面本文代码基于 Avalonia 11.2.x 版本实现,预期在其他 Avalonia 版本也能正常使用 本文效果由 晓嗔戈 提供,我只是记录此实现方法的工具人 界面效果如…