当前位置: 首页 > news >正文

将Git项目的所有远程分支打包成压缩包文件

创建文本文件package_all_branches_fixed.sh,输入以下脚本内容,修改项目名称、项目git地址,并保存。

#!/bin/bash# === 需要修改的配置部分 ===
PROJECT_NAME="项目名称"
ORIGIN_REPO="项目git地址"
OUTPUT_DIR="branches_packages"# === 脚本主体 ===
echo "=== 开始处理GitLab项目所有分支打包 ==="# 记录当前目录
START_DIR=$(pwd)
echo "起始目录: $START_DIR"# 创建输出目录
mkdir -p "$OUTPUT_DIR"
echo "创建输出目录: $OUTPUT_DIR"# 1. 克隆原始仓库
echo "步骤1: 克隆原始仓库..."
git clone --mirror "$ORIGIN_REPO" "$PROJECT_NAME.git"if [ $? -ne 0 ]; thenecho "错误: 克隆仓库失败!"exit 1
ficd "$PROJECT_NAME.git"
MIRROR_DIR=$(pwd)
echo "已进入镜像仓库目录: $MIRROR_DIR"# 2. 获取所有远程分支并创建本地跟踪分支
echo "步骤2: 设置所有分支..."
git branch -r | grep -v '\->' | while read remote; do branch_name="${remote#origin/}"if [ "$branch_name" != "HEAD" ]; thengit branch --track "$branch_name" "$remote" 2>/dev/null || echo "分支 $branch_name 已存在或创建失败"fi
done# 3. 处理每个分支
echo "步骤3: 开始处理各个分支..."
git for-each-ref --format='%(refname:short)' refs/heads | while read branch_name; doecho "----------------------------------------"echo "正在处理分支: $branch_name"# 创建临时工作目录(使用绝对路径)temp_dir="$START_DIR/temp_${PROJECT_NAME}_${branch_name}"echo "临时目录: $temp_dir"# 如果目录已存在,先删除if [ -d "$temp_dir" ]; thenecho " - 清理已存在的临时目录..."rm -rf "$temp_dir"fi# 使用git worktree将分支检出到临时目录echo " - 创建工作树..."git worktree add "$temp_dir" "$branch_name"if [ $? -ne 0 ]; thenecho " - 错误: 创建工作树失败!"continuefi# 进入临时目录cd "$temp_dir"echo " - 当前目录: $(pwd)"# 移除.git文件夹(使其成为普通文件夹)echo " - 清理Git信息..."rm -rf .git# 创建压缩包 - 使用 tar 替代 zipecho " - 创建压缩包..."zip_file_name="${PROJECT_NAME}_${branch_name}.tar.gz"# 使用 tar 创建压缩包tar -czf "$START_DIR/$OUTPUT_DIR/$zip_file_name" .# 返回镜像仓库目录cd "$MIRROR_DIR"# 清理工作树echo " - 清理临时文件..."git worktree remove "$temp_dir" --forcerm -rf "$temp_dir"# 检查压缩包是否创建成功if [ -f "$START_DIR/$OUTPUT_DIR/$zip_file_name" ]; thenfile_size=$(du -h "$START_DIR/$OUTPUT_DIR/$zip_file_name" | cut -f1)echo "✓ 完成: $zip_file_name (大小: $file_size)"elseecho "✗ 失败: $branch_name 压缩包创建失败"fi
done# 4. 最终清理
echo "----------------------------------------"
echo "步骤4: 清理工作..."
cd "$START_DIR"
rm -rf "$PROJECT_NAME.git"
git worktree pruneecho "=== 所有分支打包完成! ==="
echo "输出目录: $OUTPUT_DIR"
echo "生成的文件:"
ls -la "$OUTPUT_DIR/"

在package_all_branches_fixed.sh文件的根目录下,右键启用Git Bash Here工具(前提是安装了git工具),执行以下命令:

chmod +x package_all_branches_fixed.sh
./package_all_branches_fixed.sh

如果项目比较大,刚开始拉取项目的过程比较慢,拉取成功之后,后面打压缩包的过程就快了。

http://www.dtcms.com/a/557181.html

相关文章:

  • 做液压的公司网站佛山网站建设格式有哪些
  • 深圳做微商网站的公司二维码生成器app
  • WebClient发送请求示例
  • Wireshark TS | 接收数据超出接收窗口续
  • mapset的使用
  • 要事优先-深耕目标
  • 禄劝彝族苗族网站建设食品 技术支持 东莞网站建设
  • 宁波市省网站建设济南工程建设交易信息网
  • 伯克利哈斯商学院的金融工程硕士(MFE)
  • 政安晨【零基础玩转开源AI项目】video-subtitle-remover 去除视频字幕水印(图像也可以)(基于Ubuntu Linux系统)
  • 温州市名城建设集团有限公司网站二级域名如何申请
  • 【C++】模拟算法习题
  • QLoRA基础知识和微调原理学习
  • 在 vscode 中配置juypter notebook 插件
  • 石家庄好用的招聘网站门户网站网站建设
  • ENERGY Designer:重构跨平台GUI开发的高效解决方案
  • 网站建设要准备什么资料wordpress回复下载
  • RabbitMQ 在拼团系统中的应用:延迟队列、订单超时与消息幂等
  • 【printpdf】color.rs 文件解析
  • Langchain4j 实战 【AI代码生成平台】:接入deepseek,开发AI服务并实现结构化输出
  • DNR6521x_VC1:革新音频体验的AI降噪处理器
  • 长沙做网站的公司哪家最好永久有效的代理ip
  • 技术准备九:FFmpeg
  • Jenkins 实战4:集群配置与分布式构建
  • 一人开公司做网站创业企业网站建设总结报告
  • android 15.0 app应用安装黑名单
  • N-158基于微信小程序学生社团管理系统
  • LeetCode算法日记 - Day 89: 最长递增子序列
  • 两学一做 网站帮别人建网站赚钱吗
  • 2025江苏省职业院校技能大赛网络系统管理赛项模块A:网络构建卷I(未公开)