前排
-
概念 :git-submodule 是 git一个管理共同类库的工具,使得一个项目的自完备子模块能够自我升级和管理。而主模块只需实时去统一更新即可。
经验谈:为什么突然研究这个呢?应该目前项目是 Swift 写的,用的是 cocoapod 管理。 之前的想法就是 cocoapod 用来导入 swift 库,一些 OC 框架或私有库都是直接拉代码进去的,每次框架升级的时候都要将升级的代码替换掉旧版本的代码。 所以就想研究这个自由度比较高的管理类库的工具,发现当前还是比较符合自己的要求。
操作
-
添加
-
命令
git submodule add {git repository url} -
配置
1.cd MyProject 到自己目录下 2.mkdir Frameworks 创建一个存放子模块的目录(这一步可忽略) 3.git submodule add {git repository url} 添加相关的模块,这时相关的框架就被添加到主项目中 4.将相关模块的文件夹中 submodule.xcodeproj 拉到主项目中。 到相关路径下配置依赖 Targets -> mainModule -> Build Phases -> Target Dependencies -> 点击 + 进行添加,下面上图。 5.在用到模块直接 import 就可以使用了
-
-
更新
-
当将项目提交 git 上时,并不会将已下载的主模块代码上传。所以不管是第一次从 git 上拉取代码下来,还是每次拉取更新都要执行以下代码进行更新和下载 主模块,这里一些人的习惯可能会出现一些坑,详情参见下面唐巧前辈的文章。
-
命令
git submodule initgit submodule update
-
-
删除
-
在要知道怎么删除之前, 知道 git submodule add 这个代码到底做了那些事情, 会更好理解一点。
-
如果第一次运行该代码的话,会生成一个 .gitmodules,并且将库的信息配置添加进去,如果不是第一次就直接在 .gitmodules 添加新的子模块的信息
[submodule "Frameworks/Kingfisher"] path = Frameworks/Kingfisher url = https://github.com/onevcat/Kingfisher.git [submodule "Frameworks/Alamofire"] path = Frameworks/Alamofire url = https://github.com/Alamofire/Alamofire.git -
会在 git submodule add 运作的目录下拉取子模块的代码,比如上面是在 MyProject/Framesworks 下 生成 Kingfisher 文件夹并拉取代码
-
会在 .git/modules 的目录下生成子模块相对应的文件夹,并放置一些 git 相关的信息文件。
-
-
删除步骤
1.git submodule deinit -f submodule 将子模块从主模块中脱离出来。 注意自己只是脱离,并没有完成删除,如果你还想恢复的话,可以直接通过上面更新的两条命令找回来。 2.git rm --cached submodule 将对应的缓存删除 3.rm -rf submodule 删除脱离后留下的文件夹 4.rm -rf .git/modules/submodule 删除子模块的 git 信息 5.把 .gitmodules 中的信息删除 6.把项目中子模块的依赖删除,删除路径见👆添加步骤
-
-
坑
- 由于我也是刚开始用,而且都是一个人用的,所以目前没遇到什么坑。但我查资料的过程中看到唐巧前辈的文章,里面提示了需要注意的一些点。大家可以参考一下。
-
批处理
- 我在查询资料的时候好像没找到可以像 cocoapod 那样直接利用多个库的连接配置文件,通过一条命令添加多个库和删除多个库的方法。可能如果要做就需要自己写脚本吧。不知道有没哪位熟悉这模块的有相关方法的,如果有的话请指教。
总结:
特点:经过一番实验后发现,相对比与 cocoapod 的来说管理的自由度高,但是操作比较繁琐, 目前没找到什么好的批处理管理方法。目前打算用来管理自己的私有库或者一些 OC 库。