git submodule 解析

submodule 原理

submodule 是一个版本库,跟你的主版本库实际上是一个东西。

将 submodule add 到你的主版本库,是将一个子版本库的一条提交,也就是head,被主版本库纪录了下来。 主版本库使用这个版本库head之前的代码。

git 是一个文件系统,子版本库的remote地址和这个版本库的head,这些纪录究竟保存在哪里呢。

我们来具体操作一下

我在自己项目中添加了一个临时分支,_my_br, 在这个分支下做下实验

尝试将sqlite作为子版本加入到主版本库中

看一下git status

多了一个.gitmodules, 这里面包括sqlite版本库的.git文件路径,也就是主版本库对子版本库的索引

url 是子版本库的地址,path在主版本库中的目录地址,子版本库head,就存在这个目录里,进去看以下

f69b89a078e2200fee54a9f897e6957bd627d8b7 就是引用的sqlite的head提交,可以验证以下

一模一样。

add submodule 就在git的文件目录里做了以上的事情。

这是submodule的创建

如果submodule有了新的提交项,如何更新到主版本库中的索引呢

在sqlite3中提交一项

head为4a62cb12e3e806a6a7cf016b60422182a5f93df1

回到主版本库

把它交上去

这时候看以下主版本库中的head

也已经更新了

后面就主版本库子版本库就各自push上去就可以了

submodule的更新,就一句基本满足需求 git submodule update --init --recursive, 所有submodule都会被更新,这过程中会用到上面提到的url和head索引

submodule 删除, 这个需要手动删除了

.gitmodules .git/config 这两个文件中删除sqlite对应部分, .git/modules/ 目录中删除 sqlite目录

git submodule 解析

时间: 2024-08-08 16:51:02

git submodule 解析的相关文章

Git Submodule管理项目子模块

使用场景 当项目越来越庞大之后,不可避免的要拆分成多个子模块,我们希望各个子模块有独立的版本管理,并且由专门的人去维护,这时候我们就要用到git的submodule功能. 常用命令 git clone <repository> --recursive 递归的方式克隆整个项目 git submodule add <repository> <path> 添加子模块 git submodule init 初始化子模块 git submodule update 更新子模块 gi

git submodule的使用

开发过程中,经常会有一些通用的部分希望抽取出来做成一个公共库来提供给别的工程来使用,而公共代码库的版本管理是个麻烦的事情.今天无意中发现了Git的git submodule命令,之前的问题迎刃而解了. 添加 为当前工程添加submodule,命令如下: git submodule add 仓库地址 路径 其中,仓库地址是指子模块仓库地址,路径指将子模块放置在当前工程下的路径.  注意:路径不能以 / 结尾(会造成修改不生效).不能是现有工程已有的目录(不能順利 Clone) 命令执行完成,会在当

Tutorial for adding a library project as git submodule and then using it as a studio Module

https://gitsubmoduleasandroidtudiomodule.blogspot.in/I'm writing this blog to make the development process easy and faster. This is specific to Android Studio, same can be used for any other project which used Gradle build system and GIT. I want to m

使用git submodule管理一个需要多个分立开发或者第三方repo的项目

在项目开发中,特别是web前端开发中,有非常多的开源第三方library,我们希望引用他们,同时也希望能够方便地保持这些第三方 开源repo的更新.另外一方面如果我们自己在开发一个网站的项目,这个项目一般分为前端和后端两个相对独立的子项目,特别是前端的repo可能在不同的项目中共享,那么这时,你就可能希望将项目分开为前端和后端两个repo,如何管理这种情况呢?一个比较好的方案就是使用git的submodule功能. 假设我们的父repo在prepo目录,sumodule newtestrepo希

Git全解析之远程仓库交互

文章目录 1. Git全解析之远程仓库交互 1.1. 中央仓库的概念 1.2. 本地分支与远程分支 1.3. pull与fetch 1.4. 关于捐赠 Git全解析之远程仓库交互 中央仓库的概念 虽然说git是分布式版本控制工具,但同样有远程仓库的概念.出于各种目的,我们有时需要有一个共享的远程仓库,如GitHub上的仓库,我们公司项目中用来测试和部署的仓库等.一般的操作步骤是先在公共服务器上创建一个仓库,然后每个开发人员都clone这个仓库进行各自的开发,开发完成后再push到远程仓库进行测试

Git subtree和Git submodule

git submodule允许其他的仓库指定以一个commit嵌入仓库的子目录. git subtree替代git submodule命令,合并子仓库到项目中的子目录.不用像submodule那样每次子项目修改了后要init和update.万一哪次没update就直接"commit -a" 或者 "add ." 全commit上去就悲剧了. git subtree虽然比git submodule更好用,但也不是特别完美的解决方案,使用时一定要特别注意. git-su

git submodule的操作

对于有submodule的库,检出的方法是: git clone https://github.com/BelledonneCommunications/linphone-android.git --recursive 如果由于被墙而不能下载,或者网络问题中途断掉了,可以使用 git submodule update --recursive 接着传送没传的submodule. 如果有submodule被墙了,则可以先再codingnet上导入一个公开项目,这样下载codingnet上的项目:或者

Git Submodule 使用简介

时间 2016-03-05 23:22:27  "地瓜哥"博客网 原文  http://www.diguage.com/archives/146.html 主题 Git D瓜哥从去年开始,将所有的笔记都整合到了自建的 Wiki 中.整理分析,确实方便很多. 最近有两个部分,比较独立,自成系统.其中,有一个模块还考虑和其他小伙伴合作来搞.所以,就将这两部分抽取出来,独立成单独的项目来维护.但是,为方便查看和随时随地同步更新,正好可以使用 Git Submodule 特性. 另外,还有一种

git submodule获取子模块

从github上获取工程,经常会出现依赖其它github上代码的情况,这时如果每一个都手动下载,实在太麻烦了.其实git给我们提供了相互引用的功能,可以在工程中直接引入其它的代码库,这样可以保证每次使用的子模块也都是最新的. git clone https://github.com/Kjuly/iPokeMon.gitgit submodule initgit submodule update