all

在 Git 中更改文件名的大小写

发布于 2022-03-22 23:07:17

我正在尝试重命名文件以使其具有与以前不同的大小写:

git mv src/collision/b2AABB.js src/collision/B2AABB.js
fatal: destination exists, source=src/collision/b2AABB.js, destination=src/collision/B2AABB.js

正如你所看到的,Git 对此非常不满。我也尝试使用普通的旧mv命令重命名,但 Git 没有选择重命名(作为重命名 作为新的未跟踪文件)。

如何更改文件以具有相同名称的不同大小写?我在 Mac OS X v10.7.3 (Lion) 和 Git 1.7.9.1 上使用Z
shell
(zsh) 4.3.15。

关注者
0
被浏览
39
1 个回答
  • 面试哥
    面试哥 2022-03-22
    为面试而生,有面试问题,就找面试哥。

    从 Git 2.0.1(2014 年 6 月 25 日)开始, a git mv 只能在不区分大小写的 OS 上工作

    请参阅David Turner ( )提交
    baa37bf
    dturner-tw

    mv:允许重命名以修复不区分大小写的文件系统上的大小写

    git mv hello.txt Hello.txt” 在不区分大小写的文件系统上总是会触发 ” destination already exists” 错误,因为这两个名称从文件系统的角度来看是指同一个路径,并且需要用户--force在更正索引中记录的路径的大小写时给出 “
    “下一次提交。

    检测这种情况并允许它而不需要“ --force”。

    git mv hello.txt Hello.txt只是工作(不再--force需要)。


    另一种选择是:

    git config --global core.ignorecase false
    

    并直接重命名文件;git 添加并提交。

    它确实在 CMD 中工作。它可能会在 git bash(在 Windows 上)会话中失败请参阅:

    假设您要将 dir/mypath 重命名为 dir/myPath:

    git mv dir/mypath dir/myPath
    

    但它没有报告:

    Rename from 'dir/mypath' to 'dir/mypath' failed. Should I try again? (y/n) 
    

    问题是 bash 已经默默地替换了你的命令行dir/myPathdir/mypath因为它检测到这样的路径存在不同的大小写。

    解决方案是使用中间移动操作:

    git mv dir/mypath dir/mypath_temp
    git mv dir/mypath_temp dir/myPath
    

    正如在评论中指出的那样,如果您的本地存储库本身具有该设置:

    git config --local core.ignorecase false
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看