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

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

1、本地新建setup.bat文件

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

3、把下面代码复制进去

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

powershell 复制代码
@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
)

endlocal

pause

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)"这两次提交没有必要,所以更新了下合并脚本,如下:

powershell 复制代码
@echo off
setlocal enabledelayedexpansion

set 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
)

endlocal

pause

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

powershell 复制代码
@echo off
setlocal enabledelayedexpansion

set 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
)

endlocal

pause
相关推荐
小龙11 小时前
【Git 报错解决】本地无有效提交无法推送(`src refspec main does not match any`)
git·github·报错
小扶苏11 小时前
删除git全局账号信息并设置成新的账号密码命令
git
Greg_Zhong13 小时前
Git创建任务分支进行开发,最后合并主分支master【纯git命令执行过程】阐述
git
眯眼因为很困啦15 小时前
GitHub Fork 协作完整流程
前端·git·前端工程化
AlexDeng17 小时前
Git 中模糊搜索分支名称并创建本地跟踪分支
git
期货资管源码19 小时前
外盘期货资管分仓软件源码搭建教程
大数据·源代码管理
jxm_csdn20 小时前
递归工程工厂:Claude Code + Git Worktrees + Tilix/Tmux 的“AI分身”编码团队
人工智能·git
码咔吧咔20 小时前
Git 中 pull.rebase = true 的作用与设置方法详解
git
郑州光合科技余经理1 天前
开发实战:海外版同城o2o生活服务平台核心模块设计
开发语言·git·python·架构·uni-app·生活·智慧城市
我是海飞1 天前
Git 本地仓库推送到远程空仓库指南
大数据·git·elasticsearch