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

六个仓库合并为一个仓库,保留master和develop分支的bat脚本

利用git subtree可以实现多个仓库合并为一个仓库,手动操作起来太麻烦了,今天花了点时间写了一个可执行的脚本,现在操作起来就方便多了。

1、本地新建setup.bat文件

2、用编辑器打开(我用的是Notepad++)

3、把下面代码复制进去

下面是六个代码仓库(在远程仓库,需要拉取)拉取合并为一个仓库的脚本,根据实际情况修改合并后目录、仓库地址等

@echo off
setlocal enabledelayedexpansion:: 1. 强制清理旧目录
:: project-dir是合并后目录
set projectdir=project-dir
rd /s /q %projectdir% 2>nul
mkdir %projectdir%
cd %projectdir%:: 2. 初始化仓库并创建 master 分支
git init
git commit --allow-empty -m "Initial empty commit (master)":: 3. 添加子项目远程仓库
:: 目录和仓库地址都是虚假替代的
git remote add dir1 https://gitee.com/3539949703/dir1.git
git remote add dir2 https://gitee.com/3539949703/dir2.git
git remote add dir3 https://gitee.com/3539949703/dir3.git
git remote add dir4 https://gitee.com/3539949703/dir4.git
git remote add dir5 https://gitee.com/3539949703/dir5.git
git remote add dir6 https://gitee.com/3539949703/dir6.git:: 4. 定义子项目列表
set "subprojects=dir1 dir2 dir3 dir4 dir5 dir6":: 5. 在 master 分支添加子项目的 master 分支
for %%i in (%subprojects%) do (git subtree add --prefix=%%i %%i master --squash
):: 6. 创建 develop 分支
git checkout --orphan develop
git reset --hard
:: 确保 develop 分支有初始提交
git commit --allow-empty -m "Initial empty commit (develop)":: 7. 添加子项目的 develop 分支
for %%i in (%subprojects%) do (git subtree add --prefix=%%i %%i develop --squash
)endlocalpause

4、打开Git Bash客户端,执行./setup.bat,就完成合并为一个仓库的任务。


5、查看了下提交的代码,做了两次commit提交,感觉git commit --allow-empty -m "Initial empty commit (master)"git commit --allow-empty -m "Initial empty commit (develop)"这两次提交没有必要,所以更新了下合并脚本,如下:

@echo off
setlocal enabledelayedexpansionset projectdir=maven-project
cd %projectdir%set "subprojects=dir1 dir2 dir3 dir4 dir5 dir6":: 更新 master 分支
git checkout master
for %%i in (%subprojects%) do (:: 强制重置子项目目录git checkout HEAD -- %%i:: 强制拉取远程代码(丢弃本地修改)git subtree pull --prefix=%%i %%i master --squash --force
):: 更新 develop 分支
git checkout develop
for %%i in (%subprojects%) do (:: 强制重置子项目目录git checkout HEAD -- %%i:: 强制拉取远程代码(丢弃本地修改)git subtree pull --prefix=%%i %%i develop --squash --force
)endlocalpause

6、合并后,同事又继续提交代码到旧仓库,所以就又写了一个更新代码的脚本,命名为update.bat,源码放在下面,执行步骤跟setup.bat一样,不赘述了。

@echo off
setlocal enabledelayedexpansionset projectdir=ewp-cloud
cd %projectdir%set "subprojects=dir1 dir2 dir3 dir4 dir5 dir6":: 更新 master 分支
git checkout master
for %%i in (%subprojects%) do (:: 强制重置子项目目录(丢弃本地修改)git checkout HEAD -- %%i:: 拉取远程代码(去掉 --force)git subtree pull --prefix=%%i %%i master --squash
):: 更新 develop 分支
git checkout develop
for %%i in (%subprojects%) do (:: 强制重置子项目目录(丢弃本地修改)git checkout HEAD -- %%i:: 拉取远程代码(去掉 --force)git subtree pull --prefix=%%i %%i develop --squash
)endlocalpause

在这里插入图片描述

相关文章:

  • Linux启动自动运行sh文件(可控制启动顺序)
  • git 入门使用教程
  • 路由器NAT回流踩坑
  • 黑电平校正(Black Level Correction, BLC)算法
  • ai说什么是注解,并以angular ts为例
  • 基于 by 组态的智能工厂设备运行实时监控系统
  • OrangePi Zero 3学习笔记(Android篇)2 - 第一个C程序
  • 政务浏览器 一站式首页功能配置说明
  • JavaScript ES6+ 最佳实践
  • 【DB2】DB2启动失败报错SQL1042C
  • 2025-05-07 Unity 网络基础7——TCP异步通信
  • 什么是声明式UI什么是命令式UI?鸿蒙ArkTS为什么是声明式UI-优雅草卓伊凡
  • 智算中心基础设施0-1建设全流程及投产后的运维
  • 融合静态图与动态智能:重构下一代智能系统架构
  • CPU-GPU-NPU-TPU 概念
  • 【HarmonyOS 5】鸿蒙Web组件和内嵌网页双向通信DEMO示例
  • Feign 重试策略调整:优化微服务通信的稳定性
  • PAT(最近)
  • 商汤科技前端面试题及参考答案
  • 如何避免项目结束后知识流失
  • 见微知沪|科学既要勇攀高峰,又要放低身段
  • 习近平向第三十四届阿拉伯国家联盟首脑理事会会议致贺信
  • 中国首艘海洋级智能科考船“同济”号试航成功,可搭载水下遥控机器人
  • 阿里上财年营收增6%,蒋凡:会积极投资,把更多淘宝用户转变成即时零售用户
  • 陕西三原高新区违法占用土地,被自然资源局罚款10万元
  • 讲座预告|以危机为视角解读全球治理