个人博客https://www.yotroy.cool/,感谢关注~
图片资源可能显示不全,请前往博客查看哦!

============================================================

说来惭愧,这篇是AI帮助我解决实际问题后,又生成的一篇博客,效率特别高。

在开发中,我们常会遇到一个项目变大、拆分或者整合的需求。如果你想将一个已有 Git 提交历史的小项目(例如:bbb/)合并到另一个新的 Git 仓库(例如 GitHub 上新建的仓库 aaa),并保留其所有提交历史记录,这篇博客将为你总结完整的操作流程和注意事项。

🧩 问题背景

我本地有一个项目叫 bbb/,它是一个完整的 Git 仓库,有自己的提交历史。但我后来希望将它作为子目录的形式迁入另一个新的仓库 aaa/ 中去,也就是想要实现结构如下:

aaa/
└── bbb/     # 原项目内容在这里,保留所有 commit 历史

但是直接复制粘贴代码会丢失原始提交历史记录;而直接合并 .git 会导致仓库结构错乱。


🧪 我遇到的问题

一开始,我使用了 git filter-repo 来把项目目录转换成子目录的历史,但目录嵌套出现了问题,执行完:

python -m git_filter_repo --to-subdirectory-filter bbb --force

之后,目录变成了:

bbb/bbb/your-files...

也就是说,子目录又包了一层自己的名字,导致整个目录嵌套了一层,不符合我的预期。


✅ 正确的操作流程

以下是正确的迁移流程,总结如下:


📁 假设目录结构如下

/your-path/
├── bbb/   # 原项目,有完整 Git 历史

🔨 步骤 1:在 GitHub 上创建新仓库 aaa

比如:

  • 仓库名:aaa

  • GitHub 地址:git@github.com:yourname/aaa.git


🧪 步骤 2:在 bbb 目录中运行 git filter-repo

需要安装 git filter-repo ,教程可查看附录。

这一步会把整个项目的 Git 历史“包裹进” bbb/ 子目录中:

cd bbb
python -m git_filter_repo --to-subdirectory-filter bbb --force

执行完后,项目结构会变成:

bbb/
└── bbb/└── your-original-code...

