初识Submodule

初识Submodule

通常,大型的工程总会被拆分成一些自工程,这样既有利于开发过程中开发难度的降低,也有利于使用现有的方案或者模块作为自工程。Git的高级功能Submodule就是完成这样一种自工程拆分和整合的工具。当然了,一些小公司或者一个公司就一个项目那就爱咋样咋样了,如果是外包公司或者相对来说规模比较大,App产品比较多(多个App具有相同模块)的公司,Submodule是一个不错的选择。举个例子:某司是一个做社交类应用的公司,而且有多个社交App,纵观当今的社交类App,不就那几个鸟样子,基本上都包含聊天,空间,登陆注册。这个时候我们就可以适当地把聊天,登陆注册,网络请求之类的模块做成Submodule。当开发第二个甚至更多个需要集成这些模块的App时,我们只需要在相应的主工程中添加对应的submodule就可以轻轻松松把上个App的登陆注册及网路请求模块拿过来用,稍微改下、或者是不需要改就可以实现登陆注册及网络请求的功能。不仅仅能节省开发的周期,也能使我们很方便的对项目进行管理。

好了,废话也不再多说,直接上干货。

1.创建工程.

首先我们创建一个普通的iOS工程(SubmoduleApp)和两个名字分别叫做SubmoduleLogin和SubmoduleNetWork的静态库(framework)。

1.SubmoduleLogin:主要实现APP的登陆注册等功能。
2.SubmoduleNetWork:主要封装了APP的网络请求等功能。
3.SubmoduleApp:主要负责实现APP除了SubmoduleLogin和   SubmoduleNetWork所实现的功能以外的功能。

在此,创建工程的过程我就不再赘述,相信做iOS开发的都会,如果实在不会可以自行谷歌。

2.分别上传项目到Github上.

(在此只是为了做演示,代码就直接上传到Github上。但在实际开发中公司一般都会搭建自己的Git服务器。号外号外:不要忘记加gitignore哦!)

Tips:有时,当我们把项目上传到Git上之后才想起加gitignore文件。加入后发现并未生效,原因是gitignore只能忽略那些原来没有被track的文件,如果这些文件已经纳入了版本管理中,则gitignore是无效的,解决办法就是先把本地缓存删除,改变成为未track的状态,然后再提交

$git rm -r --cached

上传代码到Github我之前的博客已经提到,如果有不会的刻意点击这里上传代码到Github查看具体的步骤。再次也不在赘述。

上传代码到Git上后,获得三个SSH。分别是:

SubmoduleApp:git@github.com:wdxgtsh/SubmoduleApp.git
SubmoduleNetWork:git@github.com:wdxgtsh/SubmoduleNetWork.git
SubmoduleLogin:git@github.com:wdxgtsh/SubmoduleLogin.git

其实,当我们在Github网站上创建好仓库后,Github会我们提示怎样用命令行创建仓库并上传代码到Github。在此推荐大家在正常的项目开发中都学学使用命令行来操作,一来刻意省去很多不必要的麻烦,二来也可以装装逼么(������)……

3.克隆SubmoduleApp工程到本地,并添加Submodule.

在此,我们整个过程全部用命令行实现:

  • 首先,克隆SubmoduleApp工程到本地。(git clone git@github.com:wdxgtsh/SubmoduleApp.git)
    //克隆项目到本地
    zhaolei-2:Desktop apple$ git clone git@github.com:wdxgtsh/SubmoduleApp.git
Cloning into 'SubmoduleApp'...
remote: Counting objects: 29, done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 29 (delta 2), reused 29 (delta 2), pack-reused 0
Receiving objects: 100% (29/29), 14.44 KiB | 0 bytes/s, done.
Resolving deltas: 100% (2/2), done.
Checking connectivity... done.
  • 其次,为SubmoduleApp添加Submodule。 (git submodule add git@github.com:wdxgtsh/SubmoduleLogin.git)
//为SubmoduleApp添加Submodule(SubmoduleLogin)
zhaolei-2:Desktop apple$ cd SubmoduleApp/
zhaolei-2:SubmoduleApp apple$ git submodule add git@github.com:wdxgtsh/SubmoduleLogin.git
Cloning into 'SubmoduleLogin'...
remote: Counting objects: 17, done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 17 (delta 1), reused 17 (delta 1), pack-reused 0
Receiving objects: 100% (17/17), 9.24 KiB | 0 bytes/s, done.
Resolving deltas: 100% (1/1), done.
Checking connectivity... done.
zhaolei-2:SubmoduleApp apple$ git submodule add git@github.com:wdxgtsh/SubmoduleNetWork.git
Cloning into 'SubmoduleNetWork'...
remote: Counting objects: 17, done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 17 (delta 1), reused 17 (delta 1), pack-reused 0
Receiving objects: 100% (17/17), 9.22 KiB | 0 bytes/s, done.
Resolving deltas: 100% (1/1), done.
Checking connectivity... done.

到此为止,我们已经为SubmoduleApp添加了两个Submodule(SubmoduleLogin和SubmoduleNetWork)

  • 再次.提交SubmoduleApp,
4.克隆含有Submodule的git仓库
  • 第一种方法:

    $cd workspace
    $git clone git@github.com:wdxgtsh/SubmoduleApp.git
    //不同于clone普通的仓库,含有submodule的仓库还需要将该仓库中的子模块初始化以及更新,不更新的话其中的submodule只是克隆了两个空的文件夹下来。
    $git submodule init
    $git submodule update
  • 如果觉得上述方法太繁琐,没事,还有更简单的方法:

    //该命令会自动完成一系列必须的动作
    $git clone --rescursive git@github.com:wdxgtsh/SubmoduleApp.git
5.Podfile文件

通过上面的步骤,我们创建了一个含有submodule的iOS工程,但是,当我们用Xcode打开SubmoduleApp项目时,发现根本导入不了两个submodule的头文件,并且,在当前Xcode页面也找不到任何submodule的痕迹。莫慌,加入了两个submodule后,我们需要一个workspace来管理SubmoduleApp及其它两个Submodule。在clone下来的工程中创建并编辑Podfile文件如下:

inhibit_all_warnings!
platform :ios, '7.0'
workspace 'SubmoduleApp.xcworkspace'
target 'SubmoduleApp' do

xcodeproj 'SubmoduleApp'
end

target 'SubmoduleLogin' do

xcodeproj 'SubmoduleLogin/SubmoduleLogin'
end

target 'SubmoduleNetWork' do

xcodeproj 'SubmoduleNetWork/SubmoduleNetWork'
end

关掉Podfile文件,在Podfile根目录下,运行pod install。

6.打完收工。

这样做的好处是,当公司新开另外一个项目时,网络请求肯定是可以拿之前封装好的用了,正常的我们一般Copy and Paste,但是,如今我们用Submodule后,可以把网络请求的SubmoduleNetWork作为新项目的Submodule,一直方便快捷,而且方便管理。
当然了,Submodule远远不止这些东西,这篇博文只是讲了其冰山一角的用法而已,虽然说不是太全面,但是在平时的工作中还是比较实用的。如果对上述有疑问的地方可以联系我,大家一起交流进步:

  • QQ:729376398
  • email: zhaolei_dubai@163.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值