JGit

article/2025/9/23 7:19:32

JGit

参考:https://yonge812.iteye.com/blog/1687480

概念:

就是用java代码实现git的命令行操作

JGit API:

https://download.eclipse.org/jgit/site/5.2.1.201812262042-r/apidocs/index.html

打开git仓库 

Git git=Git.open(new File(“FilePath”))

获取检出命令对象

CheckoutCommand  cc=git.checkout()

给检出命令对象设置指定的提交版本号或分支名

cc.setName(“版本号或者分支名”)

执行检出命令

cc.call();

 

TreeWalk

该类可以根据需要在尽可能多的树中执行n路差异。

RevWalk

遍历提交图并按顺序生成匹配的提交

 

应用:

需求:利用java程序和每次提交代码生成的commitid来获取该次提交的所有文件

公司的要求在每次提交工单,并且测试通过之后,要把该次提交生成的文件放到一个对应的工单文件夹并上传到指定仓库

本项目采用maven架构,出于内网环境的考虑,也可以改为普通java项目

需要用到的jar包(pom.xml):

		<dependency><groupId>org.eclipse.jgit</groupId><artifactId>org.eclipse.jgit</artifactId><version>4.8.0.201706111038-r</version></dependency>

常量类

设置参数

package com.wowowo.constant;public class JGitConstant {/*** 文件路径复制过来之后把\替换成/!!!!!* 如果想要获取以前提交的文件,把flag设为true,并填写你当前版本的commitid,如果在提交之后直接获取修改的文件,flag设为false* */// 仓库所在urlpublic static final String gitRoot = "";// 该次提交的commitid,长idpublic static final String revision = "";// 要保存到的代码文件夹所在位置public static final String destPath = "";// --------------------------------------------------------------------------------// 如果想要获取以前提交的文件,把flag设为truepublic static final Boolean flag = false;// currentid填你当前版本的commitidpublic static final String currentid = "";// --------------------------------------------------------------------------------}

getLog()

根据版本号版和其前一个版本的差异获取DiffEntry  list

代码解析:

根据commitid获取所有的revcommit 迭代器,里面存放历次提交信息

Iterator和Iterable接口的区别

https://www.cnblogs.com/keyi/p/5821285.html

拿出2个revocommit的revwalk

新建treewalk对象

把2个revwalk放入treewalk对象中

DiffEntiry.scan 方法传入treewalk参数,获取差异list

	public static List<DiffEntry> getLog() throws Exception {//load();git = Git.open(new File(gitRoot));// 我走了,本地版本切换该commitid的版本if (flag) {git.checkout().setName(revision).call();}Repository repository = git.getRepository();ObjectId objId = repository.resolve(revision);Iterable<RevCommit> allCommitsLater = git.log().add(objId).call();Iterator<RevCommit> iter = allCommitsLater.iterator();RevCommit commit = iter.next();TreeWalk tw = new TreeWalk(repository);tw.addTree(commit.getTree());commit = iter.next();if (commit != null)tw.addTree(commit.getTree());elsereturn null;tw.setRecursive(true);RenameDetector rd = new RenameDetector(repository);rd.addAll(DiffEntry.scan(tw));return rd.compute();}

获取提交的文件名,拷贝文件

	public static void getCommitPath(List<DiffEntry> list) {try {for (DiffEntry diffEntry : list) {// 跳过删除的文件if (diffEntry.getOldPath().equals("/dev/null")) {System.out.println("删除了" + diffEntry.getNewPath());continue;} else if (diffEntry.getNewPath().equals("/dev/null")) {System.out.println("新建的文件:" + diffEntry.getOldPath());} else {System.out.println("修改的文件:" + diffEntry.getOldPath());}String srcFile = gitRoot + "/" + diffEntry.getOldPath();String destDir = destPath + "/"+ diffEntry.getOldPath().substring(0, diffEntry.getOldPath().lastIndexOf("/"));String destFile = destPath + "/" + diffEntry.getOldPath();fileDir = new File(destDir);fileDir.mkdirs();file = new File(destFile);System.out.println(destFile);file.createNewFile();CopyFiles.copy(new File(srcFile), new File(destFile));// System.out.println("要拷贝的源文件地址"+gitRoot +// diffEntry.getOldPath());// System.out.println("复制到的目标文件地址"+destPath +// diffEntry.getOldPath());System.out.println("**************************************************************************");}// 我又回来啦!,拷贝完毕,回到当前版本if (flag) {git.checkout().setName(currentid).call();}} catch (Exception e) {e.printStackTrace();}}

 

 

 


http://chatgpt.dhexx.cn/article/ZEjIOcSP.shtml

相关文章

java pom_Jpom

软件简介 Jpom是一款简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件。 你为什么需要Jpom Java 项目在实际部署运维&#xff0c;通用的方法是登录服务器上传新的项目包&#xff0c;执行相应命令管理&#xff0c;如果管理多个项目则重复操作上述步骤 此方法不足的是…

我对FastFCN的理解

FastFCN:重新思考膨胀卷积在语义分割主干网络中的作用 扩张卷积膨胀卷积空洞卷积 一、前言 1.解决的问题 时下的语义分割模型通常在主干网络中使用扩张卷积来获得高分辨率的特征图&#xff0c;但是这样做会增加计算复杂度和内存占用。 该论文提出了一种新型的联合上采样模块…

基于LPRNet的车牌识别算法移植与测试

课程全程将在[SOPHGO&#xff08;算能&#xff09;云平台上进行。 本次课程将介绍: &#xff08;1&#xff09;SOPHGO&#xff08;算能&#xff09;云平台环境搭建 &#xff08;2&#xff09;LPRNet算法 &#xff08;3&#xff09;通过BMNNSDK 2.7.0进行LPRNet模型转换和量…

Javajr

第一章 计算机基础 1.1 计算机的结构体系 通过CPU的控制器将输入设备中数据读取到CPU中的存储器中,然后通过运算器将存储器的数据进行运算,最后再有控制器将运算器的结果显示到输出设备中。 这个结构我们称之为冯诺依曼体系结构。 第二章 Java基础环境搭建 2.1Java技术体…

深度学习(9):FastFCN论文翻译与学习

FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic FastFCN:重新思考膨胀卷积在语义分割主干网络中的作用 注&#xff1a;部分插图近几天补上&#xff0c;赶其他ddl去了 注&#xff1a;作者的理论分析我觉得主要集中在3.2&#xff0c;大家可以注意一下 在…

JPDA

Transferability versus Discriminability:Joint Probability Distribution Adaptation (JPDA) 最新的一篇迁移学习&#xff08;传统方法&#xff09; 读后感。。。 一、introduction 传统的迁移学习可以分成&#xff1a; 基于参数的&#xff1a;需要目标域中有带有label的样…

【第五期论文复现赛-语义分割】FastFCN

【论文复现赛】FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation 本文提出了一个新的联合上采样模块JPU(Joint Pyramid Upsampling)&#xff0c;将提取高分辨率特征图的任务映射成一个联合上采样问题。JPU模块可应用于各种语义分割模型中&…

教育版idea下载

点击Find your IDE后进入下载界面&#xff1a; 点击download&#xff0c;进入真正的下载界面&#xff1a; 看到这个界面&#xff0c;别慌&#xff0c;往下拉拉进度条&#xff1a; 选择自己想要的版本&#xff0c;然后下载就可以了。不说了&#xff0c;真香&#xff08;手动滑…

IntelliJ IDEA旗舰版 下载安装

官网下载地址&#xff1a; 最新版&#xff1a;https://www.jetbrains.com/idea/ 历史版本&#xff1a; https://www.jetbrains.com/idea/download/previous.html 下载完成后双击,开始安装,点击next 选择安装路径 选择安装64位,点击next 默认选择,点击install 开始安装! 安装…

IntelliJ IDEA 2018 破解版下载安装

参考文章&#xff1a; 1、里面有 idea2018 网盘下载地址 idea 2018 破解版 下载解压完&#xff1a; 2、详细安装图解&#xff1a; IntelliJ IDEA 下载安装&#xff08;含注册码&#xff09; 傻瓜式安装即可 哈哈&#xff0c;安装完 run 配置一路点击next&#xff0c;这里…

免费使用正版 IDEA

作为一个后端 Java 开发&#xff0c;IDEA 是个人最喜欢的 IDE&#xff0c;它非常智能&#xff0c;懂我的心&#xff0c;极大地提高了个人编程效率&#xff1b;然而&#xff0c;这是一款收费软件&#xff0c;并且其价格不菲。想了解 IDEA 价格的可以详见&#xff1a;https://www…

[工具书]IntelliJ IDEA社区版下载及配置 - ZIP版

文章目录 1. 前言2. 前提依赖软件3. 初始下载及运行4. 基础配置4.1 配置Maven 4.2 配置JDK5 插件安装5.1 安装插件统一位置5.2 SpringBoot5.3 Tomcat5.3.1 intelliJ中查找及安装Tomcat插件5.3.2 下载及配置Tomcat5.3.3 在IntelliJ中配置使用Smart Tomcat 7. 工具设置8. 好用的快…

2022年最新IDEA下载教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言下载总结 前言 赶时间跳过这里 故事是这样&#xff0c;因为我c盘存储空间严重不足&#xff0c;然后我就作死把桌面&#xff0c;下载&#xff0c;文档访问…等…

2023最新IDEA下载安装教程

IDEA下载安装教程 机器环境下载安装 机器环境 win系统&#xff0c;IDEA版本2022.3.1 下载 中国官网地址&#xff1a;https://www.jetbrains.com/zh-cn/idea/download/点击链接&#xff0c;选择自己想要的版本进行下载 安装 双击启动exe安装文件&#xff0c;选择next 选择…

IDEA的下载和安装

1.进入官网下载idea IntelliJ IDEA: The Capable & Ergonomic Java IDE by JetBrains 点击中间的download键进入下载界面 这里可以下载最新版或者老版的idea&#xff0c;这里推荐下载老版本的更稳定 下载完成后按照如上选择自己对应位数的 直接选择运行idea 建议直接选…

IDEA企业版安装(破!)

一、下载IDEA企业版&#xff0c;下载安装 二、打开IDEA&#xff0c;然后点击试用 三、新建一个空项目 四、进入软件后将ide-eval-resetter-2.1.6.zip这个ZIP包直接拖入 五、拖入后会弹出Restart重启按钮&#xff0c;点击重启IDE 六、重启后&#xff0c;在help里唤出插件Eval…

IDEA 2021免费下载(附安装教程)

下载地址 [软件名称]: IntelliJ IDEA 2021 [软件大小]: 658MB [安装环境]: Windows [下载链接]: https://pan.baidu.com/s/1-ohnxYE93u7ibxo5F2crJQ [提 取 码]: geek (建议复制粘贴链接与提取码) [下载方法]&#xff1a;点击查看如何下载 注&#xff1a;若链接失效&#xff0c…

IDEA 2020免费下载(附安装教程)

下载地址 [软件名称]: IntelliJ IDEA 2020 [软件大小]: 660MB [安装环境]: Windows [下载链接]: https://pan.baidu.com/s/1aWGWZjjV3_MkaxFHfIRB5A [提 取 码]: geek (建议复制粘贴链接与提取码) [下载方法]&#xff1a;点击查看如何下载 注&#xff1a;若链接失效&#xff0c…

Intellij IDEA免费版方法(1)

初学Java&#xff0c;当然离不了风靡“码农界”的Java神器Intellij IDEA&#xff0c;可是官网上面都要money&#xff0c;下面给大家带来Intellij IDEA 学生的免费使用计划&#xff1a; 1、下载 在Intellij IDEA官网上下载 下载地址&#xff1a;https://www.jetbrains.com/idea/…

最新2020版IDEA下载安装教程

1.进入IDEA官网下载界面&#xff08;地址为 https://www.jetbrains.com/idea/&#xff09;&#xff0c;点击 DOWNLOAD&#xff0c;如图。 如果无法打开官网&#xff0c;可以尝试修改windows的hosts文件&#xff0c;具体方式如下&#xff1a; 打开C:\Windows\System32\drivers…