记 Hexo 部署网站到 GitHub 时遇到的大小写不敏感问题

前言

二月份的时候把博客重新整理了一番,其中也包括了对一些标签的更改如首字母改为大写,之后也没有太在意。直到最近更新的时候查看标签页发现某些标签无法访问,显示了 404 页面。查看了 GitHub 库中的文件后发现无法正常显示的标签页在 tags 文件夹中的文件夹名首字母依旧是小写的,基本确定标签页无法正常显示的原因是大小写不对。

问题

确定是大小写的问题后查看本地的文件夹发现本地文件夹名首字母是大写的,猜想可能是 Hexo 配置问题。使用 hexo clean 命令清除静态文件与缓存文件,重新 hexo g 生成新的静态文件,然后 hexo d 部署到 GitHub 上。然而远程仓库上的文件夹名还是没有改变。

谷歌后发现 git 默认是不区分文件夹大小写的,因此在修改了标签后重新生成静态文件时,本地 public 文件夹虽然已经更新,相应的 tag 文件夹名也已修改为大写,但使用 hexo g 命令部署到 GitHub 时是不区分大小写的,导致远程仓库中的文件夹名依旧是小写的。

发现问题后就好解决了,git 不区分大小写的问题一般有两个解决方法:

  1. 通过 git mv 操作来避免 git 不识别

    1
    2
    git mv myfolder tmp
    git mv tmp MyFolder

    因为我使用的 macOS 系统也是不区分大小写的,所以无法使用如下命令

    1
    git mv myfolder MyFloder

    需要通过一个中间临时名称来改名。

  2. 修改 git config

    1
    git config core.ignorecase false

    使用这个方法时会发现最后提交修改后在远程仓库中会同时存在 如 myfloderMyFloder 两个文件夹,新的文件夹会标记 change to commit。再会看 git add 时会发现文件都是新增的,可以理解为并不是把文件名修改了,而是把原来的文件夹中的文件复制到新的文件夹中,然后应用新的文件夹,并且把以后 commit 的修改都提交到新的文件夹中。

    虽然对于强迫症者来说同时存在两个文件夹很难受,但眼不见心不烦,再次访问博客,这时所有的标签页都已经可以正常显示了。

##真·问题

本来以为就此解决了的,但是再次使用 hexo d 部署网站的时候发现远程仓库之前的修改都被覆盖了,重新回到了之前的状态,所有的记录也都是 Hexo 的提交记录,又回到了原点。

没办法,只能尝试终极大招—删库。在 GitHub 把该远程仓库删除,再新建一个远程仓库,然后冲洗部署网站。But ,新的仓库所有的文件居然和之前删除的库是一样的,甚至连提交记录都保存着。细想应该是本地的仓库保存着 git 记录, push 时把记录一起同步了。

最后的解决方法:新建一个博客。即 hexo init 新建一个博客目录,然后把原来的资源复制到新的博客目录中,这样就摆脱了原来的 git 记录,然后把新博客生成的静态文件部署到远程仓库。至此,终于解决大小写的问题,博客恢复正常。

补充(2018-04-04)

今天再想想这个问题,觉得可能是我的方法不对。原来我的方法是把远程仓库 clone 到本地,修改大小写后再 push 到远程仓库。这样最后会被 hexo d 覆盖。

也许应该直接在原本的博客文件目录中通过 git mv 操作来修改大小写,然后再 hexo d 部署网站应该可以解决。先记录下来,以后有机会再做尝试。