为现有Git项目中的子目录建立新项目

目录

如果某个项目中的某个组件同时被其他项目使用,可以为该子目录建立一个新的项目,提供给更多的项目使用。直接拷贝代码最方便,但通过Git可以生成保留版本信息的项目。

项目说明

perillaroc/nwpc-monitor-platform 项目为例说明。
将版本切换到 7f12e9e74745df3a42f7008d9110187a0e2d26da ,该版本是加入子项目之前的最后一个版本。

需要单独建立项目的子目录为 nwpc_monitor/nwpc_log,该模块被多个项目同时使用。目录结构如下

本例子目标是将 nwpc_log 提取为有完整版本记录的新项目,新项目目录如下

提取子目录

使用 git filter-branch 命令提取子目录。
格式为:

其中
FOLDER-NAME 是想要提取的子目录,本示例使用 nwpc_monitor/nwpc_log 目录。
BRANCH-NAME 是当前项目的默认分支,本示例使用 master 分支。
具体命令为

通过 Gitk 可以看到目前的 master 分支保留了 nwpc_log 目录的版本历史。

现在项目中只包含子目录中的文件。尽管其他文件都被移除,但它们仍保留在 Git 历史里。

创建新项目

下面将该项目推送到新创建的Git项目中。在Github创建一个新项目。
查看原项目的 remote 地址

将 origin 地址改为新创建的Git项目地址

新的 remote 地址为

推送到新的项目

参考

Splitting a subfolder out into a new repository