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。