领导让我统计每个人,每个月提交代码的工作量,我该如何搞?


1.jgit是什么?

如果你想在一个 Java 程序中使用 Git ,有一个功能齐全的 Git 库,那就是 JGit 。 JGit 是一个用 Java 写成的功能相对健全的 Git 的实现,它在 Java 社区中被广泛使用。


2、废话不多说,直接上代码

1.首先我应该计算出两个日期中间所有的月份,直接给你们一个工具类
    public static List<String> getMonthBetweenDate(String startTime, String endTime){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
        // 声明保存日期集合
        List<String> list = new ArrayList<String>();
        try {
            // 转化成日期类型
            Date startDate = sdf.parse(startTime);
            Date endDate = sdf.parse(endTime);

            //用Calendar 进行日期比较判断
            Calendar calendar = Calendar.getInstance();
            while (startDate.getTime()<=endDate.getTime()){
                // 把日期添加到集合
                list.add(sdf.format(startDate));
                // 设置日期
                calendar.setTime(startDate);
                //把日期增加一天
                calendar.add(Calendar.MONTH, 1);
                // 获取增加后的日期
                startDate=calendar.getTime();
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return list;
    }

3.上demo,这里需要先将远程的git clone到本地,然后注释起来,直接打开就行了

//        Git git = Git.cloneRepository()
//                .setURI( "http://gitlab.mintrust.res/trust/trust-coding.git" )
//                .setDirectory( new File("/Users/candy/IdeaProjects/trust-coding/jgit/repo2") )
//                .setBranch("yx-live-0822")
//                .setCredentialsProvider(new UsernamePasswordCredentialsProvider("jian.wang","password@123"))
//                .call();
        //某个人在某月份提交的代码数量
        Git git = Git.open(new File("/Users/candy/IdeaProjects/trust-coding/jgit/repo2"));
        Repository repository = git.getRepository();
        try( RevWalk revWalk = new RevWalk( repository ) ) {
            ObjectId commitId = repository.resolve( "c9879cacdddb45bd8505cfe46c364a40e041d8f4" );  //这里是提交id,通过git log命令可以查看最近一次提交的commitId
            revWalk.markStart( revWalk.parseCommit( commitId ) );
            int i = 0;
            for( RevCommit commit : revWalk ) {
                if (commit.getAuthorIdent().getWhen().getTime() < strToDate("2022-07-20 12:00:00").getTime()){
                    continue;
                }
                RevCommit parent = null;
                if (commit.getParent(0) != null) {
                    parent = revWalk.parseCommit(commit.getParent(0).getId());
                }

                DiffFormatter df = new DiffFormatter(DisabledOutputStream.INSTANCE);
                df.setRepository(repository);
                //设置比较器忽略空白字符
                df.setDiffComparator(RawTextComparator.WS_IGNORE_ALL);
                df.setDetectRenames(true);

                List<DiffEntry> diffs = df.scan(parent.getTree(), commit.getTree());
                for (DiffEntry diff : diffs) {
//                    df.format(diff);
                    FileHeader fileHeader = df.toFileHeader(diff);
                    List<? extends HunkHeader> hunks = fileHeader.getHunks();
                    int addSize  = 0;
                    int subSize = 0;
                    for (HunkHeader hunk : hunks) {
                        EditList edits = hunk.toEditList();
                        for (Edit edit : edits) {
                            addSize += edit.getEndB() - edit.getBeginB();
                            subSize += edit.getEndA() - edit.getBeginA();
                        }
                    }
                    System.out.println("-----changeType=" + diff.getChangeType().name() + "----------新增的行数:"+ addSize + "-------删减的行数:" + subSize
                            +" -----改变的路径:" + diff.getNewPath() + "------改变的文件数:" +diffs.size());
                }
                i++;
                System.out.println( "一共提交了"+i+"次;"+"------提交注释为:"+commit.getFullMessage()+"-----提交时间为:"+ dateToStr(commit.getAuthorIdent().getWhen())
                        + "----提交人:"+ commit.getAuthorIdent().getName());
            }


        }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值