抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

安装 hexo 博客主题大致是这样几个步骤:

  1. 修改 _config.yml 配置文件,将 theme 选项设置为当前主题名称
  2. 下载主题, Hexo 5.0.2 版本及以上的可以通过 npm i 主题名,之前版本都是直接从 git 仓库克隆项目:git clone 主题仓库 themes/主题名
  3. 安装一些主题依赖选项

执行完这些操作主题就算安装好了,但是,如果现在需要给主题做一些个性化修改,同时又能继续获取源主题的更新,通过上面第二步的操作是无法实现的,这就有了一个新需求,有什么办法能够做到吗?

当然,实现这个新需求的工具就是- git 子模块(submodule)。

其实我们的新需求就是在一个父项目里面再包含一个子项目,父子项目要保持各自独立的 git 操作,这就是 git 子模块(submodule)要做的事情,本文就以 hexo 主题能够个性化修改同时实现保持同源主题同步更新的需求来讲解 git 子模块的操作。

fork 主题仓库

fork 主题源码到个人仓库:

直接到主题源码仓库点击 fork 按钮即可,比如我 fork 的主题仓库:https://github.com/varm/hexo-theme-volantis

新增子模块

进入 hexo 博客根目录,添加一个子模块到目录 themes/volantis,执行命令:

1
$ git submodule add https://github.com/varm/hexo-theme-volantis.git themes/volantis

执行成功后可以看到根目录下新增了一个文件:.gitmodules,里面记录了子模块的信息。

查看子模块

git submodule

更新子模块

  • 更新子模块到最新版

    $ git submodule update

  • 更新子模块到远程仓库最新版

    $ git submodule update --remote

克隆包含子模块的项目

  • 方法一:先克隆父项目,再更新子模块

    1. 克隆父项目

      $ git clone git@github.com:varm/blog.git blog

    2. 查看子模块

      $ git submodule

      如果子模块前面有一个-,说明子模块文件还未检入(空文件夹)。

    3. 初始化子模块

      $ git submodule init

      初始化模块只需在克隆父项目后运行一次。

    4. 更新子模块

      $ git submodule update

  • 方法二:直接递归克隆整个项目

    这个方法可以递归克隆完整的项目,包括子模块在内。

    $ git clone git@github.com:varm/blog.git blog --recursive

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $ E:\WorkSpace> git clone git@github.com:varm/blog.git blog --recursive
    Cloning into 'blog'...
    remote: Enumerating objects: 1257, done.
    remote: Counting objects: 100% (1257/1257), done.
    remote: Compressing objects: 100% (829/829), done.
    Rremote: Total 1257 (delta 714), reused 891 (delta 357), pack-reused 0eceiving objects: 90% (1132/1257), 1.79 MiB | 927.00 KiB/s
    Receiving objects: 100% (1257/1257), 2.29 MiB | 1.02 MiB/s, done.
    Resolving deltas: 100% (714/714), done.
    Submodule 'themes/volantis' (https://github.com/varm/hexo-theme-volantis.git) registered for path 'themes/volantis'
    Cloning into 'E:/WorkSpace/blog/themes/volantis'...
    remote: Enumerating objects: 12863, done.
    remote: Counting objects: 100% (20/20), done.
    remote: Compressing objects: 100% (18/18), done.
    remote: Total 12863 (delta 4), reused 10 (delta 2), pack-reused 12843
    Receiving objects: 100% (12863/12863), 5.30 MiB | 1.05 MiB/s, done.
    Resolving deltas: 100% (8949/8949), done.
    Submodule path 'themes/volantis': checked out 'xxxxxxxx'

    修改子模块

    对子模块中的文件进行修改后可以直接提交到远程项目分支

    1
    2
    3
    $ git add .
    $ git commit -m "Update"
    $ git push origin HEAD:master

    删除子模块

    1. 删除子模块文件夹

      1
      2
      3
      4
      $ git rm --cached themes/volantis
      $ rm -rf themes/volantis
      --如果是 Windows cmd 命令行,使用
      $ rmdir themes/volantis
    2. 删除 .gitmodules 文件中相关子模块信息

      1
      2
      3
      [submodule "themes/volantis"]
      path = blog/themes/volantis
      url = https://github.com/varm/hexo-theme-volantis.git
    3. 删除 .git/config 中的相关子模块信息

      1
      2
      [submodule "themes/volantis"]
      url = https://github.com/varm/hexo-theme-volantis.git
    4. 删除 .git 文件夹中的相关子模块文件

      1
      2
      3
      $ rm -rf .git/modules/hexo-theme-volantis
      --如果是 Windows cmd 命令行,使用
      $ rmdir .git/modules/hexo-theme-volantis

评论