在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
命令会很快就会疲倦,为了让事情变得更容易,这就是我所做的:
- 将目录之外的所有文件移动到桌面。
- 做一个
git add . -A
git add . -A
删除所有文件。 - 将桌面上的所有文件重命名为适当的大写。
- 将所有文件移回原始目录。
- 做一个
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
它将小写文件夹中的所有文件。