Git 仓库拆拆拆

程序员最爽的事情是什么?删删删!所有项目本来都很苗条的,时间长了难免有一些越搞越大,怎么看怎么不爽,一个字,拆!今天就说说拆分 Git 仓库这件小事儿。

这个拆字呢,有两种写法,比如你有一个叫做 big-project 的仓库,目录如下:

big-project
 ├── codes-a
 ├── codes-b
 └── codes-eiyo

有时候想把 codes-eiyo 拆出来做为一个独立仓库;有时候是想把 codes-eiyo 清理掉,只保留剩下的代码在仓库中。现在就来分别看看这两件事情怎么干:

拆分一个子目录为独立仓库

以前是用 filter-branch 来实现,这个需求太常见了,有人做了个整合的 git-subtree,再后来……subtree 集成进 Git 了。

# 这就是那个大仓库 big-project
$ git clone git@github.com:tom/big-project.git
$ cd big-project

# 把所有 `codes-eiyo` 目录下的相关提交整理为一个新的分支 eiyo
$ git subtree split -P codes-eiyo -b eiyo

# 另建一个新目录并初始化为 git 仓库
$ mkdir ../eiyo
$ cd ../eiyo
$ git init

# 拉取旧仓库的 eiyo 分支到当前的 master 分支
$ git pull ../big-project eiyo

清除一个子目录下所有内容和记录

这个还是要用万能的 filter-branch

bash# 还是那个大仓库 big-project
$ git clone git@github.com:tom/big-project.git
$ cd big-project

# 清理 `master` 分支上所有跟 `codes-eiyo` 目录有关的痕迹
$ git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch codes-eiyo" --prune-empty master

# 另建一个新目录并初始化为 git 仓库
$ mkdir ../big-project-fresh
$ cd ../big-project-fresh
$ git init

# 拉取 `big-project` 的 `master` 分支(到新仓库的 master 分支)
$ git pull ../big-project master

Before & After

记得用 count-objects 命令比较新旧仓库的差异(爽爽爽):

bash$ git count-objects -vH

接下来要推送给新的远端仓库什么的就随你便了~

bash$ git remote add origin git://github.com:tom/fresh-project.git
$ git push origin -u master

Coding Amio
哎哟……

The way we code the web will determine the way we live online. So we need to bake our values into...

1.3k 声望
61 粉丝
0 条评论
推荐阅读
无服务器架构(Serverless Architectures)(上)
无服务器架构(Serverless architectures)是指一个应用大量依赖第三方服务(后端即服务,Backend as a Service,简称“BaaS”),或者把代码交由托管的、短生命周期的容器中执行(函数即服务,Function as a Servi...

Amio7阅读 4.9k

Git操作不规范,战友提刀来相见!
年终奖都没了,还要扣我绩效,门都没有,哈哈。这波骚Git操作我也是第一次用,担心闪了腰,所以不仅做了备份,也做了笔记,分享给大家。问题描述小A和我在同时开发一个功能模块,他在优化之前的代码逻辑,我在开...

王中阳Go5阅读 2.3k评论 2

封面图
Git 入门与实践
Git 入门与实践推荐:猴子都能懂的 GIT 入门Git --everything-is-loca 官方文档Git 教程-廖雪峰Git 的使用方式有很多。图形化 —— 小乌龟(Tortoise Git )、命令行—— git bash、IDE 集成等 ......目录1. 基础配置...

RainBow1阅读 2.2k

openKylin 0.9.5版本正式发布,加速国产操作系统自主创新进程!
2023年1月12日,中国桌面操作系统根社区openKylin(开放麒麟)正式发布openKylin 0.9.5操作系统版本。此版本充分适应5G时代需求,打通平板,PC等设备,实现多端融合,弥补了国产操作系统的短板,有效推动国产操作...

openKylin6阅读 7.4k

封面图
SegmentFault 思否技术周刊 Vol.78 — Git 必看技术补给
Git 的诞生是一个非常有趣的故事。1991年 Linus 开源了 Linux 内核,无数 Linux 爱好者在世界各地为 Linux 编写代码,那么问题来了,这些代码该如何管理呢?起初 Linus 使用 BitKeeper(BitMover 公司的版本控制软...

Beverly3阅读 1.5k

封面图
openSSH升级公钥失效Permission denied (publickey)解决方案
背景centos系统升级openSSH后,服务器上无法再拉取代码,报错如下:原因服务器重新安装SSH后公钥改变,需要重新安装ssh-keygen -t rsa -C "邮箱地址"生成公钥,删除gitlab原有公钥,但是git pull依然报错如下:依...

兰俊秋雨2阅读 1.3k

Git 分支管理策略汇总
我大概说了一些规则,但仔细想来,好像也并没有形成一个清晰规范的流程。所以查了一些资料,总结出下面这篇文章,一共包含四种常见的分支管理策略,分享给大家。

alwaysbeta3阅读 931

封面图

The way we code the web will determine the way we live online. So we need to bake our values into...

1.3k 声望
61 粉丝
宣传栏