JGIT获取远程仓库、本地仓库提交版本号

news2024/9/24 3:22:38

https://www.freesion.com/article/50181381474/

JGIT获取远程仓库、本地仓库提交版本号

  • 一、环境搭建
  • 二、项目结构
  • 二、代码部分
    • GitUtils.java
    • GitInfoAtom.java
  • 三、运行结果:
  • 总结

一、环境搭建

Maven依赖导入

<dependency>
            <groupId>org.eclipse.jgit</groupId>
            <artifactId>org.eclipse.jgit</artifactId>
            <version>5.9.0.202009080501-r</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jgit</groupId>
            <artifactId>org.eclipse.jgit.archive</artifactId>
            <version>5.9.0.202009080501-r</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jgit</groupId>
            <artifactId>org.eclipse.jgit.ssh.jsch</artifactId>
            <version>5.9.0.202009080501-r</version>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.30</version>
        </dependency>

        <!-- optional dependency of commons-compress which is needed by JGit -->
        <dependency>
            <groupId>org.tukaani</groupId>
            <artifactId>xz</artifactId>
            <version>1.8</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
 

二、项目结构

项目结构

 

二、代码部分

GITUTILS.JAVA

package Utils;

import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.api.errors.InvalidRemoteException;
import org.eclipse.jgit.api.errors.TransportException;
import org.eclipse.jgit.internal.storage.file.FileRepository;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.transport.CredentialsProvider;
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;

import java.io.File;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class GitUtils {

    /**
     * getMatcher 正则表达式方法
     * @param regex
     * @param source
     * @return
     */
    public static String getMatcher(String regex, String source) {
        String str = "";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(source);
        while (matcher.find()) {
            str = matcher.group(1); // 只取第一组
        }
        return str;
    }


    /**
     * TokenClone 通过**连接克隆
     * @param repositoryUrl
     * @param privateToken
     * @param repositoryDir
     * @return
     * @throws InvalidRemoteException
     * @throws TransportException
     * @throws GitAPIException
     */
    public static Git TokenClone(String repositoryUrl, String privateToken, String repositoryDir)
            throws InvalidRemoteException, TransportException, GitAPIException {
        CredentialsProvider credentialsProvider = new UsernamePasswordCredentialsProvider("PRIVATE-TOKEN",
                privateToken);
        Git git = Git.cloneRepository().setCredentialsProvider(credentialsProvider).setURI(repositoryUrl)
                .setDirectory(new File(repositoryDir)).call();
        return git;
    }

    /**
     * CredentialsProvider **认证
     * @param privateToken
     * @return
     * @throws InvalidRemoteException
     * @throws TransportException
     * @throws GitAPIException
     */
    public static CredentialsProvider Credentials(String privateToken)
            throws InvalidRemoteException, TransportException, GitAPIException {
        CredentialsProvider credentialsProvider = new UsernamePasswordCredentialsProvider("PRIVATE-TOKEN",
                privateToken);
        return credentialsProvider;
    }

    /**
     * LogRemote 获取Git远程仓库版本号
     * @param repositoryUrl
     * @param privateToken
     * @return
     * @throws IOException
     * @throws GitAPIException
     */
    public static String LogRemote(String repositoryUrl, String privateToken) throws IOException, GitAPIException {
        String temDir = "D:\\Test"; //临时文件夹
        if (new File(temDir).exists()) {
            temDir += "one";
        }
        Git git;
        String versionID = "";
        git = TokenClone(repositoryUrl, privateToken, temDir);
        Iterable<RevCommit> iterable = git.log().call();
        for (RevCommit u : iterable) {
            String ID = String.valueOf(u.getId());
            //正则表达式 截取需要的部分
            versionID = getMatcher("commit\\s(\\w+)\\s?", ID);
            break;
        }
        git.close();
        deleteFile(new File(temDir));
        return versionID;
    }

    /**
     * 获取Git本地仓库版本号
     *
     * @return versionID 版本号
     * @throws IOException
     * @throws GitAPIException
     */
    public static String Log(String repositoryDir) throws IOException, GitAPIException {
        String versionID = "";
        Repository localRepo;
        localRepo = new FileRepository(repositoryDir + "/.git");
        Git git = new Git(localRepo);
        System.out.println("获取本地");
        Iterable<RevCommit> iterable = git.log().all().call();
        for (RevCommit u : iterable) {
            //版本id
            String ID = String.valueOf(u.getId());
            versionID = getMatcher("commit\\s(\\w+)\\s?", ID);
            break;
        }
        git.close();
        return versionID;
    }

    /**
     * 删除目录以文件
     *
     * @param dirFile
     * @return
     */
    public static boolean deleteFile(File dirFile) {
        // 如果dir对应的文件不存在,则退出
        if (!dirFile.exists()) {
            return false;
        }

        if (dirFile.isFile()) {
            return dirFile.delete();
        } else {

            for (File file : dirFile.listFiles()) {
                deleteFile(file);
            }
        }
        return dirFile.delete();
    }
}

