首先我的这个仓库的本地文件在 windows 系统上,所以是对大小写不敏感的
因为陆续有好几个人加过东西,所以文件名没有统一规范,有的是全小写,有的是驼峰大小写,还有些文件的后缀名是大写
然后最近我开了个新分支准备统一整理一下文件结构和文件名,把所有文件名和后缀名都改成了小写
比如原来 MyFile.css 改成了 myfile.css ,logo.PNG 改成了 logo.png
这些改动提交到新分支以后我无法切换回主分支了,要求我解决冲突
我的 git config 已经设置了大小写敏感了
然后我只能用笨办法,先删除 MyFile.css 提交,然后新建 myfile.css 再提交,确保追踪指向的文件是 myfile.css 而不是 MyFile.css
那么问题来了,这种情况正确的做法是什么
1
lzgshsj 2022-06-27 13:17:51 +08:00 1
git mv?
|
2
Opportunity 2022-06-27 13:29:07 +08:00 2
NTFS 是大小写敏感的,大小写不敏感的是 windows 本身
fsutil.exe file setCaseSensitiveInfo <path> enable https://docs.microsoft.com/en-us/windows/wsl/case-sensitivity |
3
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 |
4
wenzichel 2022-06-27 14:19:24 +08:00
所以现在我们的文件名都“使用 kebab-case ,后缀为小写”的方式!
|
5
learnshare 2022-06-27 14:45:32 +08:00
使用 Git 时,要记得启用区分大小写
|
6
simonhunter 2022-06-27 15:34:09 +08:00 1
有幸被大小写的问题坑过……当时是修改了大小写名字后,远程仓库中存在两份文件。
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 还原即可。 |
7
zhuweiyou 2022-06-27 15:46:31 +08:00
一般来说我都是全小写连词的, 如果你要修改已有的应该用 git mv 命令.不需要删掉再提交.
tsconfig.json 里面有一个 forceConsistentCasingInFileNames 字段,可以开启.这样如果引用了大小写不正确的文件会报错. |
8
sutra 2022-06-27 17:17:42 +08:00
换成大小写敏感的文件系统,一劳永逸。(狗头
|
9
SiLenceControL 2022-06-28 15:28:43 +08:00
我是在 macos 上编译 Linux 的软件要求大小写敏感,也是搞的头疼
|
10
ysc3839 2022-06-28 16:32:37 +08:00
@SiLenceControL macOS 可以创建个磁盘镜像,格式化成区分大小写的文件系统,然后要编译的文件都放里面。
|
11
SiLenceControL 2022-06-28 17:57:18 +08:00
@ysc3839 我知道但是我有的时候直接在 download 文件夹里开算
我是搞 CFD 的 |