需求
之前的一个大项目里面有多个小项目, 比如: f:/sites/
目录下放了 thumbs
, ecommerce
, esdemo
等一些站点, 这些都是在一个 git 版本库中.
现在需要把这几个一级目录拆分到不同的独立的版本库中, 并要保留之前的版本记录
# 目录结构
|sites
|----thumbs
|----ecommerce
|----esdemo
解决方案
在此我们使用 git subtree
工具 来进行拆分,简单来说就是先把 每个要拆分的项目(文件夹) 的所有提交 分割成一个新的分支,然后把该分支merge
到一个全新的仓库。
git subtree split --prefix=<prefix> [OPTIONS] [<commit>]
以子项目ecommerce
为例, 在 Git Bash
下操作.
1. 拆分子项目到分支
把子项目 ecommerce
拆分到分支 ecommerce
中去.
cd /f/sites
git subtree split -P ecommerce -b ecommerce
支持对下级文件夹的拆分, 比如将ecommerce下的static文件夹拆分出来:
git subtree split -P ecommerce/static -b static
2. 建立新的项目
cd /f/
# 先建立一个根目录, 用于存放新的多个仓库
mkdir sites2
cd sites2
#建立新的项目文件夹
mkdir ecommerce
cd ecommerce
# 初始一个空的仓库, 默认只有一个 master 分支
git init
3. 拉取原来的子项目到新的仓库
git pull /f/sites ecommerce
4. 推送到远端仓库
git remote add origin **远端仓库地址**
git push origin master