[GIT] GIT拆分仓库--不丢git提交历史记录

news2024/11/24 20:58:31

背景

如果你的代码仓库里有多个目录,你想把其中一个目录拆分出去变成一个独立的代码仓库。重要的一点是拆分的过程中要保留git提交历史记录。

拆分步骤

1. 检查一下你的 repo 的根目录中。

进入根目录后,快速运行 ls 终端命令以确保列出所有子目录。

利用命令 git log 或 git log --onelist |wc  查看你的提交的信息和提交了多少条。

2.检查你在master分支

假设您要拆分 master 分支。 如果不是,请确保您在正确的分支中。

在您的终端中写入 git branch 以确保您位于 master 分支中。

3.退出根目录

从根目录开始,cd .. 返回上一级,直到您位于根目录的上一级。

4. 将原始的repo的目录移动到新目录

在您的终端输入下面命令。 我们这样做是因为我们即将重写您的回购历史。

mv [your root directory]/ [your root].orig

这是前两个步骤对于我的 repo 的样子,其中原始名为“bookclub-full-app”

如果你在你的电脑上查看你的文件,你会看到这个 repo 已经在本地更改了它的名字。 在 Mac 上,这是在“Finder”中

5. Clone你的repo

确保你在新重命名的目录之上(提示:如果你还没有 cd 到任何地方,你应该已经在那里了!)。

再次clone你的 repo:使用 git clone [insert repo url here]

通过快速 ls 检查并确保两者都已列出来仔细检查您是否拥有这两个回购协议。 在我的例子中,我会有 bookclub-full-app 和 bookclub-full-app.orig。

6. 确定要拆分的目录。

cd 到你新 clone 的 repo(不是 .orig)。 您应该回到根目录,您将在其中看到存储库中所有文件和目录的列表。 在我的例子中,我列出了相同的三个子目录:

确保位于根目录后,执行以下命令:

git filter-branch --prune-empty --subdirectory-filter [name of subdirectory you want to create a new repo for] -- master

在我的例子中,它看起来像这样只得到我的后端:

filter-branch 是主要的 git 命令,用于从根目录中拆分子目录。

subdirectory-filter就是我们用来表示我们要拆分到哪个子目录的,所以你直接在这个后面写你的子目录名。

— 最后的 master 显示了我们想要对其进行操作的提交。

最终,这将改写历史。 您可能会收到有关陷阱的通知,请稍等,它会在几秒钟后完成。

7.确保您已正确重写子目录及其历史记录

如果您现在键入 ls,您将看到过滤分支的子目录列表,而不是原始子目录。

我们从这个到这个:

如您所见,您的新根目录包含您想要在其自己的存储库中的所有文件。 您可以通过键入 git log 来测试它,以确保它保留了所有 git 历史记录。

8.删除对原始存储库的远程引用

确保您位于新的根目录中,键入 git remote remove origin。 如果您收到有关其他分支的警告,则可以忽略。

9. 添加新的存储库引用

您需要在 GitHub 上创建一个新的存储库并复制 url 链接来执行此操作。 准备好 url 后,执行

git remote add origin [new repo url]

10. 将所有文件推送到新存储库

git push --all 
git push --tags

11. clone 你的新的repo,来检查

cd ..
git clone [new repo url] [insert new repo name]

问题

如果你的新的repo里面readme或git等文件。这些文件是你建这个repo自带的,这个时候你不能直接push --all, 你要先执行下面的命令,再push

git pull --allow-unrelated-histories

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ruoyi-vue版本框架(二)源码目录结构的讲解,与底层子项目的讲解

目录1 目录介绍2 ruoyi-common 子项目3 ruoyi-system 子项目4 配置文件5 ruoyi-framework6 数据库表7 druid 监控1 目录介绍 下载下来源码,后端一共有6个模块 其中 rouyi-admin这个子项目是整个若依框架的web项目,也就是我们要启动的后台就是这个子项目…

Django 第五章RESTFramework(DRF)框架初探以及认识serializers序列化器的增删改查

定义 Django REST framework (简称 DRF) 是一个强大灵活的wb api工具 功能完善,可快速开发api平台 官网地址 https://www.django-rest-framework.org/安装要求 pip3 install django3.2 pip3 install djangorestframework1.0 使用drf实现用户的增删改查 1.创建ap…

influxdb问题: unable to create database ‘mydb‘ 与 failed to send metrics to influx

[influx-metrics-publisher] ERROR i.m.i.InfluxMeterRegistry - [createDatabaseIfNecessary,117] - unable to create database mydb; [influx-metrics-publisher] ERROR i.m.i.InfluxMeterRegistry - [publish,161] - failed to send metrics to influx现象解决方…

Spring REST风格

REST(Representational State Transfer),表现形式状态转换,它是一种软件架构风格。 当我们想要表示一个网络资源时,传统方式通常是用一个请求url表示一个操作。这样既不方便,也不安全,因为操作对于用户是透…

精要速览 | PacBio三代全长扩增子测序的多方向研究应用进展

随着测序技术的不断发展,组学研究愈加深入。在微生态研究领域,受限于二代测序读长的扩增子测序技术,迎来了“解放式”全面发展优化的三代测序时代——PacBio全长扩增子测序的优势逐渐显现:凭借其超长读长,高准确率&…

