在Git中更改文件名的大小写

knp*_*wrs 426 git rename case-sensitive file-rename

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

git mv src/collision/b2AABB.js src/collision/B2AABB.js
fatal: destination exists, source=src/collision/b2AABB.js, destination=src/collision/B2AABB.js
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,git对此有所帮助.我尝试使用普通的旧mv命令重命名,但git没有选择重命名(作为重命名新的未跟踪文件).

如何将文件更改为具有相同名称的不同大小写?我使用zsh 4.3.15使用git 1.7.9.1在Mac OS X 10.7.3上.

Von*_*onC 493

启动git 2.0.1(2014年6月25日),git mv将只对不区分大小写的操作系统起作用.

提交baa37bf大卫·特纳(dturner-tw)

mv:允许重命名以修复不区分大小写的文件系统上的大小写

" git mv hello.txt Hello.txt"对不区分大小写的文件系统总是会触发" destination already exists"错误,因为这两个名称从文件系统的角度来看是指相同的路径,并且要求用户--force在更正索引中记录的路径的情况时给出" "下一次提交.

检测这种情况并允许它而不需要" --force".

git mv hello.txt Hello.txt只是工作(不再--force需要).

  • 通过运行此命令和“git config core.ignorecase false”使其在 Windows 上工作 (9认同)
  • FWIW 这在 Windows 上倒退或从未奏效。我在 2.15.1.windows.2 上,仍然需要使用 --force (5认同)

Mar*_*les 439

考虑到上面的答案,您可以使用"--force"使用单个命令:

 git mv --force myfile MyFile
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用的是不区分大小写的文件系统并且出现致命错误"无效参数",请尝试以下步骤:http://stackoverflow.com/questions/3011625/git-mv-and-only-change-case-of-目录 (3认同)
  • 虽然这是第一步的正确答案,但是当另一个分支具有旧的大写字母时,如何在 Mac OS X 下继续切换到另一个分支。我得到 **** 错误:以下未跟踪的工作树文件将被结帐覆盖:**** (2认同)
  • 我在 Windows 上提交失败:“错误:不会添加文件别名‘MyFile’(‘myfile’已存在于索引中)” (2认同)

MrH*_*Hus 88

有时候你想要改变OS X上很多文件的大小写.执行git mv命令会很快就会出现问题,让事情变得更容易这就是我的工作:

  1. 将所有文件移到目录之外,让我们说桌面.
  2. 执行a git add . -A删除所有文件.
  3. 将桌面上的所有文件重命名为正确的大小写.
  4. 将所有文件移回原始目录.
  5. 做一个git add .混帐应该看到的是,文件被重命名.

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

  • 不,这不会删除所有历史记录。注意,两个添加之间没有提交。 (8认同)
  • 更简单、更简单的方法是`git rm -r --cached .` + `git add --all .`,如[这个答案](/sf/answers/3887900481/中所述) 8910547)值得更多的支持。 (5认同)
  • 这是以您移入和移出的文件中的所有历史为代价的,对吧?我猜git mv --force没有这个缺点. (3认同)

lar*_*sks 60

OS X下的文件名不区分大小写(默认情况下).这更像是一个操作系统问题,而不是一个git问题.如果您删除并重新添加该文件,您应该得到您想要的内容,或者将其重命名为其他内容并将其重命名.

  • 实际上,OS X上的文件系统可以区分大小写,您可以在安装时对其进行配置.[如何检查OS X分区是否区分大小写](http://apple.stackexchange.com/q/71357/122223) (4认同)
  • 你也可以在Linux系统上`git clone` repo,重命名文件并为这种情况提交它们(如果你手头有一个Linux系统). (2认同)
  • ...因此答案中的"(默认情况下)". (2认同)
  • 要确认,您可以使用`git rm --cached fileorfolder`从git中删除文件或文件夹,而无需从文件系统中删除文件或文件夹.然后你可以使用`git add fileorfolder`再次添加文件或文件夹. (2认同)

Seg*_*ted 24

由于OP是关于"改变Git中文件名的大写":

如果您尝试更改项目中文件名的大写,则无需强制从git重命名.IMO,我宁愿从我的IDE /编辑器更改大写,并确保我正确配置git以获取重命名.

默认情况下,git模板设置为忽略大小写(git大小写不敏感).验证您是否使用默认模板--get来检索指定键的值.使用--local--global表示git是否从本地git repo配置或全局配置中获取配置键值.例如,如果要查找全局密钥,请执行以下操作core.ignorecase:

git config --global --get core.ignorecase
Run Code Online (Sandbox Code Playgroud)

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

git config --global core.ignorecase false
Run Code Online (Sandbox Code Playgroud)

(确保你有适当的权限来改变全局)你有它,现在你的git不会忽略Capitalisations并将它们视为变化.

作为一个建议,如果您正在从事多语言项目,并且您觉得并非所有项目都应该被git视为区分大小写,那么只需更新本地项目 core.ignorecase

  • 如果`git config --global --get core.ignorecase`没有返回任何内容.这是真的吗?因为我把它设置为`false`后返回false(Windows 10) (3认同)
  • 而且它似乎没有按预期工作。我的意思是桌面客户端看到更改,但提交/同步后,文件名在线保持不变! (2认同)
  • 更改全局设置可能不起作用,因为本地设置会覆盖它。如果它不适合你,请检查两者。 (2认同)

Lou*_*ron 9

Vonc回答是完全正确的,但仍然存在一种潜在的情况,即您的重命名操作不适用于 Windows 版 git:

假设您想将 dir/mypath 重命名为 dir/myPath:

git mv dir/mypath dir/myPath
Run Code Online (Sandbox Code Playgroud)

但它无法报告:

Rename from 'dir/mypath' to 'dir/mypath' failed. Should I try again? (y/n) 
Run Code Online (Sandbox Code Playgroud)

问题是 bash 已经悄悄地替换了你的命令行,dir/myPath因为dir/mypath它检测到存在这样一个具有不同大小写的路径。

解决方案是使用中间移动操作:

git mv dir/mypath dir/mypath_temp
git mv dir/mypath_temp dir/myPath
Run Code Online (Sandbox Code Playgroud)


sof*_*arn 7

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

for f in *; do git mv "$f" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
Run Code Online (Sandbox Code Playgroud)

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


Дея*_*ров 5

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

  • 似乎应该将其更改为 false 以便 git 区分大小写? (4认同)