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

六个仓库合并为一个仓库,保留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

在这里插入图片描述

http://www.xdnf.cn/news/4516.html

相关文章:

  • llama-Factory不宜直接挂接Ollama的大模型
  • 互联网大厂Java求职面试:分布式系统中向量数据库与AI应用的融合探索
  • FastDFS,分布式文件存储系统,介绍+配置+工具类
  • upload-labs靶场通关详解:第一关
  • 远程访问代理+内网穿透:火山引擎边缘网关助力自部署模型公网调用与全链路管控
  • 阿维塔汽车CAN总线数据适配技术解析与免破线数据采集实践
  • 模型中台建设全流程指南
  • [逆向工程]什么是 Process Explorer
  • 智慧系统搭建平台有哪些?2025智慧系统搭建平台推荐?智慧系统搭建平台TOP10全面解析
  • ERP源码?ERP系统是什么?能够解决什么问题?
  • 使用 Python 与 Java 实现接入 AI 大模型的 MCP 协议:原理与实战
  • 「动态规划」线性DP:股票问题合集 / LeetCode 121|122|123|188 (C++)
  • 密码学基石:哈希、对称/非对称加密与HTTPS实践详解
  • Charles 如何高效监控特定域名
  • BGP路由反射器
  • Linux 内核对 ARM 大小核架构的支持
  • B树如何用于磁盘 ,B+树为如何用于数据库
  • 源雀SCRM开源·AI企微客服|RAG知识中枢+自训练闭环
  • 汽车生产DV与PV验证
  • MongoDB培训文档大纲(超详细)
  • 基于大模型的子宫平滑肌瘤全周期预测与诊疗方案研究
  • 第4章 递推法
  • 动态规划之完全背包
  • C++ -- 哈希扩展
  • 探索智能仓颉:Cangjie Magic开发体验
  • 电子电器架构 --- 网关释放buffer的必要性
  • 紫光展锐全新奇迹手游引擎,开启游戏“芯”时代
  • 安卓工程build.gradle中的Groovy的常见知识点
  • linux_进程地址空间(虚拟地址空间)
  • 【背包dp----01背包】例题三------(标准的01背包+变种01背包1【恰好装满背包体积 产生的 最大价值】)