2

3分钟了解一下 Git 对大小写文件名追踪判定的坑

最近业务上,遇到一个关于 Git 对于大小写文件名变动的追踪判定的坑

所以这篇文章,记录一下 Git 如何判定文件大小写变化

前言

我们都知道 Linux 是严格区分大小写的,

所以如果 Mac 开发时不小心用文件名是Order.vue,然后在routes配置时写的路径是 ../../../order.vue

在部署到Linux时肯定会报错。

问题不是很简单吗,修改下文件名就好了,有啥可说的?

这里就是文章要说的点了

直接修改文件名,会怎样?

就是如果你仅仅是把文件名从 Order.vue 修改为 order.vue 然后提交代码。

你如果执行git status,会发现提示你没有变化。

git status

nothing to commit, working tree clean

实际上提交到代码仓库后,你会发现文件的大小写也没有变化。git认为你没有什么变化,文件名依旧是Order.vue

那如何触发文件名的变化呢?

我尝试了2种方法

  • 1.往 Order.vue 里加一句空行或者注释,触发一下这个文件名的变化
  • 2.修改 Order.vue 为 Order111.vue, 然后再把 Order111.vue 修改回 order.vue ,触发一下这个文件名的变化

结果是都失败了...

总结:如果仅仅是修改文件名的大小写的话,Git 不会判定文件名有变化

那最后怎么做呢?

  • 1.直接修改route.js,就直接用大写Order.vue这个文件名作为路由,不变化文件名了
  • 2.先把文件名随便改为 test.vue 提交上去,再提交第二次把文件名改回来,比如改成order.vue。 这样肯定是能判定文件名的修改的

补充: git mv 修改文件名大小写是可以被 git追踪的

哈哈,评论区告诉我一个技巧..

git mv Order.vue order.vue 直接用 mv 命令操作的话,git 是知道文件名变化的

https://stackoverflow.com/que...

感觉这个就是写文章的好处呢,出来献丑,好歹也能有个人指正,不是嘛~

以上,就是在业务开发里遇到的一个小坑,小小的记录一下。


Ziwei
4.1k 声望420 粉丝

前端程序员