0


git submodule详解

子模块

有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目。 也许是第三方库,或者你独立开发的,用于多个父项目的库。 现在问题来了:你想要把它们当做两个独立的项目,同时又想在一个项目中使用另一个。在其他的博客中也介绍过两个方法,现在顺便介绍另一种更加优雅的方法—子模块

添加子模块

我们首先将一个已存在的 Git 仓库添加为正在工作的仓库的子模块。 你可以通过在

git submodule add

命令后面加上想要跟踪的项目的相对或绝对 URL 来添加新的子模块。 在本例中,我们将会添加一个名为 “DbConnector” 的库。

$ 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.

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

当我们添加子模块以后,会多一个

.gitmodules

文件

//指定子模块的名字
[submodule "DbConnector"]
    //自定子模块的存放路径,这里是同级目录下的DbConnector目录
    path = DbConnector
    //子模块的clone地址
    url = https://github.com/chaconinc/DbConnector

克隆含有子模块的项目

当我们直接

git clone

的时候,会显示子模块的目录,但是文件目录是空的,必须运行两个命令:

git submodule init

用来初始化本地配置文件,而

git submodule update

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

不过还有更简单一点的方式。 如果给

git clone

命令传递

--recurse-submodules

选项,它就会自动初始化并更新仓库中的每一个子模块, 包括可能存在的嵌套子模块。

$ git clone --recurse-submodules https://github.com/chaconinc/MainProject

如果你已经克隆了项目但忘记了

--recurse-submodules

,那么可以运行

git submodule update --init

git submodule init

git submodule update

合并成一步。如果还要初始化、抓取并检出任何嵌套的子模块, 请使用简明的

git submodule update --init --recursive

子模块更新与提交

子模块与我们的普通的git仓库没有什么区别,当我们需要更新或者提交代码的时候,直接进入对应的目录即可。

标签: git github

本文转载自: https://blog.csdn.net/weixin_43976461/article/details/125926991
版权归原作者 小小仓 所有, 如有侵权,请联系我们删除。

“git submodule详解”的评论:

还没有评论