欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Hexo多客户端同步问题

程序员文章站 2022-03-15 22:12:41
...

在家里同步github上的博客源码时发现无法同步themes/next,本文主要记录用git subtree解决该问题(其他theme方法相同),对于Git使用不太熟悉的朋友 可以看下这篇文章

原因

next的集成文章中是用clone方法来使用的,而git无法直接管理这样的嵌套模块。

解决

方案一: 简单粗暴解决

直接删掉next/.git文件夹,将next当成普通的文件加入到版本控制当中,但是这样操作之后无法更新next主题。

方案二: subtree
  1. 首先需要在自己的github上fork一份next源码


    接着会在自己的github Repositories中多出一个同名项目

  2. 添加subtree

# 添加远程仓库 
# git remote add -f <子仓库名> <子仓库地址>
$ git remote add -f next [email protected]:LittleSmileMonkey/hexo-theme-next.git

# git subtree add --prefix=<子目录名> <子仓库名> <分支> --squash
$ $ git subtree add --prefix=themes/next next master --squash
复制代码

此阶段碰到的bug: 因为之前已经clone过next项目到themes/next中,所以直接操作第三步第二条命令时会出现下面错误


尝试删除next文件夹然后执行(记得将自己修改过的例如_config.yml备份),会出现下面错误

删除本地仓库的themes/next 并提交到远程仓库以保证working tree处于未修改状态
至此已将自己fork的next主题当成subtree添加到项目中
3. 推送next中的修改
其实对整个项目的pull、push同样会对子项目起作用(比较推荐),这里记录一下单独对next子项目进行pull、push操作
我们将目录中的next/_config.yml替换为之前备份好的,然后执行下面命令推送到远程仓库

# 将修改的文件commit到本地仓库
$ git commit -a -m '更新备份的_config.yml文件'

# git subtree push --prefix=<子目录名> <远程分支名> 分支
$ git subtree push --prefix=themes/next next master  

# git subtree pull --prefix=<子目录名> <远程分支名> 分支
$ git subtree pull --prefix=themes/yilia yilia master  --squash
复制代码

此时可以看到fork的next仓库更新了

方案三: submodule

没有实践过,但是从网上subtree和submodule的对比来看,似乎subtree完胜submodule,因此如果有愿意踩坑的小伙伴可以自行尝试。

转载于:https://juejin.im/post/5b83a21651882542f9331b7d