git submodule Git子模块

问题

有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目。
也许是第三方库,或者你独立开发的,用于多个父项目的库。
现在问题来了:你想要把它们当做两个独立的项目,同时又想在一个项目中使用另一个。

方案

Git 通过子模块来解决这个问题。
子模块允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。
它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立。

使用子模块

  • 添加子模块

    $ git submodule add https://XXXX.com/XXXXX.git
    

    添加子模块后运行git status, 可以看到目录有增加1个文件.gitmodules, 这个文件用来保存子模块的信息。

    $ git status
    On branch master
    
    Initial commit
    
    Changes to be committed:
      (use "git rm --cached <file>..." to unstage)
    
        new file:   .gitmodules
    
  • 查看子模块

    $ git submodule
    
  • 更新子模块

    $ git submodule update
    
  • 克隆包含子模块的项目

    1. 先clone项目, 后更新子模块
      • clone 项目
        $ git clone https://XXXX.com/XXXXXXX
        
      • 子模块初始化
        $ git submodule init
        Submodule 'XXXX' (https://XXXX.com/XXXXXX.git) registered for path 'XXXX'
        
      • 子模块更新
        $ git submodule update
        Cloning into 'assets'...
        remote: Counting objects: 151, done.
        remote: Compressing objects: 100% (80/80), done.
        remote: Total 151 (delta 18), reused 0 (delta 0), pack-reused 70
        Receiving objects: 100% (151/151), 1.34 MiB | 569.00 KiB/s, done.
        Resolving deltas: 100% (36/36), done.
        Checking connectivity... done.
        Submodule path 'XXXX': checked out 'b37a657f184e243cb0db810a024ae79a5a92d07e'
        
    2. 直接clone项目和子模块
      git clone --recurse-submodules https://XXXX.com/XXXXXXX
      
  • 修改子模块
    在子模块中修改文件后,直接提交到远程分支。

    $ git add .
    $ git ci -m "commit"
    $ git push
    
  • 删除子模块
    删除子模块需要手动删除相关的文件,否则在添加子模块时有可能出现错误

    删除子模块文件夹

    $ git rm --cached assets
    $ rm -rf assets
    

    删除.gitmodules文件中相关子模块信息
    [submodule “XXXX”]
    path = XXXX
    url = https://XXXX.com/XXXXXXXX.git
    删除.git/config中的相关子模块信息
    [submodule “XXXX”]
    url = https://XXXX.com/XXXXXXXX.git
    删除.git文件夹中的相关子模块文件

    $ rm -rf .git/modules/XXXX
    

参考链接
官网
https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E5%AD%90%E6%A8%A1%E5%9D%97

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值