git 查询3个月未使用的分支

文章目录

背景

领导任务,过年了,删除已经三个月没有使用的git分支,让项目轻装上阵。手动一个个看,太累了,还是代码来的香

思路

  1. 查询所有的远程分支
 git branch -a
  1. 遍历查询每个分支最近一次的提交
git  log -1 --date=short
  1. 将分支名称-最后提交时间放入Map,然后过滤符合的分支名称

code

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.IORuntimeException;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.RuntimeUtil;
import cn.hutool.core.util.StrUtil;

import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class GitTool {
    public static void main(String[] args) {
        /*本地拉取的项目地址*/
        String projectDir = "D:\\workProject\\javabasedemo\\JavaBeseStudy";
        String gitDir = " --git-dir="+projectDir+"\\.git";
        String workTree = " --work-tree="+projectDir;
        String gitDit = gitDir + workTree;
        String cmd = "git" + gitDir + workTree + " branch -a";
        String str = RuntimeUtil.execForStr(cmd);
        String[] split = str.split("\n");
        Map<String,String> bran = new HashMap<String,String>();
        for (String s : split) {
            if (s.contains("remotes")) {
                String cmd2 = "git" + gitDit + " log -1 --date=short " + s;
                List<String> strings = RuntimeUtil.execForLines(cmd2);
                if(strings.size() > 2){
                    String s1 = strings.get(2);
                    String group0 = ReUtil.getGroup0("[0-9]{4}-[0-9]{2}-[0-9]{2}", s1);
                    bran.put(s,group0);
                }
            }
        }
        /*获取超过三个月没有使用的分支*/
        List<String> branches = getLastMonth(bran);
        System.out.println(bran);
        System.out.println(branches);
    }

    private static List<String> getLastMonth(Map<String, String> bran) {
        List<String> list = new ArrayList();
        bran.forEach((k,v)->{
            LocalDate localDate = LocalDate.parse(v).plusMonths(3);
            if (localDate.isBefore(LocalDate.now())) {
              list.add(k);
            }
        });
        return list;
    }
}

最后根据打印出来结果,然后进行delete 分支

TODO

后续用shell命令完成这个功能

上一篇:jstack命令


下一篇:普通应用支付提示“此交易被拒绝,请稍后再试。您也可尝试其他付款方式”