Git对文件名大小写不敏感的解决方法
问题的发现
半小时前,我修改完博客上的《Fluid主题美化》的文章,熟练地执行了Hexo三连后,期待满满地打开浏览器准备查看效果,结果却发现页面的某些组件没有正确显示,然而执行
Hexo s
命令打开的本地预览页面却一切正常。这是怎么一回事?
问题的排查
我首先注意到的是文章中的链接卡片没有被正常渲染,于是首先使用浏览器的开发者工具检查了页面,发现链接卡片成功读取了css样式,但却没有加载js脚本,于是我怀疑是我在修改上一篇文章时,由于调整了
linkcard.js
,将其拆分为 LinkCard.js
和
LinkCard.css
两个文件,同时为了规范化文件名,调整了大小写的格式,这才导致了问题。
接着我检查本地执行 Hexo cl && Hexo g
后生成的
public/js
目录,发现确实存在 LinkCard.js
文件,这也同样印证了此前在本地预览页面时一切正常的结论
于是我打开博客的Github仓库,却惊讶地发现 js
目录下的文件名仍然是 linkcard.js
,这就解释了为什么在Github
Pages上预览时无法加载js脚本。
再看看其他被我修改过文件名的文件,无一例外,Github仓库上的文件名都没有被正确更新!原来这就是造成这一切的罪魁祸首!经过搜索,我确定了问题的根源:Git对文件名的大小写变更不敏感,在只修改文件名大小写时,Git不会将其视为一次变更,因此不会提交到仓库中。
解决方法
为了解决这个问题,我需要强制Git识别文件名的大小写变更。笨办法是将出现问题的文件修改为其他名称,添加一次后再修改回原来的名称,并再次添加到暂存区,但这样的方法还是太不优雅了,也无法保证下次不会再遇到这个问题。
因此我们可以设置Git的配置选项来强制它对文件名的大小写变更敏感。具体步骤如下:
1
git config --global core.ignorecase false
接着还需要将暂存区中原本的文件移除,然后再重新添加以及提交修改:
1
2
git rm --cached -r .
git add .
如果不这样做,你就会发现远程仓库将会同时出现大小写不同的两个甚至多个文件,进一步造成混乱。
至此,问题就解决了!现在你可以放心地修改文件名的大小写,而不必担心Git会忽略这些变更。