多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# git子模块 --- ### 一、什么是git子模块 我们先来说一个场景,当你遇到类似的场景时,可能你就需要使用git子模块了,并且你也会很容易的理解git子模块是什么。 当你需要在git仓库中引入另个一git仓库时这时你就需要使用git子模块了。很简单,话不多说,我们直接操作。 ### 二、给现有的git仓库中新增子模块(另一个git仓库) 1. 在已有的仓库中执行以下内容添加子模块 ```JavaScript $ git submodule add git@git.kancloud.cn:webxiaoma/git.git ``` 2. 查看子模块信息 ```JavaScript $ git diff --cached --submodule ``` ### 三、克隆包含子模块的仓库 1. 方法一 ```JavaScript 1.克隆项目,子模块目录默认被克隆,但是是空的 $ git clone git@github.com:webxiaoma/test.git 2.初始化子模块:初始化本地配置文件 $ git submodule init 3.该项目中抓取所有数据并检出父项目中列出的合适的提交 $ git submodule update ``` 2. 方法二直接在父仓库中执行以下命令 ```JavaScript $ git clone --recursive git@github.com:webxiaoma/test.git ``` ### 四、更新子模块 1. 方法一 更新子模块需要在子模块目录中进行操作 ```JavaScript $ cd 子目录 $ git fetch $ git merge origin/master ``` 2. 方法二 不需要再子模块目录进行 ```JavaScript $ git submodule update --remote 子模块名 // 上边默认更新master分支,如果更新其他分支 //这里是更新子模块Testgit 下的dev分支 $ git config -f .gitmodules submodule.Testgit.dev stable $ git submodule update --remote $ git merge origin/master ``` ### 五、主仓库和子模块的推送 1. 在主仓库推送之前,要现在子模块中将代码进行推送,否则的话会推送失败 ### 六、使用中的常见问题 1. 删除子模块后,再次克隆时报错,提示该模块已经存在 这种情况是删除子模块不彻底造成的。我们删除子模块时需要删除这些东西 > (1)删除子模块 > (2)删除父项目中的 .gitmodules 文件,当然这里前提是你只有一个子模块,如果有多个子模块需要在.gitmodules 文件中删除对应的子模块 > (3)删除.git 文件夹中的modules 文件 (.git 是隐藏文件夹,这里也是针对有一个子模块时) > (4)删除.git 文件夹中的config配置 文件中的类似下面代码中指定的子模块 ```JavaScript [submodule "docs/javascript"] url = git@git.kancloud.cn:webxiaoma/javascript.git active = true ``` --- ### 参考文献 1. [git 子模块](https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E5%AD%90%E6%A8%A1%E5%9D%97)