zoukankan      html  css  js  c++  java
  • git submodule 子模块

    背景:为什么要用子模块?

    在开发项目中可能会遇到这种问题:在你的项目中使用另一个项目,也许这是一个第三方开发的库,或者是你独立开发的并在多个父项目中使用的。简单来说就是A同学开发了一个模块,被BC同学共同调用,,可能就形成了这种模块调用关系。

    然后就产生了一个问题:我想将两个项目单独处理。但是又需要再其中一个中使用另一个。

    解决方案

    git给了一个处理方案--子模块

    • 子模块允许将一个git仓库作为另一个git仓库的子目录,他能让你将另一个仓库克隆到自己的项目中区去,并且保持提交的独立。
    • 子模块关键字:git submodule

    如何使用子模块

    假如我有两个仓库,module(目标仓库)和submodule(子模块仓库)。

    在现有的仓库中加入子模块

    git submodule add https://gitee.com/Hancoson/submodule.git module

    • 现在在module项目子目录中就会有一个submodule子模块。
    On branch master
    Your branch is up-to-date with 'origin/master'.
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
        new file:   .gitmodules
        new file:   submodule

    我们会发现多两个新的文件,首先是.gitmodules文件。这个文件是一个配置文件,保存了项目URL和已经拉取的本地目录之间的映射

    • 查看.gitsubmodule文件 cat .gitsubmodule
    [submodule "submodule"]
      path = submodule
      url = https://gitee.com/Hancoson/submodule.git

    如果有多个子模块,文件里会有多个条目。但是这个文件个其他文件一样也是处于版本管理控制之下的,就像.gitignore文件一样,这样该子模块是和其他们文件一样可以被推送和拉取。这也是克隆该项目获知子模块项目来源的途径。

    • 提交增加的子模块到该项目的远程仓库中

    commit 方式和普通提交的方式相同

    • 克隆一个带有子模块的项目

    git clone <url>克隆这个项目时,默认会包含该子模块的所有目录,但是目录中不会有任何文件,这是需要运行两个命令:

    1. git submodule init 用来初始化本地配置文件;
    2. git submodule update用来拉取module目录中的所有数据,并检测出你上层项目所列的合适的提交。
    $ git submodule init
    Submodule 'submodule' (https://gitee.com/Hancoson/submodule.git) registered for path 'submodule'
    $ git submodule update
    Submodule path 'submodule': checked out '471741e958c2ef0096ad5971c264041a9295ce3b'
    • 修改子模块

    切换到要修改代码的子模块,修改代码,push方式和普通方式相同。

  • 相关阅读:
    Emacs 安装 jedi
    PHP+ MongoDB
    Debian 7 安装 Emacs 24.3
    在Code first中使用数据库里的视图
    Emacs安装auto-complete
    Debian 7.4 中配置PHP环境
    ASP.NET MVC 下载列表
    JDicom使用指南
    Windows常用的DOS命令
    Entity Framework问题总结
  • 原文地址:https://www.cnblogs.com/jaelynl/p/11359414.html
Copyright © 2011-2022 走看看