最新消息:

ide直接修改文件名的大小写,但是git忽略文件大小写的解决办法

git 大步 2100浏览 0评论

好吧,在开发中遇到一个问题:

我在Android  Studio通过ide的修改文件名功能将一个"helloworld.java"的文件改名为"HelloWorld.java"。但是每次从git服务器上clone的时候,发现文件名又还原成了"helloworld.java"。导致项目报错。

 

每次手动修复只是治标,没有治本。

 

重现问题:

1.先创建一个TestGitIgnorecase,然后在里面创建一个helloworld.java。然后commit到本地仓库。
2.通过android studio的refactor里的rename选项将helloworld.java改名为HelloWorld.java。然后share到github上。
3.再从github上clone到本地,然后你会发现你clone的项目中,文件名依旧是helloworld.java。

 

更简单的重现:
假设hello.txt已经提交到仓库了,然后执行下面的操作:
$mv  hello.txt Hello.txt
$git status

 

On branch master
nothing to commit, working directory clean

 

够奇怪了吧!

 

问题的分析:

从上面的问题,可以看到,git貌似是忽略了文件名的大小写的。也就是说,它认为两个是一样的。

 

git config中有个core.ignorecase设置,用来设置是否忽略大小写。
git分为本地和服务器,git本地是win系统,而服务器是linux。
先在本地查询core.ignorecase配置:
>git  config  --get core.ignorecase
true
或者查git的全局设置:
>git config --global --get core.ignorecase
再去服务器查询:
$git  config  --get core.ignorecase
没有返回结果

 

已知的大小写不敏感的系统
  • windows
  • osx
比如在mac下,可以查看当前文件系统是否支持大小写敏感:

 $diskutil info /

显示:
File System Personality:  Journaled HFS+
Type (Bundle):            hfs
Name (User Visible):      Mac OS Extended (Journaled)

如果看到“Case-sensitive Journaled HFS ”,说明是支持大小写敏感的。

或者是:
$touch   ab1
$touch    aB1
$ls a*
如果显示1个文件,则说明是不支持大小写敏感
如果显示2个文件,则说明是支持大小写敏感的

尝试解决办法:

方法一:

在本地仓库中,执行

 

git mv helloworld.java  Temp.java
git mv Temp.java HelloWorld.java
然后提交此次更改,提示:
Commit failed with error:
Will not add file alias 'app/src/main/java/info/dabu/testgitignorecase/HelloWorld.java' ('app/src/main/java/info/dabu/testgitignorecase/helloworld.java' already exists in index)
结果:失败了

 

方法二:

本地将HelloWorld.java拷贝到其他地方,然后执行:
>git  rm -f HelloWorld.java
删除成功后,再将这个HelloWorld.java拷贝会原来的目录,在将这个文件commit和push到github上。
结果:问题解决

 

方法三:

修改本地仓库的git config中的core.ignorecase设置。win下这个设置貌似默认是true。我们将其改为true。可以去config文件修改也可以直接命令修改
>git config  core.ignorecase false
设置git全局的core.ignorecase:
>git config --global core.ignorecase false
 然后再无论是直接使用mv或git mv改名都可以提交成功了

建议

通过上面的实例,我的建议就是别用系统的(ide也是使用系统的)的改名功能。而应该使用git mv来修改文件名。或者是将git config的core.ignorecase设置为false。

转载请注明:大步's Blog » ide直接修改文件名的大小写,但是git忽略文件大小写的解决办法

SiteMap