git子模块操作

子模块操作

1
2
3
4
5
6
7
8
9
10
11
12
# 添加子模块. -b 执行分支, 
git submodule add -b me git@git.coding.net:tij/hexo-theme-next.git themes/next

# 此命令回在.git/config中添加submodule的记录
git submodule init

# 在主模块中 子模块的文件夹其实被当做一个文件, 记录了子模块的url和commitId
# 执行update时, 会将主模块指定的commitId的子模块提交检出
git submodule update

# 不同上一条命令, 他会根据.gitmodules中记录的子模块地址和分支, 去远程拉去最新的子模块代码. 然后修改主模块关联该模块的ID为最新的ID
git submodule update --remote

clone带有子模块的项目

1
2
3
4
5
6
7
8
# 克隆xxx.git, 并同时克隆它的子模块
git clone xxx.git --recursive
# 或者分步执行
git clone xxx.git
# 注册子模块(会在.git/config文件后添加子模块url),根据根目录下的.gitmodules确定。
git submodule init
# clone子模块,并且检出指定的分支,(如何确定检出哪条分支?均在主项目.git文件夹中)
git submodule update

更新代码的同时更新子模块

  1. 方法1

    1
    git pull --recurse-submodules
  2. 方法2, 配置.gitmodules文件, 配置fetchRecurseSubmodules = true
    添加此参数后, 执行git pull会自动拉取子模块的代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [submodule "fw-ui-client"]
    path = fw-ui-client
    url = ../fw-ui-client.git
    branch = master
    fetchRecurseSubmodules = true
    [submodule "fw-test-app"]
    path = fw-test-app
    url = ../fw-test-app.git
    branch = master
    fetchRecurseSubmodules = true

注销子模块

1
git submodule deinit themes/next

需要关注的文件

1
2
3
.git/config
.gitmodules
.git/modules/

如果提示已经在index, 需要删除submodule后执行以下git add -A

0%