git 模块化submodule的使用

一.子模块使用场景

当你在一个Git 项目上工作时,你需要在其中使用另外一个Git 项目,它是一个第三方开发的Git 库或者是你独立开发,但是在多个父项目中使用的。这个情况下一个常见的问题产生了:你想将两个项目单独处理但是又需要在其中一个中使用另外一个。

二.子模块(submodule)概念的引入

在Git 中你可以用子模块submodule来管理这些项目,submodule允许你将一个Git 仓库当作另外一个Git 仓库的子目录。这允许你克隆另外一个仓库到你的项目中并且保持你的提交相对独立。

三.添加子模块

此文中统一将远程项目https://github.com/cain/cain-test.git克隆到本地test文件夹。

git命令:

git submodule add 子项目url 子项目存放到本地的文件夹名

$ git submodule add https://github.com/cain/cain-test.git test

以上命令,将远程项目https://github.com/cain/cain-test.git克隆到本地test文件下。

添加子模块后运行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
    new file:   test

四.查看子模块

$ git submodule
 e23e823d3f51f5ebd731a68da05ad0371c3a0231 test (heads/master)

五.更新子模块

■更新项目内子模块到最新版本

$ git submodule update

■更新子模块为远程项目的最新版本

$ git submodule update --remote

六.克隆包含子模块的项目

克隆包含子模块的项目有二种方法:一种是先克隆父项目,再更新子模块;另一种是直接递归克隆整个项目。

方法一:先克隆父项目,再更新子模块

■克隆父项目

$ git clone https://github.com/cain/cain-assets.git test
■查看子模块

$ git submodule
 --e23e823d3f51f5ebd731a68da05ad0371c3a0231 test

子模块前面有一个–,说明子模块文件还未检入(空文件夹)。

■初始化子模块

$ git submodule init
Submodule 'test' (https://github.com/cain/cain-test.git) registered for path 'test'

■更新子模块

$ git submodule update
Cloning into 'test'...
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 'test': checked out 'e23e823d3f51f5ebd731a68da05ad0371c3a0231'

在更新的过程中,可能要求输入git的用户名和密码。

方法二:递归克隆整个项目

$ git clone https://github.com/cain/cain-test.git test --recursive

递归克隆整个项目,子模块已经同时更新了,比方法一简洁。

七.删除子模块

删除子模块比较麻烦,需要手动删除相关的文件,否则在添加子模块时有可能出现错误。

■删除子模块文件夹

$ git rm --cached test
$ rm -rf test

■删除.gitmodules文件夹中相关子模块信息

[submodule "assets"]
  path = test
  url = https://github.com/cain/cain-test.git

■删除.git/config文件夹中的相关子模块信息

[submodule "test"]
  url = https://github.com/cain/cain-test.git

■删除.git文件夹中的相关子模块文件

$ rm -rf .git/modules/test

————————————————
版权声明:本文为CSDN博主「cain-won」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kaijkl/article/details/118752830

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值