今天遇到一个特别奇怪的事情,往 github 提交代码的时候,显示已经提交成功,没有修改,但是当别人拉取代码后,项目编译不过去。原因是:UI 给的图片命名一开始是有中划线和大写的,当时直接添加到 github 里面去了。但是本地项目编译不过去,所以本地用脚本和手动修改方式,将大批的文件都修改好了。本以为提交上去了,但是没想到 git 忽略了本地的文件名的大小写,虽然本地修改成功了,但是 git 识别不了。
因为工作关系是两台电脑,所以在另外一台电脑也遇到了相同的事情,于是打算用java程序处理。 但是在调试的过程中,发现 file.exist() ,也不区分大小写。
git 的解决办法是:
git config core.ignorecase false
让 git 支持 大小写的识别。
java 的办法是:
不使用 file.exist() 判断,直接 file.rename()。
java 参考代码:
/**
* FileNameTest
* Created by WangQing on 2018/1/23.
*/
public class FileNameTest {
private static final String TAG = "FileNameTest";
@Test
public void test_cast() {
// String path = "/Users/WangQing/Android_Pro/KaiDunPro/app/src/main/res";
String path = "/Users/WangQing/Desktop/pic";
dirList(path);
}
private void dirList(String path) {
List<File> list = FileUtils.listFilesInDir(path, true);
for (File f : list) {
if (f.isDirectory()) {
dirList(f.getPath());
continue;
}
String fileName = FileUtils.getFileName(f);
if (!fileName.toLowerCase().equals(fileName) || fileName.contains("-")) {
String oldFileName = fileName;
if (fileName.contains("-")) {
fileName = fileName.replaceAll("-", "_");
}
String newFileName = fileName.toLowerCase();
File file = new File(f.getParent() + "/" + newFileName);
boolean b = f.renameTo(file);
System.out.println("test_cast: 原来的文件名是:" + oldFileName + ", 新文件名是:" + newFileName + ", rename state:" + b);
}
}
}
}
依赖:
compile 'com.github.ZhuoKeTeam:zhuoke-sdk:1.0.0'