HEXO操作指南(二)
使用前提
经常碰到这种情况:当你在一个Git 项目上工作时,你需要在其中使用另外一个Git 项目。也许它是一个第三方开发的Git 库或者是你独立开发和并在多个父项目中使用的。这个情况下一个常见的问题产生了:你想将两个项目单独处理但是又需要在其中一个中使用另外一个。
在Git 中你可以用子模块submodule
来管理这些项目,submodule
允许你将一个Git 仓库当作另外一个Git 仓库的子目录。这允许你克隆另外一个仓库到你的项目中并且保持你的提交相对独立。
添加子模块
此文中统一将远程项目https://github.com/maonx/vimwiki-assets.git
克隆到本地`assets文件夹。1
git submodule add https://github.com/maonx/vimwiki-assets.git assets
添加子模块后运行git status
, 可以看到目录有增加1个文件.gitmodules
, 这个文件用来保存子模块的信息。1
2
3
4
5
6
7
8
9
10git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: .gitmodules
new file: assets
查看子模块
1 | git submodule |
更新子模块
更新项目内子模块到最新版本
1 | git submodule update |
更新子模块为远程项目的最新版本
1 | git submodule update --remote |
克隆包含子模块的项目
克隆包含子模块的项目有二种方法:一种是先克隆父项目,再更新子模块;另一种是直接递归克隆整个项目。
克隆父项目,再更新子模块
克隆父项目
1 | git clone https://github.com/maonx/vimwiki-assets.git assets |
查看子模块
1 | git submodule |
子模块前面有一个-,说明子模块文件还未检入(空文件夹)。
初始化子模块
1 | git submodule init |
初始化模块只需在克隆父项目后运行一次。
更新子模块
1 | git submodule update |
递归克隆整个项目
1 | git clone https://github.com/maonx/vimwiki-assets.git assets --recursive |
递归克隆整个项目,子模块已经同时更新了,一步到位。
修改子模块
在子模块中修改文件后,直接提交到远程项目分支。
1 | git add . |
删除子模块
删除子模块比较麻烦,需要手动删除相关的文件,否则在添加子模块时有可能出现错误
同样以删除assets
文件夹为例
删除子模块文件夹
1 | git rm --cached assets |
删除.gitmodules
文件中相关子模块信息
1 | [submodule "assets"] |
删除.git/config
中的相关子模块信息
1 | [submodule "assets"] |
删除.git
文件夹中的相关子模块文件
1 | rm -rf .git/modules/assets |