Git:子模块

来自Wikioe
Eijux讨论 | 贡献2020年10月14日 (三) 03:40的版本 →‎删除submodule
跳到导航 跳到搜索


关于submodule

项目根目录下有一个.gitmodules文件,即子模块关联文件,如:

[submodule "modules/suba"]
    path = modules/suba
    url = https://github.com/test/suba.git
[submodule "modules/suba2"]
    path = modules/suba
    url = https://github.com/test/suba2.git

每添加一个子模块就会新增一条记录,如果是第一次添加Git子模块会自动生成。

拉取submodule

当一个 git 项目包含子模块(submodule) 时,直接克隆下来的子模块目录里面是空的。有两种方法解决:

  1. 如果项目已经克隆到了本地,执行下面的步骤:
    1. 初始化本地子模块配置文件:
      git submodule init
      
    2. 更新项目,抓取子模块内容:
      git submodule update
      
  2. 对于未克隆项目,使用“--recursive”参数,可以自动初始化并更新每一个子模块。
    git clone --recursive 仓库地址
    

Note:

  1. 对于仓库首次拉取模块,可以使用:
    git submodule update --init --recursive
    
  2. 更新子模块
    # (适用于git 1.8.2及以上版本)
    git submodule update --recursive --remote
    
    #(适用于git 1.7.3及以上版本)
    git submodule update --recursive
    # 或者
    git pull --recurse-submodules
    

推送submodule

删除submodule

git没有直接删除子模块的命令,所以只能逐步删除相关文件。

  1. 在版本控制中删除子模块:
    git rm -r modules/subb
    
  2. 在编辑器中删除如下相关内容,也可以使用命令vi .gitmodules在vim中删除:
    [submodule "modules/subb"]
        path = modules/subb
        url = https://github.com/test/subb.git
        branch = dev
    
  3. 删除.git下的缓存模块:
    rm -rf .git/modules/subb
    
  4. 提交修改:
    git commit -am "delete subb"
    git push origin dev
    

发布项目