这几天想要把一个 git 仓库中已经存在的一个子文件夹独立成一个新的 git 仓库,并且保留之前关于此文件夹的所有提交历史。不过我对 git 并没有这么精通,只好上网搜索之。可能是因为我关键词抓得不准,搜了好一会儿才找到可行的方案,所以写篇博文记录一下,希望能帮到后来人。
另外,在 git 里这种掌控历史的感觉真棒(笑)
0x01 需求分析
我为什么会有如本文标题所述这样的需求呢?这是因为我之前把所有为 Blessing Skin 这个程序编写的插件源码都放在一个 git repo 中了,每个子文件夹中都是一个独立的插件(因为嫌麻烦所以一股脑给塞进一个仓库里了),并且对每个子文件夹中的代码的修改最后都是在这个统一仓库中提交的。该仓库差不多长这样:
$ tree
├── .git
├── avatar-api
├── config-generator
├── register-email-validation
│ ├── bootstrap.php
│ ├── package.json
│ └── src
├── report-texture
└── yggdrasil-api <---【我想把这个独立为一个新 repo】
├── bootstrap.php
├── package.json
├── routes.php
└── src
而我现在后悔了,想把其中的某个子目录抽离出来,把它变成一个新的 git 仓库,并且保留我之前所有在「原仓库」中关于这个子目录的「所有提交历史」。
其实这种需求还是挺常见的,举个栗子:
阅读全文→


