Git仓库超过100M大文件自动检测并修改.gitattributes文件程序(java实现)

最近做项目用git向github推送时,总是出现大于100M的文件导致push失败,每次都要手动找到大于100M的文件,然后修改.gitattributes,用git-fls 上传,很麻烦,所以就用Java写了一个自动检测Git仓库中大于100M的文件,并将其添加到.gitattributes的程序,代码如下所示。使用时只需要将main函数中的gitRepositoryDir路径改为自己仓库的路径即可。另外修改.gitattributes文件的方法是注释了的,还是建议手动添加,不然出问题很麻烦;自动添加只要去掉下面这行的注释,也可以根据自己需要修改appendContext()方法。注意,如果可能出现大于100M的文件,一定要在commit之前就检测一下!!!!

 // appendContext(path,context);//这是修改.gitattributes文件的方法

完整代码如下:

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class GitCheck {

    public static void main(String[] args) throws FileNotFoundException {
        File gitRepositoryDir = new File("D:\\Repository");//修改成自己的仓库目录即可
        checkGitFiles(gitRepositoryDir,gitRepositoryDir.getAbsolutePath());
    }

    public static void checkGitFiles(File fileDir,String baseFileString) throws FileNotFoundException {// 操作文件
        if (!fileDir.exists()) {
            throw new FileNotFoundException("仓库路径不存在");
        }
        File[] files = fileDir.listFiles();
        if (files != null) {// 判断是否还有子目录
            for (int i = 0; i < files.length; i++) {
                if (files[i].isFile() && files[i].length() >= 100 * 1024 *1024) {// 判断是文件,且大小大于100M(github大文件上传限制为100M)
                    File file = files[i];
                    List<String> list = new ArrayList<>();//获取文件的相对路径
                    while(!file.getAbsolutePath().equals(baseFileString)){
                        list.add(file.getName());
                        file = file.getParentFile();
                    }
                    StringBuilder sb = new StringBuilder();
                    for(int j = list.size() - 1;j >= 0;j --){
                        sb.append("/" + list.get(j));
                    }
                    System.out.println(sb);//打印相对路径
                    String path = baseFileString + "\\.gitattributes"; //.gitattributes文件路径
                    String context = sb.toString() + " filter=lfs diff=lfs merge=lfs -text";//构建写入.gitattributes文件的字符串
                   // appendContext(path,context);//慎用,还是根据打印出的字符串手动添加!!!!!
                } else {
                    if(!files[i].getName().equals(".git"))//忽略仓库目录
                        checkGitFiles(files[i],baseFileString);// 递归调用,直到所有的文件都没有了子目录
                }
            }
        }
    }

//向文件追加内容方法
    public static void appendContext(String path,String appendContext ) {
        FileWriter fw = null;
        try {
            //如果文件存在,则追加内容;如果文件不存在,则创建文件
            File f = new File(path);
            fw = new FileWriter(f, true);
        } catch (IOException e) {
            e.printStackTrace();
        }
        PrintWriter pw = new PrintWriter(fw);
        pw.println(appendContext);
        pw.flush();
        try {
            fw.flush();
            pw.close();
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章