git submodule update --remote与--init的区别

关于submodule#

1、我为什么会用#

因为我在使用hugo搭建博客时,在网上找了一个主题codex就是使用的这种方式,我的博客项目仓库指定了他的主题仓库(此时对我来说他的主题相当于一个第三方依赖)。

2、为什么fork到自己的仓库#

因为我想修改主题中的一些配置,只能fork过来进行自定义,此时我fork过来之后,相当于我可以任意修改这个主题,那我为什么不直接把源代码放到我的博客仓库中呢?因为我不知道可以这么干,我是今天才知道…是在查阅git submodule update --remotegit submodule update --init这两条命令的区别的时候才知道。

3、remote与init的区别#

在更新第三方依赖的时候,有以上两条命令可以选择,区别在于:

  1. remote会根据.gitmodules文件中的信息进行更新,会更新到submodule的最新提交
  2. 使用init时,会根据主仓库下submodule的某个特定提交(哈希值),从submodule的远程仓库中拉取这个特定提交。同时,git submodule update --init可以看作git submodule initgit submodule update的结合,前者是初始化子模块,后者是根据当前主仓库的某个提交拉取远程仓库的代码。

总的来说,init与remote两条命令,init命令更侧重于初始化,remote侧重于拉取最新提交。

init通常用于第一次克隆一个包含子模块的仓库时,子模块的内容并不会自动被克隆下来,此时需要执行init这条命令。 remote通常用于跟踪某个第三方依赖,使对其的调用保持最新。