综合技术

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

微信扫一扫,分享到朋友圈

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

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

项目说明

perillaroc/nwpc-monitor-platform 项目为例说明。

将版本切换到 7f12e9e74745df3a42f7008d9110187a0e2d26da ,该版本是加入子项目之前的最后一个版本。

$ gitreset --hard 7f12e9e74745df3a42f7008d9110187a0e2d26da
HEADis nowat 7f12e9e Changeendpointin url_for. And changeurlin configfile.

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

|- nwpc_monitor
  |- nwpc_log
    |- __init__.py
    |- bunch.py
    |- node.py
    |- visitor.py

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

|- __init__.py
|- bunch.py
|- node.py
|- visitor.py

提取子目录

使用 git filter-branch 命令提取子目录。

格式为:

gitfilter-branch --prune-empty --subdirectory-filterFOLDER-NAME  BRANCH-NAME

其中

FOLDER-NAME 是想要提取的子目录,本示例使用 nwpc_monitor/nwpc_log 目录。

BRANCH-NAME 是当前项目的默认分支,本示例使用 master 分支。

具体命令为

$ gitfilter-branch --prune-empty --subdirectory-filternwpc_monitor/nwpc_logmaster
Rewritebd92d397ce438ce3a033bf81df818b282aec5527 (3/4) (1 secondspassed, remaining 0 predicted)
Ref 'refs/heads/master' wasrewritten

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

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

创建新项目

下面将该项目推送到新创建的Git项目中。在Github创建一个新项目。

查看原项目的 remote 地址

$ gitremote -v
origin  git@github.com:perillaroc/nwpc-monitor-platform.git (fetch)
origin  git@github.com:perillaroc/nwpc-monitor-platform.git (push)

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

$ gitremoteset-urlorigingit@github.com:perillaroc/nwpc-log.git

新的 remote 地址为

$ gitremote -v
origin  git@github.com:perillaroc/nwpc-log.git (fetch)
origin  git@github.com:perillaroc/nwpc-log.git (push)

推送到新的项目

$ gitpush -u originmaster
Enterpassphrasefor key '/c/Users/wangdp/.ssh/id_rsa':
Countingobjects: 15, done.
Deltacompressionusingupto 8 threads.
Compressingobjects: 100% (9/9), done.
Writingobjects: 100% (15/15), 2.95 KiB | 0 bytes/s, done.
Total 15 (delta 6), reused 15 (delta 6)
remote: Resolvingdeltas: 100% (6/6), done.
To github.com:perillaroc/nwpc-log.git
* [new branch]      master -> master
Branchmastersetupto trackremotebranchmasterfromorigin.

参考

Splitting a subfolder out into a new repository

阅读原文...


Avatar

关于普通人对学代码这事的误解

上一篇

Usability Testing of Inline Form Validation: 40% Don't Have It, 20% Get It Wrong

下一篇

您也可能喜欢

评论已经被关闭。

插入图片
为现有Git项目中的子目录建立新项目

长按储存图像,分享给朋友