在我们的git控制的代码库中,有几个文件我想重命名。具体来说,我只想更改文件的大小写,例如,将sourceCode.java变成sourceCode.java。问题是:我在Windows机器上,文件系统认为它们是相同的文件名。

我如何让Windows和Git识别这个更改并检入? 文件名的变化不应该被忽略,而是提交给git。


当前回答

对于NTFS(或FAT),单个git mv命令不能解决问题。 这个问题展示了一个有效的技巧: Git mv,只更改目录的大小写

其他回答

对于NTFS(或FAT),单个git mv命令不能解决问题。 这个问题展示了一个有效的技巧: Git mv,只更改目录的大小写

要重命名文件,可以使用标准的git mv命令。 由于Windows将只有大小写变化的文件视为相同的文件,你必须传递-f选项来强制重命名:

git mv -f name.java Name.java

如果您想忽略大小写更改,请查看问题 如何使git忽略变化的情况下?。

在我看来,缺少一种简单的方法。您可以为单个文件、特定目录甚至整个存储库执行此操作。只要用你喜欢的方式重命名你的文件,然后执行这些命令:

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

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

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

如果你在一个FAT文件系统上,你唯一的选择是做一个两阶段重命名:

将sourceCode.java重命名为你喜欢的任何名称 将任何。你喜欢的重命名为SourceCode.java

在使用Perforce的时候,我们遇到了这样的问题,这是我们能想到的唯一解决方案。

小心些而已。这样做可能会导致无法合并的更改。Git在Windows上合并时会感到困惑,因为它不能确定旧的大写名称和新的小写名称是否是同一个文件(对于Git来说不是,但对于文件系统来说是)。要合并,你必须做一些手工工作,比如在合并之前删除文件。

见Git rebase问题与文件相同的名称,但不同的情况

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