我试图重命名一个文件有不同的大小写,从它之前:

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。


当前回答

从Git 2.0.1(2014年6月25日)开始,Git mv只能在不区分大小写的操作系统上运行。

参见David Turner (dturner-tw)的commit baa37bf。

Mv:允许重命名来修复大小写不敏感的文件系统

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

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

hello.txt只是工作(没有——force需要了)。


另一种选择是:

git config --global core.ignorecase false

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

它在CMD中工作。它可能会在git bash会话中失败(在Windows上)(参见Louis-Caron的回答)

正如jaquinocode在注释中指出的,如果您的本地存储库本身具有该设置:

git config --local core.ignorecase false

其他回答

这个Python代码片段将git mv——强制目录下的所有文件都是小写的。例如,foo/Bar.js将通过git mv foo/Bar.js foo/Bar.js——force变成foo/Bar.js。

根据你的喜好修改它。我只是想分享:)

import os
import re

searchDir = 'c:/someRepo'
exclude = ['.git', 'node_modules','bin']
os.chdir(searchDir)

for root, dirs, files in os.walk(searchDir):
    dirs[:] = [d for d in dirs if d not in exclude]
    for f in files:
        if re.match(r'[A-Z]', f):
            fullPath = os.path.join(root, f)
            fullPathLower = os.path.join(root, f[0].lower() + f[1:])
            command = 'git mv --force ' + fullPath + ' ' + fullPathLower
            print(command)
            os.system(command)

你可以打开“。目录,然后编辑“配置”文件。在“[core]”下设置,设置“ignorecase = true”,你就完成了;)

从Git 2.0.1(2014年6月25日)开始,Git mv只能在不区分大小写的操作系统上运行。

参见David Turner (dturner-tw)的commit baa37bf。

Mv:允许重命名来修复大小写不敏感的文件系统

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

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

hello.txt只是工作(没有——force需要了)。


另一种选择是:

git config --global core.ignorecase false

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

它在CMD中工作。它可能会在git bash会话中失败(在Windows上)(参见Louis-Caron的回答)

正如jaquinocode在注释中指出的,如果您的本地存储库本身具有该设置:

git config --local core.ignorecase false

有时你想在一个不区分大小写的文件系统(例如在macOS或Windows上)上更改许多文件名的大写。单独执行git mv命令很快就会厌倦。为了让事情变得简单一点,我是这样做的:

将所有受影响的文件从目录移到桌面。 做一个git添加。-A删除这些文件。 将桌面上的所有文件重命名为适当的大写。 将所有文件移回原始目录。 做一个git添加..Git应该可以看到文件被重命名了。

现在您可以进行提交,表示您已经更改了文件名大写。

考虑到larsks的回答,你可以用“——force”命令让它工作:

 git mv --force myfile MyFile