Android Git submodule详解用法示例
作者:临木小屋 发布时间:2021-10-23 11:39:03
引入
假定我们有两个项目:Cup 和 Water,其中 Cup 表示主项目,而 Water 表示子模块项目。
其中 Cup 的远程仓库地址为 git@github.com:SkyMissT/Cup.git
而 Water 的远程仓库地址为 git@github.com:SkyMissT/Water.git
接下来,我们希望在 Cup 中添加 Water ,而又保持 Water 自身独立的版本控制。
创建 submodule
使用 git submodule add <submodule_url> 命令可以在项目中创建一个子模块
先 cd 到 Cup 项目的根目录,执行以下命令
git submodule add git@github.com:SkyMissT/Water.git
此时项目仓库中会多出两个文件:.gitmodules 和 water
.gitmodules中的信息
[submodule "Water"]
path = Water
url = git@github.com:SkyMissT/Water.git
添加后要再提交一次,远程才能有信息
git commit -m "add submodule xxx"
git push
此时再看git库,这里的Water文件夹,点击会跳到Water的git库,至此submodule添加成功
拉取带有 submodule 的项目
带有submodule的项目直接用 git clone git@github.com:SkyMissT/Cup.git
拉下的代码是不包含 submodule 代码的
git clone git@github.com:SkyMissT/Cup.git --recurse-submodules
这样会递归地将项目中所有子模块的代码拉取。另外一种可行的方式是,在当前主项目中执行:
git submodule init
git submodule update
则会根据主项目的配置信息(.gitmodules),拉取更新子模块中的代码。
本地配置
配置 setting.gradle
include ':Water:app'
配置 build gradle
implementation project(path: ':Water:app')
代码提交
主项目上的代码提交
比如我们主项目与module都做了修改,commit时候是这样的
可以选择只提交一部分,也可以都选择提交,提交到他们各自的仓库,再看 push 的样子
与commit情况类似,可选择的push到远程库
submodule独立项目上的代码提交
与一般的代码提交一样,操作都一样。主项目中的submodule模块push后Water项目该有的全有,Water项目push后主项目也会有
删除 submodule
// 修改 .git/config ,删除 Water 文件下所有的代码
git submodule deinit Water
执行git submodule deinit Water
之前
执行git submodule deinit Water
之后,submodule“Water”被移除
// .gitmodule 文件内容清空,删除 Water 文件夹
git rm Water
// 提交代码
git commit -m "rm Water"
// 推到远程
git push
submodule 被移除
来源:https://blog.csdn.net/xihuailu3244/article/details/119028565
猜你喜欢
- 以前只知道控件的onTouchEvent()事件,它的动作有MotionEvent.ACTION_DOWN、MotionEvent.ACTI
- 复合语句Java的复合语句是以整个区块为单位的语句,由{}以及{}内包含的内容组成对于复合语句来说,复合语句创建了一个局部变量的作用域,该作
- 杨辉三角的规律:1.每行的数据个数和在第几行一样。2.每行第一个数和最后一个数都是1.3.每行除了第一个数据和最后一个数据 其他数据的值等于
- 简介Arthas 是Alibaba开源的Java诊断工具,动态跟踪Java代码;实时监控JVM状态,可以在不中断程序执行的情况下轻松完成JV
- 基于 springboot+vue的测试平台开发一、前端环境搭建在前端框架vue-element-admin这个项目中,有一个简洁轻量型的项
- 在前面的内容已经学会了如何定义变量和初始化变量。定义变量的目的就是为了操作数据。Java 语言中给我们提供了专门用来操作这些数据的代码符号,
- 我们经常会看到有一些app的banner界面可以实现循环播放多个广告图片和手动滑动循环的效果。看到那样的效果,相信大家都会想到ViewPag
- 在Unity中,一般的方法都是顺序执行的,一般的方法也都是在一帧中执行完毕的,当我们所写的方法需要耗费一定时间时,便会出现帧率下降,画面卡顿
- 建造者模式(Builder Pattern)主要用于“分步骤构建一个复杂的对象”,在这其中“分步骤”是一个稳定的算法,而复杂对象的各个部分则
- 使用的是idea+restful风格第一:引入依赖为:<!--poi--> <dependenc
- eclipse中改变默然的workspace的方法可以有以下几种:1.在创建project的时候,手动选择使用新的workspace,如创建
- 这篇文章主要介绍了spring cloud gateway请求跨域问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定
- 参数和返回值得加密目的为了保证接口不被人拦截下来恶意请求,保证程序的稳定性,我们可以使用接口加密的方法来保证参数和返回值的保密性。具体实现方
- 一、java发展史1.java之父:詹姆斯·高家林2.关键时间点:1996年Java(1.0)发布,2004年Java(5.0)发扬光大,2
- SSM在Controller中添加事务管理本人使用:集成开发环境:idea项目管理工具:maven数据库:oracle框架:Spring+S
- 多态概述多态概念:所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定
- 使用@Async异步调用方法Async简介异步方法调用使用场景:处理日志、发送邮件、短信......spring中提供了@Async来实现异
- 使用stream判断两个list元素的属性并输出/*** 使用stream判断两个list中元素不同的item*/@Testpublic v
- 有很多同学肯定想学习opencv相关的知识,但是有些情况下每建一次项目都要重新引入下各种文件是不是很苦恼,所以我也面临了这个问题,在网上看到
- 1.前言NameServer主要作用是为消息消费者和消息生产者提供关于主题Topic的路由信息,那么NameServer需要存储路由的基本信