被文件名大小写的问题搞晕了

2022-06-27 13:08:15 +08:00
 MajestySolor

首先我的这个仓库的本地文件在 windows 系统上,所以是对大小写不敏感的

因为陆续有好几个人加过东西,所以文件名没有统一规范,有的是全小写,有的是驼峰大小写,还有些文件的后缀名是大写

然后最近我开了个新分支准备统一整理一下文件结构和文件名,把所有文件名和后缀名都改成了小写

比如原来 MyFile.css 改成了 myfile.css ,logo.PNG 改成了 logo.png

这些改动提交到新分支以后我无法切换回主分支了,要求我解决冲突

我的 git config 已经设置了大小写敏感了

然后我只能用笨办法,先删除 MyFile.css 提交,然后新建 myfile.css 再提交,确保追踪指向的文件是 myfile.css 而不是 MyFile.css

那么问题来了,这种情况正确的做法是什么

2739 次点击
所在节点    git
11 条回复
lzgshsj
2022-06-27 13:17:51 +08:00
git mv?
Opportunity
2022-06-27 13:29:07 +08:00
NTFS 是大小写敏感的,大小写不敏感的是 windows 本身

fsutil.exe file setCaseSensitiveInfo <path> enable

https://docs.microsoft.com/en-us/windows/wsl/case-sensitivity
fds
2022-06-27 13:40:24 +08:00
```sh
git mv foo foo2
git mv foo2 FOO
git commit -m "changed case of dir"
```
摘自 https://stackoverflow.com/a/3011723/502851
wenzichel
2022-06-27 14:19:24 +08:00
所以现在我们的文件名都“使用 kebab-case ,后缀为小写”的方式!
learnshare
2022-06-27 14:45:32 +08:00
使用 Git 时,要记得启用区分大小写
simonhunter
2022-06-27 15:34:09 +08:00
有幸被大小写的问题坑过……当时是修改了大小写名字后,远程仓库中存在两份文件。

git clone 的时候 core.ignorecase 会根据系统设置自动设置,Windows 下默认是 true ,如果修改文件名大小写后,设置改为 false ,会出现改名后的文件的 untrack files ,如果提交了就出事了,远程会看到有大写文件名和小写文件名两份文件。

最好的方法就还是用 git mv 去重命名文件名吧,如果已经是远程仓库存在两份文件的情况,比如 foo.js 和 Foo.js ,这时候用 git mv 会提示文件已存在,可以先把目标文件改成中间名,比如 foo.js.tmp ,然后删除 Foo.js ,再将 foo.js.tmp 改为 foo.js ,然后提交。其他人同步的时候会发现文件被删除,但实际上文件是被执行了一个未提交的 commit ,把 commit 还原即可。
zhuweiyou
2022-06-27 15:46:31 +08:00
一般来说我都是全小写连词的, 如果你要修改已有的应该用 git mv 命令.不需要删掉再提交.

tsconfig.json 里面有一个 forceConsistentCasingInFileNames 字段,可以开启.这样如果引用了大小写不正确的文件会报错.
sutra
2022-06-27 17:17:42 +08:00
换成大小写敏感的文件系统,一劳永逸。(狗头
SiLenceControL
2022-06-28 15:28:43 +08:00
我是在 macos 上编译 Linux 的软件要求大小写敏感,也是搞的头疼
ysc3839
2022-06-28 16:32:37 +08:00
@SiLenceControL macOS 可以创建个磁盘镜像,格式化成区分大小写的文件系统,然后要编译的文件都放里面。
SiLenceControL
2022-06-28 17:57:18 +08:00
@ysc3839 我知道但是我有的时候直接在 download 文件夹里开算
我是搞 CFD 的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/862453

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX