git子模块的使用方法
文章目录
【注意】最后更新于 May 22, 2019,文中内容可能已过时,请谨慎使用。
背景
感觉自己比较啰嗦,什么时候总想交代一下缘由。 故事的的开始是,我在使用 hexo 的时候, 想用git 做一下版本管理。为了主题能够方便升级(也许我以后一直不会升级的), 直接clone了原始库。做完自己的配置后,回不到原始库就推到了码云 上了。为什么要退到码云上,是因为它可以建免费的私有项目,我又没有自己的网络主机。之后问题就出来了,我有两个库,一个是文章的,一个是主题加主题配置的,怎么管理。
git子模块
网上看了半天,选定了 git 子模块的解决办法。可能一次说不完所有的,我遇到那些说那些吧。
增加子模块
|
|
等等,我这里是准备用来做主题的,不能直接放到根目录下面,所以执行了下面的命令
|
|
这样,在根目录下就有了 themes/next
目录,这个目录里面就是主题的各种文件了。
子模块的基本操作
子模块毕竟不是在一个仓库里面的,看着官网的说明,感觉好复杂,差点想要放弃(反正我也不一定回去更新主题,即使更新,大不了再下载一下,成本貌似更低)。
本地子模块工作
在子模块下面工作可以当作是在单独的仓库工作一样,正常的 add commit pull push , 因为我是一个人工作, 目前还是在一台机器上,所有很多问题没有遇到。当主模块要提交时,需要执行 git push --recurse-submodules=check
,推送时检查子模块的状态。
clone包含子模块的仓库
仓库拷贝与初始化
包含有子模块的仓库拷贝有点特殊的地方,完成拷贝后,需要执行下面的命令
|
|
上层项目的操作
子模块外的操作基本与一般的仓库操作一样,没有太多的区别。还是要注意一下问题。
- 当需要更新 子模块的最新代码时,需要执行下面的命令
|
|
子模块的操作
子模块有个问题,运行git submodule update
,它会检出指定项目的指定版本,但是不在分支内。这叫获得一个分离的头,因为HEAD指向的是一次提交,而不是一个引用的符号,在分离的头环境下工作很容易丢失变更。如果要在子模块里面工作,建议创建一个分支,或者使用该提交的分支(例如,配置文件就我自己用,我一直工作在 master上)
踩过的坑
- 不要在向里面包含非子模块的仓库,
参考资料
文章作者 jeffrey
上次更新 2019-05-22