当一个项目在开发若干时间后,希望将某个目录单独出一个项目来开发,此时就可以利用这个subtree的功能分离里。
具体的操作方式是这样的:(只能在Git Bash的命令行中操作)
1. 首先cd到需要处理的项目的根目录:
1 2 3 4 5 |
$ pushd ./ $ git subtree split -P <name-of-folder> -b <name-of-new-branch> # 将需要分离的目录的提交日志分离成一个独立的临时版本 $ popd |
注意
<name-of-folder> 必须是从工程的根目录开始算起,类似“project/hello/world”的格式。
<name-of-new-branch> 的名字,尽量取简单。
2. 创建一个新的repo(项目)(离开原有的项目的文件夹,在另外的地方新建一个项目)
1 2 3 4 5 6 7 |
$ mkdir <new-repo> $ pushd <new-repo> $ git init $ git pull </path/to/big-repo> <name-of-new-branch> |
注意
</path/to/big-repo>是我们需要拉取数据的根目录的绝对路径,类似 “D:\Source\Project”的格式。
<name-of-new-branch> 是我们刚刚分离出来的分支的名字。
3. 添加子模块(到原来工程的根目录下面)
1 |
$ git submodule add git@github.com:my-user/new-repo.git <name-of-folder> |
可以看到,在原来的Git工程的根目录下面增加了一个名为“.gitmodules”的文件,里面的内容如下:
1 2 3 |
[submodule "<name-of-folder>"] path = <name-of-folder> url = git@github.com:my-user/new-repo.git |