更改Windows上文件的大小写?


209

我想重命名git控制的代码库中的几个文件。具体而言,我只是想更改文件的情况下,使sourceCode.java成为SourceCode.java,例如。问题是:我在Windows机器上,文件系统认为这些文件是相同的文件名。

如何让Windows和Git识别该更改并将其签入?


3
自Git 2.0.1+起(2014年6月),一个简单的方法git mv应该可以工作(stackoverflow.com/a/24979063/6309)。即使在Windows上。
VonC

Answers:


336

在这里查看有关如何执行操作的更多提示:

如何使git忽略大小写更改?

要么:

git mv -f name.java Name.java

8
顺便说一句,这不适用于FAT文件系统。我在拇指驱动器上随身携带了一些项目代码,而更改大小写确实是一个痛苦。
ASM

1
这并没有为我工作NTFS系统和Windows 10
Roboblob

1
这无疑是正确的方法,但是,如果您需要重命名许多文件,则可能很乏味。如果已经以某种方式在文件系统中对它们进行了重命名,而您只想提交这些更改,则可以重命名一些父文件夹,git add对新重命名的文件夹执行一个操作,请勿提交,将文件夹名称改回应有的名称。 ,git add然后再次提交。
Okonomiyaki3000 '18

在NTFS和Windows 7工程
汉斯·戈德曼

是否可以批量执行此操作?例如使用powershell,Get-ChildItem '.' | Rename-Item {$_.Name.ToLowerCase()}
killjoy

49

如果您使用的是FAT文件系统,则唯一的选择是进行两阶段重命名:

  1. 重命名sourceCode.javaanything.you.like
  2. 重命名anything.you.likeSourceCode.java

在使用Perforce的年代,我们确实遇到了这个问题,这是我们唯一可以想到的解决方案。


13
只是给其他人的注释:不必在两者之间进行提交,但有必要为git添加索引以注意到更改
arberg '16

29

以下步骤使我可以在Windows上更改大小写:

  • 加入ignorecase = false[core].git/config;
  • 将要重命名的文件移出项目目录;
  • 将删除添加到索引;
  • 将所有文件移回其原始位置,并更改文件和/或目录的大小写;
  • 将所有“新”文件添加到索引;
  • 删除ignorecase = false是第一步添加的。

这样,您只需提交一个包含重命名的提交,就可以轻松更改例如整个目录。


5
为浴全局和本地设置执行此操作:$ gti config --global core.ignorecase false $ gti config core.ignorecase false
Roman Ivanov

6

小心。这样做可能导致无法合并的更改。在Windows上合并时,Git感到困惑,因为它无法确定旧的大写名称和新的小写名称是否是同一文件(对于Git,它们不是,但是对于文件系统,它们是相同的)。要合并,您必须执行一些手动解决方法,例如在合并之前删除文件。

看到具有相同名称但大小写不同的文件的Git rebase问题

我不确定这个问题是否比永远在您的项目中拥有一个非常规命名的文件更糟糕,但是值得知道的是,是否有很多用户的分支很多,最终都需要合并。


在大中型项目中,如果可能的话,应始终避免使用非常规命名的文件,这是因为在为多个平台开发时会引起问题(延迟修复此类问题直到以后会使修复问题变得更加严重)。有时,您在Windows上进行开发,但还需要进行linux构建,并且在Windows上可以正常使用的include会导致在Linux上中断构建。
Griffork

3

我认为缺少一种简单的方法。您可以针对单个文件,特定目录甚至整个存储库执行此操作:

git rm --cached <file name or directory>
git add <file name or directory>

如果您还想影响子目录,则必须使用-r标志:

git rm -r --cached <directory>
git add <directory>

真正最简单的一种。
ranu

这将丢失文件的整个历史记录,因为git将其设置为全新文件。
亚历杭德罗

@Alejandro你所说的是错误的。我刚刚对其进行了测试,并且git意识到重命名没有任何问题。与其他情况一样,该文件在索引中显示为“已删除” /“新”,但是在提交时,git注意到该文件已被重命名。
Nils-o-mat

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.