git 子模块 submodule

导读

  git 子模块操作是 git 工具提供的关联和管理其它项目作为子模块的方式。在没有诸如 Visual Studio 提供的 Nuget 包管理工具时,可以方便不同项目代码分离和同步。

  本文梳理记录了个人使用 git 子模块 submodule 的常用指令,方便参考使用


目录
  1. 添加一个 git 子模块
  2. 克隆一个袋子模块的项目
  3. 更换远端
  4. 删除子模块
1、添加一个 git 子模块

假设现在需要 把项目 B 作为子模块,添加到项目 A 中的子目录 folder 中,使用如下指令

git submodule add

项目 B 的 git 项目地址为 b, 则添加子模块如下

 

添加一个子模块

首先你要把外部的仓库克隆到你的子目录中。
假设你想把 pacman项目加入到你的blog项目中,你通过git submodule add将外部项目加为子模块:

cd blog
git submodule add https://gitcafe.com/aceking/pacman.git themes/pacman

.gitmodules文件: 这是一个配置文件,保存了项目 URL 和你拉取到的本地子目录。现在你就在项目里的themes/pacman子目录下有了一个 pacan项目。你可以进入那个子目录,进行变更,加入你自己的远程可写仓库来推送你的变更,从原始仓库拉取和归并等等。

.gitmodule

 

 参考:http://www.linuxidc.com/Linux/2014-12/110771.htm

2、克隆一个带子模块的项目

克隆你刚才创建子模块的项目。你将得到了包含子项目的目录,但里面没有文件:pacman目录存在了,但是是空的。

你必须运行两个命令:git submodule init来初始化你的本地配置文件,git submodule update来从那个项目拉取所有数据并检出你上层项目里所列的合适的提交。

cd blog
git submodule init themes/pacaman
git submodule update

现在你的pacman子目录就处于你先前提交的确切状态了。

 

3、更换远端
 

1、修改'.gitmodules'文件中对应模块的”url“属性;

2、使用git submodule sync命令,将新的URL更新到文件.git/config;

# 运行后可观察到'.git/config'中对应模块的url属性被更新
git submodule sync 
Synchronizing submodule url for 'gitmods/thinker_g/Helpers'
# 提交变更
git commit -am "Update submodule url."

运行后可观察到'.git/config'中对应模块的url属性被更新 thinker-g@localhost: ~/app$ git commit -am "Update submodule url." # 提交变更

PS: 本实验使用git 2.7.4 完成,较低版本git可能不能自动更新.git/config文件,需要修修改完".gitmodule"文件后手动修改.git/config. 

 

参考:https://www.jianshu.com/p/ed0cb6c75e25

4、删除子模块
 
# 逆初始化模块,其中{MOD_NAME}为模块目录,执行后可发现模块目录被清空
git submodule deinit {MOD_NAME} 
# 删除.gitmodules中记录的模块信息(--cached选项清除.git/modules中的缓存) git rm --cached {MOD_NAME}

# 在 .gitmodules 中删除 {MOD_NAME} 对应的项
# 提交更改到代码库 git commit -am "Remove a submodule."

 

 

posted @ 2020-11-05 18:06  BensonLaur  阅读(842)  评论(0编辑  收藏  举报