处理公共模块-对比npm包和git-submodule

19次阅读

共计 1107 个字符,预计需要花费 3 分钟才能阅读完成。

背景

我们开发项目的时候,会经常碰到可服用模块,比如各种 utils 包, 登录 分享 之类的共有模块,并不想写在项目本身,而是抽出来可以为多个项目所复用。
现在我们项目中用了俩种模式

  1. 把公共模块打包成 npm 包,使用时候利用 npm install 安装
  2. 公共组件单独写成一个项目,使用时用 git submodule 引入到主项目中

利用 git submodule 实现

子模块允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立。

添加 git 子模块

git 通过在 git submodule add 命令后面加上想要跟踪的项目 URL 来添加新的子模块。

$ git submodule add https://github.com/chaconinc/DbConnector
Cloning into 'DbConnector'...
remote: Counting objects: 11, done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 11 (delta 0), reused 11 (delta 0)
Unpacking objects: 100% (11/11), done.
Checking connectivity... done.

克隆含有子模块的项目

接下来我们将会克隆一个含有子模块的项目。当你在克隆这样的项目时,默认会包含该子模块目录,但其中还没有任何文件:

$ git clone https://github.com/chaconinc/MainProject
$ cd DbConnector/
$ ls
$

其中有 DbConnector 目录,不过是空的。你必须运行两个命令:git submodule init 用来初始化本地配置文件,而 git submodule update 则从该项目中抓取所有数据并检出父项目中列出的合适的提交。

$ git submodule init
Submodule 'DbConnector' (https://github.com/chaconinc/DbConnector) registered for path 'DbConnector'
$ git submodule update

不过还有更简单一点的方式。如果给 git clone 命令传递 –recursive 选项,它就会自动初始化并更新仓库中的每一个子模块。

$ git clone --recursive https://github.com/chaconinc/MainProject
Cloning into 'MainProject'...

在包含子模块的项目上工作

https://git-scm.com/book/zh/v…

正文完
 0