Git Submodule简单操作
基于组件的项目很多,但是如果直接用包的方式直接引用到项目中,如果出现问题很难进行调试的操作,也很难进行组件的优化和管理,所以写了一篇文章来介绍下git submodule的用法,用submodule可以一定程度上解决组件难以管理的问题。接下来我用两个测试项目来演示下submodule的基本用法。
新建Git仓储库
在本地clone我们的父项目,并查看当前repository状态
添加子模块
命令:git submodule add XXXXX
查看当前repository状态,除了刚刚添加的 公共库模块外,还多了一个 .gitmodules 文件。这个文件就是用于记录子模块的路径对应远程版本库地址的地方
这两个文件处于待提交状态,我们把它推送到服务器。查看我们当前repository的目录
可以看见在我们git repository中多出一个modules的文件夹,这个是存放的我们子模块reposirory的相关信息,父模块不会记录submodule的变动,只会记录一个子模块提交日志的指针,后面我们可以在更新中看到相关的内容。到此为止,我们的子模块就建立完毕了,下面来说下submodule的一些操作。
到码云中查看我们当前的项目结构
可以在我们的项目目录中看见我们submodule引用的repository,后面的数据就是我们submodule提交的指针。我们把公共类库中的项目引用到当前项目,就能进行正常的开发调试工作了。但是为了强化我们公共类库的管理,一方面不能大范围的开放commit权限,另一方面我们使用中也尽量使用fork的方式来避免一些误操作更改了我们的公共类库(这种方式在更新方面就有点麻烦)。
submodule的更新
我们在公共类库中添加了一个名为SubModuleTest.txt的文件,并推送到服务器。
在我们项目中更新子模块组件使用命令 git submodule foreach git pull
可以看见我们指针的变化,而且当前reposirory有一个新的待提交更改,为什么更新之后还需要提交?其实,Git 在父仓库中记录了一个子模块的提交日志的指针,用于保存子模块的提交日志所处的位置,以保证无论子模块是否有新的提交,在任何一个地方克隆下项目时,各个子模块的记录是一致的。避免因为所引用的子模块不一致导致的潜在问题。如果我们更新了子模块,我们需要把这个最近的记录提交到版本库中,以方便和其他人协同。这也是刚刚添加完子模块后还要在父仓库中提交一次的原因。
把项目推送到码云上后,在码云中可以见看见我们指针的更改。
submodule克隆
clone Submodule有两种方式 一种是采用递归的方式clone整个项目,一种是clone父项目,再更新子项目。主要说下第一种方式这是最新的也是较简便的方式。
1. 采用递归参数 –recursive
git clone https://git.oschina.net/DekeXing/TestSubmoduleParent.git –recursive
可以看到init Submodule 会自动被clone下来。但是克隆submodule的时候可能因为用户名的原因而导致错误,可以提前让git记住账户名密码使用指令 git config –global credential.helper store
submodule删除
git rm XXXX
submodule的坑
submodule项目和它的父项目本质上是2个独立的git仓库。只是父项目存储了它依赖的submodule项目的版本号信息而已。如果你的同事更新了submodule,然后更新了父项目中依赖的版本号。你需要在git pull之后,调用 git submodule update来更新submodule信息。
这儿的坑在于,如果你git pull之后,忘记了调用 git submodule update,那么你极有可能再次把旧的submodule依赖信息提交上去。对于那些习惯使用 git commit -a的人来说,这种危险会更大一些。所以建议大家:
–.git pull之后,立即执行git status, 如果发现submodule有修改,立即执行git submodule update
–.尽量不要使用 git commit -a, git add命令存在的意义就是让你对加入暂存区的文件做二次确认,而 git commit -a相当于跳过了这个确认过程。
另外尽量不要在子模块中进行修改,即使用的是fork的方式,我们组件的修改还是统一到组件的reposirory中进行维护。
最后说下组件的问题,尽量把组件设计得低耦合一点,采取接口的方式,让组件的修改尽大可能不影响到组件的依赖项。
Git Submodule简单操作的更多相关文章
- git submodule的操作
对于有submodule的库,检出的方法是: git clone https://github.com/BelledonneCommunications/linphone-android.git -- ...
- git submodule相关操作
$ cd 项目目录 // 初始化 $ git init $ git submodule add https://github.com/XXXX // 普通更新 $ git submodule upda ...
- 关于git的简单操作
首先这篇随笔我是不太想写的,因为网上有很多教程,我也是看廖雪峰大神的git教程自学的.还是一个小学生,就当一个学习笔记了,如果你想看大神的原版,请点击这里.我们原来都是用svn的,但是越来越觉得svn ...
- Git的简单操作
一.Git安装 windows下,可在在git官网下载(https://git-scm.com/downloads) 也有360提供的git(http://baoku.360.cn/soft/show ...
- git submodule一些操作
checkout指定tag cd /path/to/yoursubmodule git checkout yourTag cd .. git add yoursubmodule git commit ...
- Git Bash 简单操作
在Windows下使用Git Bash,用的是Linux命令,常用几个文件操作命令如下: Windows命令 Linux命令 意义 cd e:\xxx cd /e/xxx 切换到xxx目录 cd pw ...
- Git标签 简单操作
感谢廖雪峰老师,以下内容多数来自老师的Git教程. 另有部分参考Git中文文档. 创建 命令git tag <tagname> [commit id]用于新建一个标签,默认为HEAD; 也 ...
- Git Submodule使用完整教程
Git Submodule功能刚刚开始学习可能觉得有点怪异,所以本教程把每一步的操作的命令和结果都用代码的形式展现给大家,以便更好的理解. 1.对于公共资源各种程序员的处理方式 每个公司的系统都会有一 ...
- Git submodule update 命令执行
git submodule update操作可能导致执行.gitmodules文件中定义的任意shell命令. 受影响的产品 Git版本2.20.0至2.24.0 修复版本 Git v2.24.1,v ...
随机推荐
- Leetcode_202_Happy Number
+ 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1 思路: (1)题意为判断给定的整数是否为一个"快乐的数",所谓快乐的数需 ...
- 【cocos 2d-x】VS2012+win7+cocos2d-x3.0beta2开发环境配置
本系列文章由@二货梦想家张程 所写,转载请注明出处. 作者:ZeeCoder 微博链接:http://weibo.com/zc463717263 我的邮箱:michealfloyd@126.com ...
- android的ndk开发简介-android学习之旅(93)
环境搭建 1.安装ndk 2.安装cygwin (android是基于linux的Framework,运行的本地库是.SO,而不是.dll库,大部分都实在windows下开发,如果是linux就没这个 ...
- obj-c编程09:块的语法
在obj-c中,有一种和C截然不同的东西--块.块可以在外边定义,也可以在函数或方法内部定义,可以被赋值给一个变量,然后用该变量调用.默认情况下块对外部变量的访问只能读不能写,除非用__block显示 ...
- LeetCode(45)-Bulls and Cows
题目: You are playing the following Bulls and Cows game with your friend: You write down a number and ...
- 十六进制颜色转换为iOS可以用的UIColor
// // UIColor+Transformation.h // ContactApp // // Created by 袁冬冬 on 15/9/11. // Copyright (c) 2 ...
- solr研磨之性能调优
作者:战斗民族就是干 转载请注明地址:http://www.cnblogs.com/prayers/p/8982141.html 本篇文章我们来了解一下solr的性能方面的调优,分为Schema优化 ...
- 轻松解决oracle11g 空表不能exp导出的问题
轻松解决oracle11g 空表不能exp导出的问题 [引用 2012-9-22 18:06:36] 字号:大 中 小 oracle11g的新特性,数据条数是0时不分配segment,所以就不 ...
- web 高并发分析
<高并发Web系统的设计与优化>的读后感 一口气看完了<高并发Web系统的设计与优化>,感觉受益匪浅,作者从高并发开始讨论问题,并逐步给出了非常有建设性的想法和建议,是值得我们 ...
- Nuget发布教程
nuget setApiKey Your-API-Key -Source https://www.nuget.org/api/v2/package nuget spec nuget pack Monk ...