专栏首页iTestingGit 子模块应用简介

Git 子模块应用简介

iTesting,爱测试,爱分享

大家做自动化的时候, 常常碰见这样的情况:你自己的项目,UI自动化需要一些前置条件,而这些前置条件正好是你API自动化项目已经完成了的功能,或者说你的项目有一些依赖,而这些依赖正好属于公用项目的一部分。把这些依赖的共有部分copy到你的项目虽然可用,但万一这些被依赖的功能有更新的话,你就只能跟着修改了,非常不方便。

Git 通过子模块处理这个问题。子模块允许你将一个 Git 仓库当作另外一个Git仓库的子目录。这允许你克隆另外一个仓库到你的项目中并且保持你的提交相对独立。

添加子模块:

1. 直接添加子模块

#切换到本地项目里想添加submodule的目录下, 执行
git submodule add <repository>

命令执行完成,会在当前工程根路径下生成一个名为".gitmodules"的文件,其中记录了子模块的信息。可用如下命令查看提交的新模块:

git diff --cached --submodule

然后提交就完成了子模块的添加:

git commit -m "add submodule iTesting"

提交改动到远程分支:

git push origin master

2. 克隆一个包含子模块的项目:

#直接clone一个包含有submodule的项目
#递归的方式克隆整个项目
git clone <repository> --recursive 

当clone项目时有子模块存在时,第一次是不会顺便clone出子模块的,需要执行如下命令才能发现子模块被checkout出来了:

#初始化本地配置文件:
git submodule init 
#checkout出子模块的文件
git submodule update 

这个时候的子模块文件都已经被checkout出来,你可以当成本地文件一样使用了。不过还有更简单一点的方式, 如果给 git clone 命令传递 --recursive 选项,它就会自动初始化并更新仓库中的每一个子模块

git clone --recurse-submodules <repository>

更新子模块

假如子模块更新了,我们如何拿到子模块的最新代码?

#可以进入到子模块文件目录中运行命令:
git fetch
git merge
#这样会拿到最新代码。
#还有一种方式,直接在根目录下运行:
git submodule update --remote

如果你想自动更新,可以

#根目录下运行
git submodule update --remote repositoryName

修改子模块

#首先需要确认有对Submodule的commit权限
#然后进入到submodule目录里面
正常修改提交即可

删除子模块

#删除子模块目录及源码
rm -rf 子模块目录 
#删除项目目录下.git文件中子模块相关条目,需要手工删除
cd .git
vim config (删除submodule信息)
cd modules
rm -rf * (要看清楚,只删除跟submodule有关的)
git rm --cached 子模块名称

- - 时人莫小池中水, 浅处不妨有卧龙 - -

作者: Kevin Cai, 江湖人称蔡老师。 两性情感专家,非著名测试开发。 技术路线的坚定支持者,始终相信Nobody can be somebody。

本文分享自微信公众号 - iTesting(TesterTalk),作者:iTesting

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 微服务的灾难(1) -- 通用语言

    在架构师们很喜欢的 Domain Driven Design,即 DDD 中,第一课就是教导团队形成自己独有的通用语言(Ubiquitous Language)...

    iTesting
  • 微服务的灾难(3) -- 拆分

    在之前写事故驱动开发的时候,提到过,在企业中的项目进行开发时,只要是自己方便,一个人可以用拆分和收敛同时作为自己的标准。所以大家都是双标狗。

    iTesting
  • 我是如何面试QA的。

    最近遇见一个好玩的bug, 现象是页面刷新白屏,RootCause是Header里放的cookie太多了, 大小超出了4kb的限制.

    iTesting
  • git submodule 管理子项目

    拆分项目,当项目越来越大之后,我们希望 子模块 可以单独管理,并由 专门 的人去维护,这个时候只可以使用 git submodule 去完成。

    zucchiniy
  • MySQL的一些小tip

    我们都知道Create user和grant for都可以用来创建一个用户,那么这两个语句的处理上有什么区别呢?这里我们从MySQL 5.5和MySQL 5....

    AsiaYe
  • 分布式监控系统Zabbix-3.0.3-完整安装记录(2)-添加mysql监控

    Zabbix3.0 Server以后就自带了MySQL插件来监控mysql数据库的模板,只需要配置好agent客户端,然后在web端给主机增加模板就行了。 以...

    洗尽了浮华
  • Acmen-helper一键生成springboot-api基本项目骨架!Easy Coding,Enjoy life!

    还在为繁琐的配置工作和重复的基础Coding而烦恼吗?Acmen-helper一键搞定 。Easy Coding,Enjoy life!

    Meet相识
  • Node.js 中实践 Redis Lua 脚本

    Lua 是一种轻量小巧的脚本语言,用标准 C 语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。由于 Lua ...

    五月君
  • NVIDIA Deepstream 4.0笔记(完结篇):如何开始使用Deepstream​以及容器

    本次笔记整理自NVIDIA 8月20日在线研讨会,原讲座标题:DEEPSTREAM SDK – ACCELERATING REAL-TIME AI BASED ...

    GPUS Lady
  • 深入理解DIP、IoC、DI以及IoC容器 摘要

    本文转载自:https://www.cnblogs.com/liuhaorain/p/3747470.html

    smy

扫码关注云+社区

领取腾讯云代金券