将已有的Git项目的某个目录分离成独立子模块

当一个项目在开发若干时间后,希望将某个目录单独出一个项目来开发,此时就可以利用这个subtree的功能分离里。

具体的操作方式是这样的:(只能在Git Bash的命令行中操作
1. 首先cd到需要处理的项目的根目录

$ 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(项目)(离开原有的项目的文件夹,在另外的地方新建一个项目

$ 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. 添加子模块(到原来工程的根目录下面

$ git submodule add git@github.com:my-user/new-repo.git <name-of-folder>

可以看到,在原来的Git工程的根目录下面增加了一个名为“.gitmodules”的文件,里面的内容如下:

[submodule "<name-of-folder>"]
	path = <name-of-folder>
	url = git@github.com:my-user/new-repo.git

发布者

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注