Git submodule 的笔记
这次不造轮子,写写文章。
最近想把自己的 blog 整理到 github 上,但由于其中依赖了一些主题以及插件,这时候 git submodule 就能很好的处理这种情况了。
submodule 是什么?
submodule 顾名思义,子模块。在一个项目依赖其他 git 上的模块时就很有用处了。
以我自己这次修改做例子:
我的 typecho 博客 依赖了 主题 typecho_material_theme 和 插件 Links_for_Material_Theme
那写下来就写写整个过程。
冻手不?冻手
准备
- 已有一个 typecho 项目,可以从 github 上 fork 一个 https://github.com/typecho/typecho
- 对应的一个 github 仓库,如 https://github.com/HanSon/my-blog
- 记得把 .gitignore 中的
/usr/theme
和/usr/plugins
相关路径去掉(在最底部的4行)
动手
开始增加子模块(最后为路径)
cd typecho
git submodule add git@github.com:HanSon/typecho_material_theme.git usr/theme/typecho_material_theme
git submodule add git@github.com:HanSon/Links_for_Material_Theme.git usr/theme/Links
这时候应该能看到开始对两个库 clone 中,查看一下 git status
, 应该能看到修改的有多了两个库,以及 .gitmodules
的修改
git status
然后我们来提交到 github 中
git commit -am "增加子模块"
git push origin master
这时就已经成功提交到 github 上了,我们来看看 github 上是如何显示 submodule 的
可以看到多了两个不一样的图标,点击自动跳转去该仓库的地址(@ 后面代表的是 commit id)
来 pull
git clone https://github.com/HanSon/my-blog.git
cd my-blog
pull 完发现只剩下文件夹,submodule 并没有内容,需要先初始化 submodule 并且 update
git submodule init
git submodule update
这时候就发现 submodule 的内容已经 pull 下来了!
如果更新了 submodule , project 应该如何跟着更新?
-
按需更新。 去到相对应的 submodule 目录执行
git pull origin master
即可。 -
简单粗暴,全部更新。
git submodule foreach git pull origin master
这次给我的博客加上了播放哈林摇的功能 http://hanc.cc
你还可以把上图的 Let's party
拖到书签栏,然后访问你想要摇的网站,点击刚保存的书签进行摇一下。
PS:上面所述为实操后凭记忆记下来的,如有遗漏欢迎补充
本作品采用《CC 协议》,转载必须注明作者和本文链接
git submodule
确实也很好,但是在多个项目中使用同一个submodule还是要慎重。@khsing 所以现在才会有这么多包管理工具,但对于博客来说,submodule 是个不错的选择
老司机 666 稳!
@Destiny
一起开车
@khsing 确实,用了大半年之后发现多项目使用相同的 submodule ,并且都有对子项目进行修改的情况下十分坑。
楼主这种场景倒是比较合适。
@takashiki 在多个项目都需要修改的场景下用submoudel可以先分branch,但是这样基本就失去意义了,更好的办法是写成composer可安装组件用版本来控制
submoudel is evil
@binafor 看情况而定的,一般慎用
@anyuzhe 你指哈林摇?就JS脚本而已