首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Git 中一个类似 Composer 的工具 – 子模块

Git 中一个类似 Composer 的工具 – 子模块

作者头像
沈唁
发布2018-12-28 12:07:39
6740
发布2018-12-28 12:07:39
举报
文章被收录于专栏:沈唁志沈唁志

Composer 对于做 PHP 开发的人来说一定不陌生,也极大的方便了日常开发工作,找到合适的包直接加载一下就可以使用

对于 Git 中的一个工具你了解过吗,在工作中的项目可能需要包含另外一个项目,也许是一个第三方库,也许是你自己开发的一个私有库

说到第三方库一定会想到使用 Composer 去加载,使用 Composer 加载你在部署的时候要确保每一个客户端都包含这个库

如果将代码复制到自己的项目中,那么你做的任何自定义修改都会在合并的时候变得困难

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

开始使用子模块

在已存在的仓库中添加子模块,可以使用git submodule add命令,比如这样

$ git submodule add git@github.com:sy-records/GetIP.git

默认情况下,子模块会将子项目放到一个与仓库同名的目录中,本例中是 “GetIP”。 如果你想要放到其他地方,那么可以在命令结尾添加一个不同的路径

查看一下状态会发现:

$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git reset HEAD ..." to unstage)

        new file:   .gitmodules
        new file:   GetIP

多出了一个.gitmodules文件

这个配置文件是保存了项目的URL和本地目录之间的映射关系

$ cat .gitmodules
[submodule "GetIP"]
        path = GetIP
        url = git@github.com:sy-records/GetIP.git

如果有多个子模块,这个文件中就会有多条记录,它会和该项目的其他部分一同被拉取推送,这就是克隆该项目的人知道去哪获得子模块的原因

克隆含有子模块的项目

还跟平常克隆项目一样git clone的命令

$ git clone git@github.com:sy-records/git-submodule.git

然后你就会发现,克隆下来的子模块文件夹是空的,没有代码

是因为包含子模块的项目不仅仅克隆下来就可以了,需要运行两个命令:

git submodule init用来初始化本地配置文件

git submodule update从该项目中抓取所有数据并检出父项目中列出的合适的提交

$ git submodule init
Submodule 'GetFavicon' (git@github.com:sy-records/GetFavicon.git) registered for path 'GetFavicon'
Submodule 'GetIP' (git@github.com:sy-records/GetIP.git) registered for path 'GetIP'

$ git submodule update
Cloning into 'F:/Test/git-submodule/GetFavicon'...
Cloning into 'F:/Test/git-submodule/GetIP'...
Submodule path 'GetFavicon': checked out '2808acdbbfa08579460e5edc9f26bce49c8a66a9'
Submodule path 'GetIP': checked out '48be97908b62fb9a8c3623feb67f45e3c7a484f0'

或者在克隆的时候加上--recursive选项,就会在拉取的时候自动初始化并更新仓库中的每一个子模块

就先说这么多,溜了 ?

沈唁志,一个PHPer的成长之路! 原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:Git 中一个类似 Composer 的工具 – 子模块

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开始使用子模块
  • 克隆含有子模块的项目
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档