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…
感觉这个就是写文章的好处呢,出来献丑,好歹也能有个人指正,不是嘛~
以上,就是在业务开发里遇到的一个小坑,小小的记录一下。