submodule 子模块

最后更新于:2022-04-02 02:53:31

[TOC] ## 概述 - submodule 是一个很好的多项目使用共同类库的工具 - 它允许类库项目做为repository,子项目做为一个单独的git项目存在父项目中,子项目可以有自己的独立的commit,push,pull - 父项目以Submodule的形式包含子项目 - 子模块可以有多个 - 某个子模块表现为一个目录, 如 [actionview](https://github.com/lxerxa/actionview) ## 语法 ``` git submodule [--quiet] add [] [--] [] git submodule [--quiet] status [--cached] [--recursive] [--] […​] git submodule [--quiet] init [--] […​] git submodule [--quiet] deinit [-f|--force] (--all|[--] …​) git submodule [--quiet] update [] [--] […​] git submodule [--quiet] summary [] [--] […​] git submodule [--quiet] foreach [--recursive] git submodule [--quiet] sync [--recursive] [--] […​] git submodule [--quiet] absorbgitdirs [--] […​] ``` ## 场景 ### 创建子模块 ``` git submodule add git@github.com:zjZSTU/hexo-theme-next.git blogs/themes/next ``` 除了添加子仓库之外,还生成了一个配置文件`.gitmodules` ``` > cat .gitmodules [submodule "blogs/themes/next"] path = blogs/themes/next url = git@github.com:zjZSTU/hexo-theme-next.git ``` ### 管理子模块 主仓库只能提示子模块中的文件修改,必须子模块自己进行添加和上传 ### 子模块的更新 ``` // 进入子模块 git pull // 完成后返回到项目目录,可以看到子模块有待提交的更新 git add ``` ### clone 带子模块的项目 ``` # 初始化本地配置文件 $ git submodule init # 拉取远程仓库 $ git submodule update ``` ### 修改某子模块URL 1. 修改`.gitmodules`文件中对应模块的”url“属性; 2. 使用`git submodule sync`命令,将新的URL更新到文件`.git/config`; ### 删除Submodule git 并不支持直接删除Submodule需要手动删除对应的文件: ``` // 逆初始化模块,执行后可发现模块目录被清空 > git submodule deinit DbConnector // 删除.gitmodules中记录的模块信息 > git rm --cached DbConnector // 提交更改到代码库,可观察到'.gitmodules'内容发生变更 > git commit -am "Remove a submodule." ``` ### 主模块提交时,忽略子模块 ``` > cat .gitmodule [submodule "blogs/themes/next"] path = blogs/themes/next url = https://github.com/zjZSTU/hexo-theme-next.git ignore = all ``` 设置 ignore 设置为 all
';