Git 子模块 - submodule(转)
原文地址: http://www.cnblogs.com/kelsen/p/5918672.html
有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目。 也许是第三方库,或者你 独立开发的,用于多个父项目的库。 现在问题来了:你想要把它们当做两个独立的项目,同时又想在 一个项目中使用另一个。
Git 通过子模块来解决这个问题。 子模块允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。 它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立。
开始使用子模块
git submodule add remotePath [localPath]
克隆含有子模块的项目
git clone remotePath
git submodule init # 初始化本地配置文件
git submodule update # 从该项目中抓取所有数据并检出父项目中列出的合适的提交。
在包含子模块的项目上工作
进入子模块目录中手动抓取与合并
- 进入子模块目录
git fetchgit merger origin/master- 进入主仓库目录
直接在主仓库里抓取与合并子模块
git submodule update --remote
在子模块上工作
当我们运行 git submodule update 从子模块仓库中抓取修改时,Git 将会获得这些改动并 更新子目录中的文件,但是会将子仓库留在一个称作 “游离的 HEAD” 的状态。 这意味着没有本 地工作分支(例如 “master”)跟踪改动。 所以你做的任何改动都不会被跟踪。
git checkout stable 进入子模块并检出相应的工作分支
git submodule update --remote 从上游拉取数据
git submodule update --remote --merge 从上游拉取数据并合并发布子模块改动
如果我们在主项目中提交并推送但并不推送子模块上的改动,其他尝试检出我们修改的人会遇到 麻烦,因为他们无法得到依赖的子模块改动。 那些改动只存在于我们本地的拷贝中。
为了确保这不会发生,你可以让 Git 在推送到主项目前检查所有子模块是否已推送。 git push 命令接受可以设置为
check或on-demand的 --recurse-submodules 参数。 如果任何提交的子模块改动没有推送那么check选项会直接使 push 操作失败。提交主项目时自动检测子模块是否有未提交的改动
git push --recurse-submodules=check
提交主项目时,尝试自动推送一改动的子模块
git push --recurse-submodules=on-demand
子模块技巧
- 子模块遍历
有一个 foreach 子模块命令,它能在每一个子模块中运行任意命令。 如果项目中包含了大量子模块,这会非常有用。
- 有用的别名
你可能想为其中一些命令设置别名,因为它们可能会非常长而你又不能 设置选项作为它们的默认选项。
子模块的问题
例如在有子模块的项目中切换分支可能会造成麻烦。 如果你创建一个新分支, 在其中添加一个子模块,之后切换到没有该子模块的分支上时,你仍然会有一个还未跟踪的子模块目录。
Git 子模块 - submodule(转)的更多相关文章
- Git 子模块 - submodule
有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你 独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想在 一个项目中使用另 ...
- git子模块submodule
添加submodule: git submodule add 子模块git地址 把这个module放置的文件夹(这个文件夹须事先不存在) git submodule add http://xxx.x ...
- Git子模块引用外部项目
Git子模块(submodule)简介 经常有这样的事情,当你在一个项目上工作时,你需要在其中使用另外一个项目.也许它是一个第三方开发的库或者是你独立开发和并在多个父项目中使用的.这个场景下一个常见的 ...
- Git 子模块:git submodule
imtianx 2018年03月08日阅读 2057 Git 子模块:git submodule 工作中,可能会遇到在一个Git仓库 中添加 其他 Git 仓库的场景.比如,在项目中引用第三方库.或者 ...
- git submodule git 子模块管理相关操作
Git 子模块操作相关的一些命令备忘: # 当使用git clone下来的工程中带有submodule时,初始的时候 submodule的内容并不会自动下载下来的,需执行如下命令: git submo ...
- git中submodule子模块的添加、使用和删除
git中submodule子模块的添加.使用和删除 原文链接:https://blog.csdn.net/guotianqing/article/details/82391665背景项目中经常使用 ...
- github克隆项目中的子模块submodule时遇到的问题
GitHub真是个开源大宝库,不只能学习代码,还能学习git的使用! 最近在研究Off-the-Record-iOS项目(https://github.com/chrisballinger/Off-t ...
- git get submodule after clone
/********************************************************************************* * git get submodu ...
- jenkin+Git子模块自动拉取代码
jenkins+Git子模块自动拉取代码 添加Git子模块 先克隆想要添加子模块的仓库git clone ssh://git@ip:port/user/project.git,这个是主目录. 进入仓库 ...
随机推荐
- C#中的BeginInvoke和EndEndInvoke 异步问题
- 2190 ACM 数学概率论的乘法和加法原则
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2190 思路:明显我们要寻找 边长为n和边长为n-1,n-2,n-3·····的规律,这样得出一个递推公式就 ...
- 潭州课堂25班:Ph201805201 django 项目 第三十四课 后台文章标签更新功能 ,创建功能实现(课堂笔记)
g更改标签:,前台要向后台传来 id, name, 对标签进行校验:标签不能为空,标签是否已经存在, 流程: def put(self, request, tag_id): ''' 更改标签 :par ...
- usaco-5.3.3Network of Schools 校园网
题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意如果 B 在 A 学校的分发列表中,那么 A 不必也在 B 学校的列表中. 你要 ...
- Mssql数据库与Excel导数据
*.xls 2003的excel有行数限制,65535行好像,所以数据库行数多的时候,选择导出为*.xlsx文件 要装一下Microsoft.ACE.OLEDB.12.0(以下简称 ACE 引擎) ...
- python之模块3
RE模块使用方法 (1)finditer 返回迭代器 (2)search:只匹配第一个结果 import re res=re.search("\d+","djksf34 ...
- 关于实现udev/mdev自动挂载与卸载
在网上有很多关于讲mdev的自动挂载基本上都是一个版本,经过测试自动挂载确实可行,但是关于自动卸载mdev似乎不能很好的支持,经过修改已经可以做到与udev的效果相似.不能在挂载的目录中进行热插拔,否 ...
- 完善mui的tap及longtap点击效果
以下为原版效果: 以下为我们改版的效果: 希望你们能看出差别,很细小,但更适合我们的需要.就是选中背景色的问题,官方的是点一下背景色就没有了,我们的是选中一直存在.
- Zip文件和RAR文件解压
直接上工具类: package com.ksource.pwlp.util; import java.io.File; import java.io.FileOutputStream; import ...
- JSP展示两位小数
<td class="thCenter"> <fmt:formatNumber type="number" value="${rec ...