(此时你的代码被包进了 bbb/


🧼 步骤 3:整理目录结构(可选)

这里你需要把 bbb/bbb/ 中提交的数据拉回到 bbb/ 中。


🌐 步骤 4:推送到远程仓库(aaa)

  1. 初始化 GitHub 仓库(如果还没 init 的话):

    git remote add origin git@github.com:yourname/aaa.git
    
  2. 推送代码及其历史记录:

    git push -u origin main
    

如果你当前分支不是 main,请先切换:git checkout -b main


🎉 最终效果

在 GitHub 上打开 aaa 仓库,你将看到代码出现在 bbb/ 子目录中,且每一次提交都被完整保留。


📎 附录:如何安装 git_filter_repo

git_filter_repo 是一个替代 git filter-branch 的高效工具,用于重写 Git 历史。由于它不是 Git 默认安装的一部分,我们需要手动安装。

✅ 方法一:通过 pip 安装(推荐)

适合大多数开发者,只需要有 Python 环境即可。

pip install git-filter-repo

安装后,你可以通过以下方式使用:

python -m git_filter_repo --help

⚠️ 注意:如果你运行 git filter-repo 报错(如 “git: ‘filter-repo’ is not a git command”),说明你的环境变量中没有自动添加别名,建议直接使用:

python -m git_filter_repo ...

✅ 方法二:手动安装脚本并加入 Git 命令目录(进阶)

适合想直接使用 git filter-repo 命令的用户:

  1. 前往 GitHub 下载脚本:

    👉 https://github.com/newren/git-filter-repo

  2. 下载 git-filter-repo.py 文件,重命名为 git-filter-repo(无后缀)

  3. 将该文件放入 Git 的执行目录中,例如:

    C:\Program Files\Git\mingw64\libexec\git-core\

  4. 确保该目录在系统环境变量 PATH 中

完成后,即可直接使用任一命令:

git filter-repo ...
python -m git_filter_repo ... //或使用Python命令

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

91套商业策划创业融资计划书PPT模版

创业融资计划书PPT模版,商业项目技术书PPT模版,商业创业计划书,商业融资企业宣传PPT模版,活动策划方案书PPT模版,IOS风格商业计划书PPT模版 91套商业策划创业融资计划书PPT模版:https://pan.quark.cn/s/739…

探秘阿里云通义九子:解锁AI无限可能

通义九子初印象在当今人工智能飞速发展的时代,阿里云通义九子宛如一颗璀璨的明星,闪耀在 AI 的浩瀚天空中。作为阿里云推出的一系列强大的人工智能模型,通义九子在自然语言处理、图像生成、智能客服等多个领域展现出了卓越的能力,…

Python网络爬虫之requests库

目录 一.网络爬虫的介绍 1.网络爬虫库 2.robot.txt规则 二.requests库 1.requests库的安装 2.get()函数 3.Response对象 Response的属性 设置编码 返回网页内容 text() content() 三.提交信息到网页 post()函数 四.会话与代理服务器 一.网络爬虫的介绍 1.网络爬虫…

区块链技术详解:从原理到应用

引言 区块链作为一项颠覆性技术,已从加密货币的基石演变为重塑多个行业的创新引擎。本文旨在深入解析其核心原理、关键特性、技术架构、主流应用及未来挑战。一、 区块链核心概念:超越加密货币的分布式账本 本质定义: 区块链是一个去中心化、…

用Finalshell连接服务器后出现文件目录不显示,且刷新报错空指针问题记录

修改SSH配置‌编辑sshd_config‌使用管理员权限编辑/etc/ssh/sshd_config文件,找到Subsystem相关配置。原配置为Subsystem sftp /usr/libexec/openssh/sftp-server使用“i”编辑文件将修改为Subsystem sftp internal-sftp修改完成后使用Esc命令,退出编辑…

C语言:游戏代码分享

小游戏分享 目录 小游戏分享 1.井字棋游戏 2.简单计算器游戏 3.猜单词 4.石头剪刀布游戏 5.猜数字游戏 1.井字棋游戏 「33 棋盘上的思维博弈!与好友轮流落子,抢占先机,连成一线即可获胜。简单规则蕴含无限策略,展现你的战术…

深度学习入门-卷积神经网络(CNN)(下)

1-4、 深度学习入门-卷积神经网络(CNN)(上)-CSDN博客 5、 卷积神经网络(CNN)的实现 简单网络的构成是“Convolution - ReLU - Pooling - Affine - ReLU - Affine - Softmax”: 相关代码&#…

Java 大视界 -- Java 大数据在智能交通智能公交站台乘客流量预测与服务优化中的应用(349)

Java 大视界 -- Java 大数据在智能交通智能公交站台乘客流量预测与服务优化中的应用(349)引言:正文:一、Java 全场景韧性调度系统(新增极端天气 车型适配)1.1 极端天气:暴雪 / 台风的分钟级响应…

数论内容主要包括哪些

数论(Number Theory)是数学中研究整数的性质及其相互关系的一个分支,被誉为“数学中的皇后”。它历史悠久,内容丰富,既包含许多初等、直观的问题,也涉及高深、抽象的理论。数论的主要内容包括以下几个方面&…

springboot打包二次压缩Excel导致损坏

springboot打包二次压缩Excel导致损坏开发时,将Excel文件放到resources下,通过类加载器流读取,返回api用于下载该Excel文件。我发现这样下载的Excel被损坏了,无法打开,推测是springboot打包插件默认对resources下的所有…

huggingface笔记

1. huggingface的下载目录 ~/.cache/huggingface 2. 如何修改hugging face的模型默认下载地址 huggingface的默认下载路径在~/.cache/huggingface/hub/,但模型数据占用空间往往很大,可以用以下方法修改默认下载路径。 方法一:在linux中指定环…

Redis3:Redis数据结构与命令全解析

目录 1、redis数据结构介绍 1.1命令学习方式 1.1.1命令行查询 2、redis的通用命令 2.1查找常见的通用命令 2.2常见的通用命令: 3、String类型 3.1String类型的常见命令 3.2Key的层级格式 3.2.1Key的结构 4、Hash类型 4.1Hash类型 4.2Hash类型常见命令 …

WebSocket 重连与心跳机制:打造坚如磐石的实时连接

在现代 Web 应用中,WebSocket 是实现实时通信的核心技术。但网络环境复杂多变,如何确保连接稳定成为关键挑战。本文将深入剖析 WebSocket 的重连与心跳机制,提供一套经过生产环境验证的解决方案。 一、WebSocket 基础封装 首先我们实现一个具…

【代码】Matlab鸟瞰图函数

用matlab把图像转化为鸟瞰图 代码 clc clear close all I imread(road.png); figure(1) imshow(I) bevSensor load(birdsEyeConfig); birdsEyeImage transformImage(bevSensor.birdsEyeConfig,I); figure(2) imshow(birdsEyeImage)效果

网络编程-java

Socket 套接字 Socket套接字,是由系统提供用于网络通信的技术,是基于 TCP/IP 协议的网络通信的基本单元。基于 Socket 套接字的网络程序开发就是网络编程。 应用层会调用操作系统提供的一组 api ,这组 api 就是 socket api(传输层…

CPU架构、三级缓存以及内存优化屏障

目录 一、三级缓存和内存布局 二、CPU架构 (1)SMP对称对处理器架构 (2)NUMA非统一内存架构 三、RCU机制在内核中的体现 四、内存优化屏障 (1)编译器、CPU优化 (2)优化的问题…

HarmonyOS从入门到精通:动画设计与实现之九 - 实用动画案例详解(下)

HarmonyOS动画开发实战(九):实用动画案例详解(下) 在上篇中,我们围绕加载动画、点赞反馈、下拉刷新等核心交互场景,探讨了如何通过动画提升用户体验。本篇将聚焦界面元素动效与特殊场景动画&…

Node.js 聊天内容加密解密实战教程(含缓存密钥优化)

一、技术方案说明 本方案采用以下技术组合: 加密算法:AES-256-GCM(认证加密,防止篡改)密钥派生:PBKDF2(10万次迭代)缓存机制:内存缓存 定期轮换安全特性:随机…

信息安全基础专业面试知识点(上:密码学与软件安全)

密码学DES加密流程56比特长度的密钥K, 分组长度64比特,密文64比特初始置换 (IP):将输入的64位明文块进行置换,打乱其顺序。分成左右两半: 将置换后的64位数据分成左右两部分,每部分32位。16轮迭代加密: 这是DES的核心&#xff0c…

Windows Server 2025 黄金dMSA攻击漏洞:跨域攻击与持久化访问风险分析

网络安全研究人员近日披露了Windows Server 2025中委托管理服务账户(dMSA,Delegated Managed Service Accounts)存在的"关键设计缺陷"。据Semperis公司向The Hacker News提供的报告显示:"该漏洞可能导致高危害攻击…