独立产品灵感周刊 DecoHack #044 - 新的一年如何管理你的时间

本周刊记录有趣好玩的独立产品设计开发相关内容,每周发布,往期内容同样精彩,感兴趣的伙伴可以点击订阅我的周刊。为保证每期都能收到,建议邮件订阅。欢迎通过 Twitter 私信推荐或投稿。本周看到了很多时间管理的工具类型产品&…

力扣中SQL刷题

小知识点 取余数:mod(数,2) 取第一个字母:left(name,1) 或者name like ‘M%’ 196. 删除重复的电子邮箱 题型:删除列A中重复的记录,指保留列B最小的那一行记录 答案:delete t1 from 表名 t1,表名 t2 where t1.列At2…

测试——自动化测试(Selenium工具)

目录 一、自动化测试的概念以及分类 二、Selenium—web自动化测试工具 1、自动化测试的一些前置工作 2、第一个自动化实例 3、总结​编辑 三、 Selenium常用方法 定位元素的方法 元素的操作 等待 强制等待(待补充) 隐式等待(待补充&…

【python】python绘制相关性热力图

1.介绍 热力图(heatmap),又称相关系数图,根据热力图中不同方块颜色对应的相关系数的大小,可以判断出变量之间相关性的大小。热力图通过对色块着色来显示数据的统计图表。绘图时,需指定颜色映射的规则。例如…

从运营小程序到实现数字化生态闭环还差几步?

近年来,不少企业纷纷开始关注小程序的开发。对于用户来说,小程序最大的好处就是能够即点即用,体验便捷。不知你是否发现,小程序经济已经开始制约中小企业的服务与合作。 对于一般的中小企业乃至大企业里没有什么IT预算的部门&…

缺省参数!C++教你如何成为一名优秀的舔狗

👑专栏内容:C学习笔记⛪个人主页:子夜的星的主页💕座右铭:日拱一卒,功不唐捐 目录一、前言二、缺省参数1、缺省参数的定义2、缺省参数的分类Ⅰ、全缺省参数Ⅱ、半缺省参数三、注意事项1、直给中间的参数传参…

Docker中的容器命令

1、新建启动容器 docker run 镜像名 参数: -it 启动前台一个交互的终端 --name 启动容器后,赋予容器一个名字 -d: 后台运行容器,并返回容器ID,也即启动守护式容器; -P: 随机端口映射; -p: 指定端口映…

Svelte框架实现表格协同文档

首先,从框架搭建上,本篇示例采用当下流行的前后端分离的开发方式,前端使用npm作为脚手架搭建Svelte框架。 后端使用Java的SpringBoot作为后端框架。 首先,介绍下在前端Svelte框架下搭建在线表格编辑器。 1、在pageage.json文件中引入相关资源…

ANR问题分析

ANR概念 anr是指应用程序无响应,Android系统对于一些事件需要在一定时间范围内完成,如果超过预定时间未能得到有效响应或者响应时间过长,都会造成anr。通常发生anr时,系统会弹出一个提示框,让用户知道,该程…

AppScan介绍和安装

第一节-AppScan介绍和安装 1.简介 Appscan 10中文版是是全新网络安全漏洞扫描软件,软件可以直接可以对OS命令、SSRF和XXE攻击等漏洞进行检测,使得漏洞检测更加容易,提高漏洞的扫描效率。软件同时支持动态、静态、互动分析三种不同的测试功能…

OVN实验----NAT

概述 在L2互通、L3互通实验基础上通过NAT实现访问公网。 架构图如下, 这里两台逻辑路由器LR1和GLR是通过一台逻辑交换机LSjoin互连的, GLR和物理网络设备通过LSlocal相连。 物理拓扑 如上一个实验OVN实验----L2互通 逻辑拓扑 配置 开始实验前先检查…

设计模式之装饰者模式

装饰者模式 定义 先上定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式。 优缺点 优点: 1,装饰器是继承的有力补充,比继承灵活,在不改…

【进阶C语言】文件操作

文章目录一.文件1.文件的功能2.文件的分类3.文件路径绝对路径相对路径4.文件信息区5.文件缓冲区6.流的概念7.输入输出二.文件函数1.打开与关闭文件打开文件——fopen返回类型参数关闭文件——fclose返回类型参数2. 顺序读写1.输入输出字符输入字符函数——fgetc返回类型函数参数…

新享科技UniPro将敏捷理念数字化 助力企业迎接2023

2023年新年伊始,“复苏”和“希望”成了越来越多国内企业和消费者的直接感受,与此同时,国际经济也从疫情中缓慢“恢复”过来,特斯拉在中国区掀起了新一轮降价风潮,而行业“销冠”比亚迪却高调发布了百万级新车。如同晴…

websocket显示实时消息

websocket实现实时消息展示 前面介绍过websocket聊天功能的实现,不清楚的可以先看下 websocket实现在线聊天 https://blog.csdn.net/qq_51076413/article/details/124644500 之前发过websocket的相关使用和一对一聊天的demo代码,这里是针对上几篇文章的补充&#x…