我试图重命名一个文件,使其大小写与以前不同:
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 10.7.3和Git 1.7.9.1,使用的是zsh 4.3.15。
这是因为OSX文件系统默认情况下是保留大小写的,不区分大小写。您可以简单地分两步进行:git mv myfile foo; git mv foo MyFile。
让它和"git mv——force myfile myfile"一起工作。
stackoverflow.com/questions/6899582/…
从Git2.0.1开始(2014年6月),git mv hello.txt Hello.txt将用于不区分大小写的操作系统。请看下面我的答案
链接stackoverflow.com/questions/1793735/…
如何提交Git中只区分大小写的文件名更改的可能副本?
考虑到上面的答案,您可以使用带有"-force"的单个命令:
git mv --force myfile MyFile
如果您使用的是不区分大小写的文件系统,并且遇到致命错误"无效参数",请尝试以下步骤:stackoverflow.com/questions/3011625/…
虽然这是第一步的正确答案,但是当另一个分支具有旧的大写时,如何继续切换到Mac OS X下的另一个分支。我得到****错误:以下未跟踪的工作树文件将被签出覆盖:****
在Windows上提交失败:Error: Will not add file alias 'MyFile' ('myfile' already exists in index)。
从Git2.0.1开始(2014年6月25日),git mv只适用于不区分大小写的操作系统。
见David Turner的Commit Baa37bf(dturner-tw)mv:允许重命名以修复不区分大小写的文件系统上的大小写
在不区分大小写的文件系统上,"EDOCX1"〔6〕总是触发"destination already exists错误,因为从文件系统的角度来看,这两个名称指的是相同的路径,并且要求用户在更正索引和下一次提交中记录的路径的大小写时给出"EDOCX1"〔8〕。
Detect this case and allow it without requiring"--force".
git mv hello.txt Hello.txt只是工作(不再需要--force)。
fwiw这个回归或从未在窗口工作。AM在2.15.1.windows.2上,仍然需要使用--force
fwiw至少在2.18.0.windows.1上工作。
@好消息!
有时,您希望更改不区分大小写的文件系统(例如,在OS X或Windows上)上许多文件的大小写。执行git mv命令会很快疲劳,使事情变得简单一点,这就是我要做的:
将所有文件移到目录之外,比如桌面。
执行git add . -A以删除所有文件。
将桌面上的所有文件重命名为适当的大小写。
将所有文件移回原始目录。
做一个git add .git应该看到文件被重命名。
现在,您可以承诺更改了文件大小写。
这是以你进出文件的所有历史记录为代价的,对吗?我猜Git-mv——force没有这个缺点。
不,这不会删除所有的历史。注意两个加法之间没有commit。
完美的批量解决方案!
OS X下的文件名不区分大小写(默认情况下)。这更多的是操作系统问题,而不是Git问题。如果删除并重新添加文件,您应该得到您想要的,或者将其重命名为其他文件,然后重新重命名。
您还可以在Linux系统上对repo执行ecx1〔0〕操作,重命名文件并提交它们(如果您手头有Linux系统的话)。
实际上,OS X上的文件系统可能区分大小写,您可以在安装时对其进行配置。如何检查OS X分区是否区分大小写
…因此,答案中的"(默认)"。
要确认,您可以使用git rm --cached fileorfolder从git中删除文件或文件夹,而无需从文件系统中删除该文件或文件夹。然后您可以使用git add fileorfolder再次添加文件或文件夹。
因为操作是关于"更改Git中文件名的大小写"的:
如果您试图在项目中更改文件名的大写,则无需强制将其从Git中重命名。在我看来,我更愿意从我的IDE/编辑器中更改大写,并确保我正确配置了git以获取重命名。
默认情况下,Git模板设置为忽略大小写(不区分Git大小写)。要验证您是否具有默认模板,请使用--get检索指定键的值。使用--local和--global指示git是否从本地git repo config或全局git repo config中获取配置键值。例如,如果要查找全局键core.ignorecase,请举一个例子:
git config --global --get core.ignorecase
如果返回true,请确保将其设置为:
git config --global core.ignorecase false
(确保您具有更改全局设置的适当权限)现在你有了它,你的Git不会忽视资本化,把它们当作是变化。
作为一个建议,如果您正在从事多语言项目,并且您认为不是所有项目都应该被Git视为区分大小写的,只需更新本地core.ignorecase
如果git config --global --get core.ignorecase没有归还任何东西。是true吗??因为当我将其设置为false后,它返回false(windows 10)
而且它似乎不像预期的那样工作。我的意思是桌面客户机看到更改,但是在提交/同步之后,文件名保持在线不变!
您可以打开".git"目录,然后编辑"config"文件。在"[核心]"下设置"ignorecase=true",您就完成了;)
要在MacOS上将git mv文件批量转换为小写:
for f in *; do git mv"$f""`echo $f | tr"[:upper:]""[:lower:]"`"; done
它会将文件夹中的所有文件小写。
这个python代码段将git mv --force目录中的所有文件变为小写,例如: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)