Git submodule 子模块的管理和使用说明

5 篇文章 0 订阅
4 篇文章 0 订阅

Git submodule 子模块的管理和使用

使用前提

场景: 当你在一个Git 项目上工作时,你需要在其中使用另外一个Git 项目。也许它是一个第三方开发的Git 库, 比如公司内部自己开发的公用代码库, 并在多个父项目中使用的。这个场景下,常见的问题产生了:你想将两个项目单独处理, 但是又需要在其中一个中, 使用另外一个。

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

添加子模块

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

$ git submodule add --force https://github.com/zhangHulk//Android/HulkDemo.git HulkDemo

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

hulk@hulk-PC:~/byod/code/byod_new2$ git status On branch hulk/yj-git-submodules Your branch is up to date with 'origin/custom/yjglb-3.0.1606-sm'.

Changes to be committed: (use "git reset HEAD <file>..." to unstage)

    new file:   .gitmodules  //如果之前有.gitmodules这个文件,不会列出来
    new file:   HulkDemo

查看子模块

hulk@hulk-PC:~/byod/code/byod_new2$ git submodule 97d8c55aabdb89a6111230c74f4519667ff2d1f6 HulkDemo (custom-police/trustunit-police-3.0.2002.23/59)

p>​

更新子模块

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

$ git submodule update

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

$ git submodule update --remote

克隆包含子模块的项目

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

克隆父项目,再更新子模块

克隆父项目

$ git clone https://github.com/zhangHulk//Android/HulkDemo.git HulkDemo

查看子模块

$ git submodule -97d8c55aabdb89a6111230c74f4519667ff2d1f6 HulkDemo

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

初始化子模块

$ git submodule init Submodule 'HulkDemo' (https://github.com/zhangHulk//Android/HulkDemo.git) registered for path 'HulkDemo'

初始化模块只需在克隆父项目后运行一次。

更新子模块

hulk@hulk-PC:~/byod/code/byod_new2

$ git submodule update

Cloning into 'HulkDemo'... remote: Enumerating objects: 309, done.

remote: Counting objects: 100% (85/85), done.

remote: Compressing objects: 100% (42/42), done.

remote: Total 309 (delta 44), reused 67 (delta 36), pack-reused 224

Receiving objects: 100% (309/309), 7.15 MiB | 51.56 MiB/s, done.

Resolving deltas: 100% (120/120), completed with 5 local objects.

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

需要输入git代码库的账户密码

hulk@hulk-PC:~/byod/code/byod_new2$ git submodule update --remote

Username for 'https://git-biz.qianxin-inc.cn': zhanghao

Password for 'https://zhanghao@git-biz.qianxin-inc.cn':

remote: Enumerating objects: 309, done. remote: Counting objects: 100% (85/85), done. ................

From https://github.com/zhangHulk//Android/HulkDemo

97d8c55..ee8c648 develop -> origin/develop

  • [new branch] TrustUnit -> origin/TrustUnit

  • ..........

  • [new tag] custom-jianhang-debug/$version_name/10 -> custom-jianhang-debug/$version_name/10

Submodule path 'HulkDemo': checked out 'ee8c64838f681c3509317eb43ee52e576d83410f'

至此,整个添加/更新子模块就结束了.

递归克隆整个项目

git clone https://github.com/zhangHulk//Android/HulkDemo.git HulkDemo --recursive

递归克隆整个项目,子模块已经同时更新了,一步到位。

修改子模块

在子模块中修改文件后,直接提交到远程项目分支。

$ git add . $ git ci -m "commit" $ git push origin HEAD:master

删除子模块文件夹

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

$ git rm --cached HulkDemo

$ rm -rf HulkDemo

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

[submodule "HulkDemo"] path = HulkDemo url = https://github.com/zhangHulk//Android/HulkDemo.git

删除.git/config中的相关子模块信息 [submodule "HulkDemo"] url = https://github.com/zhangHulk//Android/HulkDemo.git

删除.git文件夹中的相关子模块文件 $ rm -rf .git/modules/HulkDemo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值