V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
MajestySolor
V2EX  ›  git

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

  •  
  •   MajestySolor · 2022-06-27 13:08:15 +08:00 · 2767 次点击
    这是一个创建于 905 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

    11 条回复    2022-06-28 17:57:18 +08:00
    lzgshsj
        1
    lzgshsj  
       2022-06-27 13:17:51 +08:00   ❤️ 1
    git mv?
    Opportunity
        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
    fds
        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
    wenzichel
        4
    wenzichel  
       2022-06-27 14:19:24 +08:00
    所以现在我们的文件名都“使用 kebab-case ,后缀为小写”的方式!
    learnshare
        5
    learnshare  
       2022-06-27 14:45:32 +08:00
    使用 Git 时,要记得启用区分大小写
    simonhunter
        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 还原即可。
    zhuweiyou
        7
    zhuweiyou  
       2022-06-27 15:46:31 +08:00
    一般来说我都是全小写连词的, 如果你要修改已有的应该用 git mv 命令.不需要删掉再提交.

    tsconfig.json 里面有一个 forceConsistentCasingInFileNames 字段,可以开启.这样如果引用了大小写不正确的文件会报错.
    sutra
        8
    sutra  
       2022-06-27 17:17:42 +08:00
    换成大小写敏感的文件系统,一劳永逸。(狗头
    SiLenceControL
        9
    SiLenceControL  
       2022-06-28 15:28:43 +08:00
    我是在 macos 上编译 Linux 的软件要求大小写敏感,也是搞的头疼
    ysc3839
        10
    ysc3839  
       2022-06-28 16:32:37 +08:00
    @SiLenceControL macOS 可以创建个磁盘镜像,格式化成区分大小写的文件系统,然后要编译的文件都放里面。
    SiLenceControL
        11
    SiLenceControL  
       2022-06-28 17:57:18 +08:00
    @ysc3839 我知道但是我有的时候直接在 download 文件夹里开算
    我是搞 CFD 的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3136 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:57 · PVG 20:57 · LAX 04:57 · JFK 07:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.