【git】Git Submodule 命令与理解
创始人
2024-06-02 04:55:17
0

【git】Git Submodule 命令与理解

TL;DR

# Add submodule
git submodule add
​
# Clone a project with submodules
git clone --recursive
​
# Update when submodeule remote repo changed
git submodule update --remote
​
# When cloned without recursive
git submodule init
git submodule update
​
# Push submodule change to its remote origin master
cd 
git add -A .
git commit -m "xxx"
git checkout 
git merge master
git push -u origin master

定义

git submodule允许用户将一个 Git 仓库作为另一个 Git 仓库的子目录。 它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立性。

作用

在我这里,它的作用非常明确,即给在各个项目中都会用到的代码段一个公共栖息地,做到“一处改,处处改”。

常用命令

添加

git submodule add
# 直接clone,会在当前目录生成一个someSubmodule目录存放仓库内容
git submodule add https://github.com/miracleyoo/someSubmodule
​
# 指定文件目录
git submodule add https://github.com/miracleyoo/someSubmodule  src/submodulePath

添加完之后,子模块目录还是空的(似乎新版不会了),此时需要执行:

git submodule update --init --recursive

来真正将子模块中的内容clone下来。同时,如果你的主目录在其他机器也有了一份clone,它们也需要执行上面的命令来把远端关于子模块的更改实际应用。

Clone时子模块初始化

clone父仓库的时候加上--recursive,会自动初始化并更新仓库中的每一个子模块

git clone --recursive

或:

如果已经正常的clone了,那也可以做以下补救:

git submodule init
git submodule update

正常clone包含子模块的函数之后,由于.submodule文件的存在someSubmodule已经自动生成,但是里面是空的。上面的两条命令分别:

  1. 初始化的本地配置文件
  2. 从该项目中抓取所有数据并检出到主项目中。

更新

git submodule update --remote

Git 将会进入所有子模块,分别抓取并更新,默认更新master分支。

不带--remoteupdate只会在本地没有子模块或它是空的的时候才会有效果。

推送子模块修改

这里有一个概念,就是主repo中的子模块被拉到本地时默认是一个子模块远程仓库master分支的detached branch。这个分支是master的拷贝,但它不会被推送到远端。如果在子模块中做了修改,并且已经addcommit,那你会发现当你想要push的时候会报错:Updates were rejected because a pushed branch tip is behind its remote。这便是所谓的detached branch的最直接的体现。

解决方法是:在子模块中先git checkout master,然后在git merge ,最后git push -u origin master即可。

这里解释一下这个东西可以使用git branch命令查看。如果你使用的是zsh,那么问题就更简单了,直接在命令提示符处就可以找到。

在这里插入图片描述
在这里插入图片描述

参考

  1. 来说说坑爹的 git submodule
  2. Git submodule使用指南(一)
  3. Working with submodules
  4. Why is my Git Submodule HEAD detached from master?

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...