在 windows 下一切正常,发布到 github 不正常。

前提

我是直接将 hexo g 生成的 public 目录提交至 github 的,没有使用集成工具。

现象

在 windows 下,对标签、分类的修改,如果仅限于字母的大小写:没有增加和减少字母,只是改变了某一个或多个字母的大小写,就会出现这样的情况:

  1. 在 windows 下 hexo s 预览,标签和分类均正常。
  2. 发布到 github 之后,就不正常了,显示 404,到 tabs 和 categories 目录下去看,发现还是之前的大小写。
  3. 也就是说,对标签、分类的仅限于大小写的修改,不会同步至 github。
  4. 而在 windows 下,tags 和 categories 目录下的文件夹的大小写是被同步修改了的。

原因分析

  • 应该是 windows 对字母不区分大小写,表面上看是改过的大小写,实际上 windows 记录的是之前的名称。不光是 git 提交到 linux 有这样的问题,svn 提交到 linux 也有同样的问题。
  • 修改文件名称也是类似的。

解决

知道原因就好办了。这里举例说明,我之前有一个 tag 和 category,名称为 Java,现在我需要将其改为 java。在文章中是这样设置的:

1
2
tags: [Java]
categories: [Java]

  1. 直接到 public/tagspublic/categories 下,将 Java 目录删除并 commit 和 push。
  2. 修改为新名称: java

    1
    2
    tags: [java]
    categories: [java]
  3. 如果在执行第1步之前,已经修改成新名称,并且已经执行 hexo g,那么,public/tagspublic/categories 下对应的目录将会是 java,将其删除后,commit 和 push。

  4. 执行 hexo g,再次 commit 和 push。

提交最新修改至 github,经验

  1. 在 public 目录下创建后缀为 sh 的脚本文件 deployDirectly.sh,文件内容如下:

    1
    2
    3
    4
    5
    6
    7
    git pull # 如果每次都是在同一台电脑上操作,则不需要 git pull。
    cd ../
    hexo g
    cd ./public
    git add .
    git commit -m 'update blog'
    git push
  2. 需要提交修改时:

    • 在 windows 下,直接双击 deployDirectly.sh,会调用 Git Bash 来执行,类似 linux 下的终端。
    • 如果在 linux 或者 MacOS 下:
      • 首次运行需要先赋予可执行权限:切换到 public 目录,执行 chmod +x deployDirectly.sh
      • 然后,在 public 目录,执行:./deployDirectly.sh
      • 注意:MacOS 下需要在命令前加 sudo 以获取管理员权限。