git 子模块

有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目。 也许是第三方库,或者你独立开发的,用于多个父项目的库。 现在问题来了:你想要把它们当做两个独立的项目,同时又想在一个项目中使用另一个,或者有多个项目公用同一个。

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

1. clone 含有子模块的项目

     git clone --recurse-submodules https://github.com/xxxxxxx  

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

   如果你已经克隆了项目但忘记了 --recuerse-submodules,那么可以运行。

   git submodule update --init     将 git submodule initgit submodule update 合并成一步。

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

   git submodule update --init --recuerse

 先解释一下:

项目中依赖子模块版本(或者叫节点)的更新,与子模块的更新是不一样的,区别是:子模块更新了,主项目中pull 是不会有任何子模块代码更新提示的,但是如果子模块更新了,并且主项目依赖子模块的版本或者叫节点更新了,这时候pull,就会提示你子模块有更新。

 这个 base-custom 就是在主项目中的一个子模块,@6e0dab1 就是主项目依赖子模块的一个版本(叫节点也行),同是这个 @6e0dab1 也是子模块中的 commit Id

2.将本地的子模块更新到最新版本(也可以理解成:将主项目的依赖的子模块的版本更新到最新

如果子模块有内容更新,但是你主项目依赖子模块的版本号没有更新,你在主项目 git pull 的时候,不会提示你子模块有更新,更不会更新子模块的内容 。

如果你需要将主项目依赖子模块的版本号更新:也就是将本地子模块更新到最新版本

你可以在主项目的目录下执行:

git submodule update --remote   拉取远程子模块最新版本

执行完上述命令后,你的本地已经拉取到最新的子模块的版本了,本地子模块的代码也是最新的

git status 

 这时候,如果你确定你要将子模块的代码更新到最新,你可以按部就班的执行 add,commit,push操作,之后,远程仓库就会更新依赖子模块的commit id为你提交的最新的 

但是,如果这个时候,你又不想更新子模块了,你可以执行

git submodule update 

这里就会提示你已经checked 到 你执行 git submodule update --remote 之前的那个版本 

git status 看一下

  很干净。

3. 拉取别人更新好的 主项目依赖子项目的最新版本

这个是指,子模块内容有更新,并且主项目远程已经更新到最新的子项目依赖版本,也就是你本地子模块依赖节点(版本)和远程的子模块不一致,这时候你需要更新到最新。

一般我们在写好代码,push之前,都需要先pull,远程拉取一下,这时候如果远程子模块依赖节点有更新,如:

但是此时 一定要注意:这种状态它并没有帮你更新子模块,只是帮你更新了主模块依赖子模块的节点,你可以看看自己的子模块的代码还是旧的。

git status 看看(这种情况不要去add, commit ,push,因为你还是老版本的子模块,提交了会覆盖别人更新的新版本的子模块)

然后你可以执行  git submodule update (更新子模块的内容) 。

执行完成后,这时候才更新了最新子模块的代码。

git status 看看 

 

 子模块已经更新到了最新的,状态也很干净!

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值