在Git中改变文件名的大写

我正在尝试重新命名一个文件,使其具有与之前不同的大小写:

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的git 1.7.9.1在Mac OS X 10.7.3上。

启动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 ”的错误,因为这两个名字是从文件系统的angular度引用相同的path,并且要求用户给出“ --force “在纠正logging在索引和下一次提交中的path的情况下。

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

git mv hello.txt Hello.txt正常工作(不再需要git mv hello.txt Hello.txt )。

考虑到上面的答案,你可以用一个单一的命令“–force”来获得它:

  git mv --force myfile MyFile 

有时候你想改变OS X上大量文件的大小写。做git mv命令会很快就会疲倦,为了让事情变得更容易,这就是我所做的:

  1. 将目录之外的所有文件移动到桌面。
  2. 做一个git add . -A git add . -A删除所有文件。
  3. 将桌面上的所有文件重命名为适当的大写。
  4. 将所有文件移回原始目录。
  5. 做一个git add . git应该看到文件被重命名。

现在你可以做一个提交说你已经改变了文件的大小写。

OS X下的文件名不区分大小写(默认情况下)。 这是一个比git问题更多的操作系统问题。 如果你删除并重新添加文件,你应该得到你想要的,或者重命名为其他东西,然后重新命名它。

由于OP是关于“在Git中更改文件名的大小写”:

如果您正在尝试在项目中更改文件名的大小写,则不需要强制将其从git中重命名。 国际海事组织,我宁愿改变我的IDE /编辑器的大小写,并确保我configuration好正确的git拿起重命名。

默认情况下,git模板被设置为忽略大小写(git不区分大小写)。 要validation您有默认模板,请使用--get来检索指定键的值。 使用--local--global来指示git是否从你的本地git repoconfiguration或全局configuration中获取configuration键值。 作为一个例子,如果你想查找你的全局密钥core.ignorecase

 git config --global --get core.ignorecase 

如果这返回true确保将其设置为:

 git config --global core.ignorecase false 

(确保你有适当的权限来改变全局)现在你已经拥有了,现在你的git不会忽略资本化并把它们当作变化。

作为一个build议,如果你正在从事多语言项目,并且你觉得并不是所有的项目都应该被git区分为区分大小写的,只要更新本地的core.ignorecase

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

这个python片段将git mv --force强制将目录中的所有文件改为小写,例如:foo / Bar.js将通过git mv foo/Bar.js foo/bar.js --force变成git mv foo/Bar.js foo/bar.js --force

修改它到你的喜好,只是想我会分享:)

 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'[AZ]', 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) 

要在macOS上将git mv文件批量转换为小写:

 for f in *; do git mv "$f" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done 

它将小写文件夹中的所有文件。