该类为工具类


GITINFOATOM.JAVA

import Utils.GitUtils;

import org.eclipse.jgit.api.errors.GitAPIException;

public class GitInfoAtom {
    public static void main(String[] args) throws IOException, GitAPIException, Exception {
        // 远程仓库地址
        String repositoryUrl = "http://gitlab.testplus.cn/weipei/GitTest.git";
        // **
        String privateToken = "rAtfgm7U4-WTYX61QLn9111";
        // 本地仓库地址
        String repositoryDir = "C:\\Test";

        // 输出远程仓库的最新版本号
        System.out.println(GitUtils.LogRemote(repositoryUrl, privateToken));

        // 输出本地仓库版本号
        //System.out.println(GitUtils.Log(repositoryDir));

    }
}

三、运行结果:

运行结果

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/797249.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

进入linux系统中修改网段-ip

第一步 &#xff1a;开启虚拟机 cd 到 /etc/sysconfig/network-scripts 目录下&#xff0c;输入命令给ls,展示这个目录下文件和文件夹 第二步&#xff1a;进入到以ifcfg开头的文件 # ifcfg开头的文件&#xff0c;如果有多个网卡&#xff0c;有多个ifcfg-ensxx文件 命令…

【从零开始学爬虫】采集全国各行业经销商网点数据

l 采集网站 【场景描述】采集全国各行业经销商网点数据&#xff0c;以建材行业为例。 【源网站介绍】买购网MAIGOO.COM建材家居频道&#xff0c;专门提供地面材料、墙顶饰材、洁具五金、门窗楼梯、水电电工、外墙材料、照明灯饰、家纺布艺、家具定制等行业&#xff0c;最新品…

LeetCode.189(轮转数组)

对于轮转数组这个题&#xff0c;文章一共提供三种思路&#xff0c;对于每种思路均提供其对应代码的时间、空间复杂度。 目录 1. 创建变量来保存最后一个数&#xff0c;并将其余数组向前挪动一位 &#xff1a; 1.1 原理解析&#xff1a; 1.2 代码实现&#xff1a; 2.创建一个…

【学习笔记】行为识别SOTA方法比较

这里写目录标题 前言方法1 基于CNN的方法Slow-fast&#xff1a; 2 基于Vision-Transformer的方法Video TimeSformer :Video Swin Transformer : 3、基于自监督的方法VideoMAE&#xff1a; 4、基于多模态的方法Intern video: 前言 常用行为识别数据集包括&#xff1a;HMDB-51、…

TL-ER3220G设置vlan

TL-ER3220G是企业宽带路由器。 自带5个RJ45接口。 其中接口1到接口4都可以接入宽带线路。最多可以并接4路。 本例由接口1接入宽带&#xff0c;默认接口2到接口4组成1个vlan&#xff0c;名称vlan。其中接口5特殊&#xff0c;带宽最大100M。 计划将接口2和接口4组成第一个vlan&…

STM32使用HAL库BH1750光照度传感器

开发环境 单片机&#xff1a;STM32F103C8T6 光照度传感器&#xff1a;BH1750 IDE&#xff1a;KEILSTM32CUBEMX 单片机配置 1、STM32CUBEMX BH1750代码 1、头文件 /* ************************************************* BH1750光照数据计算&#xff08;LUX&#xff09; …

H5和小程序测试点分析

最近接触了较多关于H5页面的测试&#xff0c;H5页面的测试除了业务逻辑功能测试外&#xff0c;其他部分的测试方法基本是可以通用的&#xff0c;在此对H5页面和小程序的一些通用测试方法进行总结分享给大家。 H5优势&#xff1a; 1.H5可以跨平台&#xff0c;开发成本相对较低…

中共湖南麒麟信安科技股份有限公司委员会召开庆祝建党102 周年暨“七一”表彰大会

为隆重庆祝中国共产党成立 102 周年&#xff0c;6月30日下午&#xff0c;中共湖南麒麟信安科技股份有限公司委员会召开庆祝建党102 周年暨“七一”表彰大会。麒麟信安党委书记王忠锋出席会议&#xff0c;党委副书记李广辉主持会议&#xff0c;全体党委委员、各支部委员、受表彰…

