Git:重命名文件在java中编译时会导致冲突

时间:2015-12-11 14:56:42

标签: java git

很久以前,我创建了一个存储库并提交了一个名为CameraAction.java的文件。

随着时间的推移,我发现'A'的大写导致了Spring Boot的一些问题(无法准确记住问题是什么),但我认为调用我的类Cameraaction.java会更安全

现在,每次从git中取出时,都会得到CameraAction.java文件名而不是Cameraaction.java。

当我编译应用程序时,这会导致冲突,因为文件名和类名拼写不一样:

CameraAction.java:12: error: class Cameraaction is public, should be declared in a file named Cameraaction.java
        public class Cameraaction extends Action {
               ^ 

我该如何解决这个问题?

我试着这样做:

git rm --cached CameraAction.java

但它回到我身边说:

fatal: pathspec 'CameraAction.java' did not match any files

2 个答案:

答案 0 :(得分:1)

CameraAction.java提交为Cameraaction.java(不是正确的做法,请参阅下面的Java命名约定链接)尝试执行以下操作:

git mv -f CameraAction.java Cameraaction.java

后跟git commit -m "Fixed the case of a file"git push 通过重新git clone并检查文件已签出为Cameraaction.java

,确认问题已消失

如果在执行上述操作时,您收到“文件存在”错误,请使用tmp文件执行此操作,如下所示:

git mv CameraAction.java CameraAction.java.tmp
git mv CameraAction.java.tmp Cameraaction.java

但正如上面一位评论者所指出的那样,Java Naming Code Conventions对类名做了以下说明:

enter image description here

git如何处理不区分大小写的文件系统?

Git有一个配置设置,告诉它是区分大小写还是不区分大小写:core.ignorecase。要告诉Git区分大小写,只需将此设置设置为false

git config core.ignorecase false

来自git config documentation

  

core.ignorecase

     

如果为true,则此选项启用各种变通方法,以使git能够更好地处理不区分大小写的文件系统,如FAT。例如,如果目录列表在git期望makefile时找到Makefile,则git将假定它实际上是同一个文件,并继续将其记住为Makefile

     

默认值为false,除了git-clone(1)git-init(1)将在创建存储库时探测并设置core.ignorecase为真。

答案 1 :(得分:0)

你在做什么操作系统?很可能你不在* nix上。具体来说,您可能有一个案例保留,但案例不敏感的文件系统。

您可以尝试自行将文件重命名为if not exist "achievements\Start the Game.txt" ( copy nul "achievements\Start the Game.txt">nul echo Achievement Get: Start the Game! ) ,或仅Cameraaction.java