git子模块实践

  • Post author:
  • Post category:其他



遇到的问题

  • A,B两个项目中有很多公用静态资源
  • 静态资源包括 js插件,基础组件,业务组件,图片,文档…
  • 使用npm管理 会使项目复杂化 ,新增组件调试流程复杂,静态资源上传到npm后下载安装包会很慢


准备工作

  1. 打开github

  2. 新建仓库 gittest3

  3. 新建仓库 gittest3child

在这里插入图片描述


添加子模块

  1. 拉取代码gittest3

  2. 执行git命令

    git submodule add https://github.com/xbcc 123/gittest3child.git

    结果如下图

    $ git submodule add https://github.com/xbcc 
    123/gittest3child.git
    
    Cloning into 'F:/desktop/gitTest3/gittest3/gittest3child'...
    remote: Enumerating objects: 3, done.       
    remote: Counting objects: 100% (3/3) eceivinremote: Counting objects: 100% (3/3), done. 
    % (3/3), done.
    
    remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
    warning: LF will be replaced by CRLF in .gitmodules.
    The file will have its original line endings in your working directory
    


修改

  1. 提交gittest3项目会看到子模块与项目建立了关联

在这里插入图片描述

  1. 现在修改gittest3Child文件提交到git, 会看到gittest3项目多出一个diff文件

在这里插入图片描述

  1. 再次提交gittest3项目到git仓库,与子项目建立新的版本关联

    在这里插入图片描述

  2. 结论:当项目版本发生回退时,还是可以通过commit信息自动找回指定模块的文件


协作



  1. git clone

    命令传递

    --recurse-submodules

    选项,它就会自动初始化并更新仓库中的每一个子模块, 包括可能存在的嵌套子模块。
# eg: 
git https://github.com/xbcc123/gittest3.g
it -recurse-submodules
  1. 如果你已经克隆了项目但忘记了

    --recurse-submodules

    可以使用

    git submodule update --init --recursive

    来手动更新项目中的子模块


切换分支

  1. 如果你创建一个新分支,在其中添加一个子模块,之后切换到没有该子模块的分支上时,你仍然会有一个还未跟踪的子模块目录; 如果你移除它然后切换回有那个子模块的分支,需要运行

    git submodule update --init

    来重新建立和填充

  2. 正确的操作方式

    • 使用–recurse-submodules让子模块处于正确的状态

      git checkout --recurse-submodules master
      
    • 推荐: 设置config submodule.recurse全局将所有带有submodule.recurse的命令默认带上–recurse-submodules

      git config submodule.recurse true
      


引用



版权声明:本文为github_39506988原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。