我们的git控制代码库中有几个文件要重命名。具体来说,我只想更改文件的大小写,以便sourceCode.java
变为SourceCode.java
。问题:我在Windows机器上,文件系统认为这些文件名相同。
如何让Windows和Git识别出更改并将其签入?
答案 0 :(得分:291)
答案 1 :(得分:44)
如果您使用的是FAT文件系统,则唯一的选择是进行两阶段重命名:
sourceCode.java
重命名为anything.you.like
anything.you.like
重命名为SourceCode.java
回到我们使用Perforce的那些日子里,我们遇到了这个问题,这是我们能够提出的唯一解决方案。
答案 2 :(得分:26)
以下步骤允许我在Windows上更改案例:
ignorecase = false
; [core]
添加到.git/config
ignorecase = false
。这样您就可以进行一次包含重命名的提交,并且可以轻松更改,例如整个目录。
答案 3 :(得分:9)
在我看来,缺少一种简单的方法。您可以针对单个文件,特定目录甚至整个存储库执行此操作。只需以您喜欢的任何方式重命名文件,然后执行以下命令即可:
git rm --cached <file name or directory>
git add <file name or directory>
如果您还想影响子目录,则必须使用-r
标志:
git rm -r --cached <directory>
git add <directory>
答案 4 :(得分:6)
小心点。这样做可能会导致无法合并的更改。当在Windows上合并时,Git会感到困惑,因为它无法确定旧的大写名称和新的小写名称是否是同一个文件(对于Git它们不是,但对于文件系统而言)。要合并,您必须执行一些手动解决方法,例如在合并之前删除文件。
请参阅Git rebase issue with files of same name but different case
我不确定这个问题是否比在您的项目中永远存在一个非常规命名文件更糟糕,但是值得了解的是,是否有很多用户需要拥有大量分支机构最终合并。
答案 5 :(得分:1)
使用NTFS(或FAT),单个git mv
命令无法解决问题。
这个问题显示了一种有效的技术:
git mv and only change case of directory