我正在尝试将文件重命名为与之前的大小写不同:
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没有获取重命名(作为重命名或作为新的未跟踪文件)。
如何将文件更改为具有相同名称的不同大小写?我使用zsh 4.3.15在Mac OS X 10.7.3上使用git 1.7.9.1。
答案 0 :(得分:428)
考虑到上面的答案,您可以使用“--force”的单个命令来使用它:
git mv --force myfile MyFile
答案 1 :(得分:427)
启动git 2。0。1(2014年6月25日), git mv
只适用于不区分大小写的操作系统。
dturner-tw
)
mv
:允许重命名以修复不区分大小写的文件系统上的大小写" git mv hello.txt Hello.txt
"在不区分大小写的文件系统上总是触发" destination already exists
"错误,因为这两个名称从文件系统的角度引用相同的路径,并要求用户给出" --force
"纠正索引中记录的路径和下次提交时的情况。
检测此案例并允许其不需要"
--force
"。
git mv hello.txt Hello.txt
正常工作(不再需要--force
)。
答案 2 :(得分:78)
有时您希望更改不区分大小写的文件系统上的大量文件的大小写(例如,在OS X或Windows上)。执行git mv
命令会很快发生,为了让事情变得更容易,这就是我的工作:
git add . -A
删除所有文件。git add .
git应该看到文件已重命名。现在您可以提交一份提示,说明您已更改了文件大小写。
答案 3 :(得分:59)
OS X下的文件名不区分大小写(默认情况下)。这更像是一个操作系统问题,而不是一个git问题。如果您删除并重新添加该文件,您应该得到您想要的内容,或者将其重命名为其他内容并将其重命名。
答案 4 :(得分:21)
由于OP是关于“改变Git中文件名的大写”:
如果您尝试更改项目中文件名的大写,则无需强制从git重命名。 IMO,我宁愿从我的IDE /编辑器更改大写,并确保我正确配置git以获取重命名。
默认情况下,git模板设置为忽略大小写(git大小写不敏感)。要验证您是否具有默认模板,请使用--get
来检索指定键的值。使用--local
和--global
表示git是否从本地git repo配置或全局配置中获取配置键值。作为一个示例,如果您要查找全局密钥core.ignorecase
:
git config --global --get core.ignorecase
如果返回true
,请确保将其设置为:
git config --global core.ignorecase false
(确保您拥有更改全局的适当权限) 你有它,现在你的git不会忽视Capitalisations并将它们视为变化。
作为建议,如果您正在处理多语言项目,并且您觉得并非所有项目都应该被git视为区分大小写,那么只需更新本地core.ignorecase
答案 5 :(得分:6)
您可以打开“.git”目录,然后编辑“config”文件。在“[core]”下设置“ignorecase = true”并完成;)
答案 6 :(得分:1)
这个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)
答案 7 :(得分:1)
要在macOS上将git mv
个文件批量化为小写:
for f in *; do git mv "$f" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
它将小写文件夹中的所有文件。
答案 8 :(得分:1)
Vonc 是完全正确的,但仍然存在一种潜在的情况,即您的重命名操作不适用于 windows 的 git:
假设您想将 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/myPath
替换为 dir/mypath
,因为它已检测到存在大小写不同的此类路径。
解决方案是使用中间移动操作:
git mv dir/mypath dir/mypath_temp
git mv dir/mypath_temp dir/myPath
答案 9 :(得分:0)
我在 Sourcetree 的 Windows 上进行了以下更改:
我通过从文件系统中删除文件解决了这个问题:
然后简单地丢弃我想保留的文件并提交:
现在一切都按预期进行。
基于这个答案:
答案 10 :(得分:-1)
工作示例:
git mv ./src/images/poster_video.PNG ./src/images/poster_video.png