Gitlab 合并分支与请求合并

合并分支 方式一&#xff1a;图形界面 使用 GitGUI&#xff0c;右键菜单“GitExt Browse” - 菜单“命令” - 合并分支 方式二&#xff1a;命令行 在项目根目录下打开控制台&#xff0c;注意是本地 dev 与远程 master 的合并 // 1.查看本地分支&#xff0c;确认当前分支是否…

Elasticsearch-增删改查数据工作原理

集群 集群的基本概念&#xff1a; 集群&#xff1a;ES 集群由一个或多个 Elasticsearch 节点组成&#xff0c;每个节点配置相同的 cluster.name 即可加入集群&#xff0c;默认值为 “elasticsearch”。节点&#xff1a;一个 Elasticsearch 服务启动实例就是一个节点&#xff…

伦敦银定盘价机制的改变

一直以来&#xff0c;伦敦都是全球最大的现货白银定价中心&#xff0c;LBMA也是全球金银市场中最具有影响力的机构组织&#xff0c;其定盘价一直是世界各白银市场基准价的主要参考标准&#xff0c;被广泛应用于生产厂商、消费者和金融机构之间的交易结算&#xff0c;也是众多白…

刷题DAY 11

题目一 给定一个整型数组arr&#xff0c;和一个整数num某个arr中的子数组sub&#xff0c;如果想达标&#xff0c;必须满足&#xff1a;sub中最大值-sub中最小值<num&#xff0c;返回arr中达标子数组的数量 滑动窗口法,滑动窗口有两个行为1.右括 2.左缩 错误想法1: 当你已经…

工频耐压测试仪的使用方法

一、凯迪正大工频耐压试验装置使用方法 1、核对试验变压器&#xff0c;测量绕阻额定输出电压&#xff0c;使之与操作箱&#xff08;台&#xff09;相吻合。 2、按接线示意图接好试验变压器与操作箱&#xff08;台&#xff09;及感应调压器之间的联线。 3、接通电源&#xff0c;…

索引能优化查询,那么谈谈索引的优点和缺点?索引原理

面试必备&#xff1a;索引能优化查询&#xff0c;那么谈谈索引的优点和缺点?索引原理 简述&#xff1a; 优点: 第一&#xff0c;通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。 第二&#xff0c;可以大大加快数据的检索速度&#xff0c;这也是创建…

工程设计施工3D模型素材下载,全套1000+免费获取

在建筑设计和施工过程中&#xff0c;3D模型数据是至关重要的。设计师和工程师需要依赖高质量的3D模型数据进行方案优化、细节设计、施工规划和质量控制。因此&#xff0c;如何下载高质量的3D模型数据成为了一个重要的问题。 今天给大家免费提供一个“设计、施工3D模型数据下载…

推荐几个不错的免费配色工具网站

1. Paletton专业的配色套件,提供色轮理论及调色功能。可查看配色预览效果。 网站:http://paletton.com 2. Colormind一个基于机器学习的智能配色工具。可以一键生成配色方案。 网站:http://colormind.io 3. Adobe ColorAdobe官方的配色工具,可以从图片中取色,也可以随机生成配色…

ModStartCMS v6.9.0 后台多标签改进,主题色自动切换修复

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议&#xff0c;免费且不限制商业使用。 功能特性 丰富的模块市…

docker安装MySQL集群(一主一从)

目录 docker安装MySQL集群&#xff08;一主一从&#xff09;前菜测试MySQL 集群安装master容器slave容器master容器配置主从赋值测试 docker安装MySQL集群&#xff08;一主一从&#xff09; 前菜测试 1、拉取mysql5.7的镜像到本地 [rootaliyun ~]# docker pull mysql:5.72、…

优思学院|丰田公司的精益生产为什么让人敬佩?

因为丰田精益生产方式的成功不是偶然&#xff0c;它历经了50多年&#xff0c;从员工的教育训练着手&#xff0c;使他们能运用非常严格的问题解决程序&#xff0c;采用科学方法&#xff0c;针对各项活动、流程及制度不断地加以评估、检测与改进而自然形成的。事实上&#xff0c;…

【阿Q送书第四期】好书推荐《重构的时机和方法》

文章目录 背景概念介绍案例目录购书 送书规则 背景 最近公司正在组织 Code Review &#xff0c;看看之前为了赶项目写的代码&#xff0c;真的是一言难尽。所以想趁同事审查我的代码之前做点“小动作”&#xff0c;没错&#xff0c;我想说的就是“代码重构”。 对于工作时间较…