当前位置: 首页 > news >正文

Jgit 工具类 (代码检出、删除分支(本地、远程)、新建分支、切换分支、代码提交)

https://blog.csdn.net/qq_37203082/article/details/120327084

Jgit 工具类 (代码检出、删除分支(本地、远程)、新建分支、切换分支、代码提交)_jgit删除远程分支_CJ点的博客-CSDN博客

        <!--JAVA操作GIT--><dependency><groupId>org.eclipse.jgit</groupId><artifactId>org.eclipse.jgit</artifactId><version>3.7.0.201502260915-r</version></dependency>

import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.ListBranchCommand;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.transport.CredentialsProvider;
import org.eclipse.jgit.transport.RefSpec;
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.File;
import java.util.List;/*** desciption Java-git工具类* @author cjw* @Date 2021/9/13 17:35*/
public class JgitUtil {private static final Logger log = LoggerFactory.getLogger(JgitUtil.class);/*** desciption 检出仓库代码* @param url git仓库连接* @param localPath 代码文件夹* @param gitName git账号* @param gitPassword git密码* @return* @Date 2021/9/13 17:43*/public static Boolean cloneRepository(String url, String localPath,String gitName,String gitPassword) {Git git =null;try {log.info("JgitUtil.cloneRepository;开始检出Master代码;git路径:{},检出路径:{}",url,localPath);File file=new File(localPath);if(file.isDirectory()){log.info("JgitUtil.cloneRepository;该路径:{},已存在文件夹,删除原文件,进行覆盖",localPath);deleteFile(file);}CredentialsProvider credentialsProvider = new UsernamePasswordCredentialsProvider(gitName, gitPassword);git = Git.cloneRepository().setURI(url).setDirectory(new File(localPath)).setCloneAllBranches(true).setCredentialsProvider(credentialsProvider).call();return true;} catch (Exception e) {log.error("JgitUtil.cloneRepository;错误;检出Master代码异常;检出路径:{},异常信息:{}",url,e);return false;} finally{if (git != null) {git.close();}}}/*** desciption 切换分支* @param localPath* @param branchName* @param gitName git账号* @param gitPassword git密码* @Date 2021/9/13 17:48*/public static  Boolean checkoutBranch(String localPath, String branchName,String gitName,String gitPassword){log.info("JgitUtil.checkoutBranch;切换分支;{}",branchName);String projectURL = localPath + "\\.git";CredentialsProvider credentialsProvider = new UsernamePasswordCredentialsProvider(gitName, gitPassword);Git git = null;try {git = Git.open(new File(projectURL));git.checkout().setCreateBranch(false).setName(branchName).call();git.pull().setCredentialsProvider(credentialsProvider).call();return true;}catch (Exception e){log.error("JgitUtil.checkoutBranch;错误;切换分支失败;异常信息:{}",e);return false;} finally{if (git != null) {git.close();}}}/*** desciption 提交代码* @param localPath 代码目录* @param pushMessage 提交信息* @param gitName git账号* @param gitPassword git密码* @return* @Date 2021/9/13 17:52*/public static Boolean gitCommitAndPush(String localPath,String pushMessage,String gitName,String gitPassword)  {log.info("JgitUtil.gitCommitAndPush;提交代码;信息:{}",pushMessage);String projectURL = localPath + "\\.git";Git git = null;try {CredentialsProvider credentialsProvider = new UsernamePasswordCredentialsProvider(gitName, gitPassword);git = Git.open(new File(projectURL));git.pull().setCredentialsProvider(credentialsProvider).call();git.add().addFilepattern(".").call();git.commit().setMessage(pushMessage).call();git.pull().setCredentialsProvider(credentialsProvider).call();git.push().setCredentialsProvider(credentialsProvider).call();return true;} catch (Exception e){log.error("JgitUtil.gitCommitAndPush;错误;提交代码;信息:{};异常信息:{}",pushMessage,e);return false;} finally{if (git != null) {git.close();}}}/*** desciption 创建新的分支* @param localPath 代码目录* @param baranchName* @param gitName git账号* @param gitPassword git密码* @return* @Date 2021/9/13 17:58*/public static Boolean newBranch(String localPath,String baranchName,String gitName,String gitPassword) {log.info("JgitUtil.newBranch;创建新的分支;名称{}",baranchName);Git git = null;try {String projectURL = localPath + "\\.git";CredentialsProvider credentialsProvider = new UsernamePasswordCredentialsProvider(gitName, gitPassword);git = Git.open(new File(projectURL));//检查新建的分支是否已经存在,如果存在则将已存在的分支强制删除并新建一个分支List<Ref> refs = git.branchList().setListMode(ListBranchCommand.ListMode.ALL).call();for (Ref ref : refs) {String bName = ref.getName().substring(ref.getName().lastIndexOf("/") + 1);if (ref.getName().substring(ref.getName().lastIndexOf("/") + 1).equals(baranchName)) {log.info("JgitUtil.newBranch;分支已存在;进行删除操作,再新建;{}",baranchName);//删除本地分支git.branchDelete().setBranchNames(bName).setForce(true).call();//删除远程分支//这里的用法和网上不同,可能因为版本的原因导致RefSpec refSpec3 = new RefSpec().setSource(null).setDestination("refs/heads/"+bName);git.push().setRefSpecs(refSpec3).setRemote("origin").setCredentialsProvider(credentialsProvider).call();break;}}
//            //新建分支Ref ref = git.branchCreate().setName(baranchName).call();git.push().add(ref).setCredentialsProvider(credentialsProvider).call();return true;} catch (Exception ex) {log.error("JgitUtil.newBranch;错误;创建新的分支,{}",ex);return false;}finally{if (git != null) {git.close();}}}/*** 先根遍历序递归删除文件夹* @param dirFile 要被删除的文件或者目录* @return 删除成功返回true, 否则返回false*/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();}public static void main(String[] args) {JgitUtil gitUtil = new JgitUtil();//git远程url地址
//        String url = "XXXX.git";String url = "http://11.11.11.11:9799/cjw/auto.git";String branchName = "buriedpoint-demo3";String localPath = "D:\\data"+File.separator+branchName;String gitName="xxx";String gitPassword="xxxxxx";try {//拉取master代码
//            JgitUtil.cloneRepository(url,localPath,gitName, gitPassword);//创建分支
//            JgitUtil.newBranch(localPath,branchName,gitName, gitPassword);
//            //切换分支
//            JgitUtil.checkoutBranch(localPath,branchName,gitName, gitPassword);
//            //代码提交
//            JgitUtil.gitCommitAndPush(localPath,"测试提交1",gitName, gitPassword);} catch (Exception e) {e.printStackTrace();}}}

相关文章:

Jgit 工具类 (代码检出、删除分支(本地、远程)、新建分支、切换分支、代码提交)

https://blog.csdn.net/qq_37203082/article/details/120327084 Jgit 工具类 (代码检出、删除分支&#xff08;本地、远程&#xff09;、新建分支、切换分支、代码提交)_jgit删除远程分支_CJ点的博客-CSDN博客 <!--JAVA操作GIT--><dependency><groupId>org.…...

什么是redux?如何在react 项目中使用redux?

redux 概念 redux是一种用于管理JavaScript应用程序的状态管理库。它可以与React、Augular、Vue等前端框架结合使用&#xff0c;但也可以纯在JavaScript应用程序中独立使用。redux遵循单项数据流的原则&#xff0c;通过一个全局的状态树来管理应用程序的状态&#xff0c;从而使…...

mysql的json处理

写在前面 需要注意&#xff0c;5.7以上版本才支持&#xff0c;但如果是生产环境需要使用的话&#xff0c;尽量使用8.0版本&#xff0c;因为8.0版本对json处理做了比较大的性能优化。你你可以使用select version();来查看版本信息。 本文看下MySQL的json处理。在正式开始让我们先…...

前端学习——Vue (Day8)

Vue3 create-vue搭建Vue3项目 注意要使用nodejs16.0版本以上&#xff0c;windows升级node可以西安使用where node查看本地node位置&#xff0c;然后到官网下载msi文件&#xff0c;在本地路径下安装即可 安装完可以使用node -v检查版本信息 项目目录和关键文件 组合式API - s…...

Windows环境下安装及部署Nginx

一、安装Nginx教程 1、官网下载地址&#xff1a;https://nginx.org/en/download.html 2、下载教程&#xff1a;选择Stable version版本下载到本地 3、下载完成后&#xff0c;解压放入本地非中文的文件夹中&#xff1a; 4、启动nginx&#xff1a;双击nginx.exe&#xff0c;若双击…...

使用AOP切面对返回的数据进行脱敏的问题

1.注解类 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/*** Author: xiaoxin* Date: 2023/7/21 17:15*/ Retention(RetentionPolicy.RUNTIME) Targe…...

TDengine时区设置

一般来说&#xff0c;时序数据就是带有时间序列属性的数据。在处理时序数据时&#xff0c;TDengine有着自己独特的方式。但是如果没有正确理解TDengine在写入和查询上的行为&#xff0c;极可能会因为配置了错误的时区&#xff08;timezone&#xff09;&#xff0c;而导致写入和…...

站外引流效果差?一文带你搞懂解海外主流社交媒体算法!

在流量成本越来越高的当下&#xff0c;无论是平台卖家还是独立站卖家都在努力拓展流量渠道。站外引流是推动业务增长的关键策略&#xff0c;很多卖家会把重点放在内容营销上&#xff0c;但其实除了做好内容之前&#xff0c;了解社交媒体的算法才能让营销效果最大化。 01.Faceb…...

css 动画之旋转视差

序&#xff1a;网上看到的一个例子&#xff0c;做一下 效果图&#xff1a; 代码&#xff1a; <style>.content{width: 300px;height: 300px;margin: 139px auto;display: grid;grid-template-columns: repeat(3,1fr);grid-template-rows: repeat(3,1fr);grid-template:…...

maven项目、springboot项目复制文件进来后没反应、不编译解决方法

问题如下 把文件复制进springboot项目后&#xff0c;没反应&#xff0c;不编译。 解决 在maven工具框中选择compile工具&#xff0c;运行即可。...

android jetpack App Startup 应用启动时初始化组件(java)

有什么用&#xff1f; 应用启动时初始化组件。 怎么用 添加依赖 dependencies {implementation "androidx.startup:startup-runtime:1.1.1" }创建类&#xff0c;继承Initializer。 public class AppInit implements Initializer<String> {NonNullOverride…...

【设计模式|行为型】命令模式(Command Pattern)

说明 命令模式&#xff08;Command Pattern&#xff09;是一种行为设计模式&#xff0c;它将请求封装为一个对象&#xff0c;以便在不同的请求者和接收者之间进行解耦、参数化和操作的队列化。命令模式允许你将具体的请求封装为对象&#xff0c;这些对象之间彼此独立&#xff…...

SqlServer 批量删除表

SqlServer 批量删除表 直接上SQL脚本吧 SELECT row_number()over(order by Name) as FID,Name into #temp FROM SysObjects Where XTypeU --类型&#xff0c;U为实体表 and name like TMP% --表名过滤&#xff08;自定义就好&#xff09; ORDER BY Namedeclare count int 0…...

[Linux]线程基本知识

概念 进程 一个正在执行的程序&#xff0c;它是资源分配的最小单位 进程中的事情需要按照一定的顺序逐个进行 进程出现了很多弊端: 一是由于进程是资源拥有者&#xff0c;创建、撤消与切换存在较大的时空开销&#xff0c;因此需要引入轻型进程&#xff1b; 二是由于对称多…...

STM32 串口基础知识学习

串行/并行通信 串行通信&#xff1a;数据逐位按顺序依次传输。 并行通信&#xff1a;数据各位通过多条线同时传输。 对比 传输速率&#xff1a;串行通信较低&#xff0c;并行通信较高。抗干扰能力&#xff1a;串行通信较强&#xff0c;并行通信较弱。通信距离&#xff1a;串…...

页面滚动时隐藏element-ui下拉框/时间弹框

场景 在系统中&#xff0c;当&#xff08;有垂直滚动时&#xff09;点击下拉框后滚动页面&#xff0c;会发现下拉项会遮盖住页面中的元素&#xff0c;不会隐藏 解决&#xff1a;(以vue为例) 在页面滚动或者缩放时隐藏下拉项即可&#xff08;借助点击目标元素&#xff0c;下…...

C#中i++和++i的底层原理

一&#xff1a;前言 我们都知道&#xff0c;i是先取值&#xff0c;后计算。i是先计算&#xff0c;后取值。下面说下它的底层原理 二&#xff1a;原理 int i 0; i; Console.WriteLine(i); 结果是1 执行步骤是&#xff1a; 1.将常量0压入栈中 2.从栈中取出元素0&#xff0c;局…...

在win10下安装verilator

主要参考文章 Verilator简介及其下载安装卸载_徐晓康的博客的博客-CSDN博客https://blog.csdn.net/weixin_42837669/article/details/114505364上面的文章可以解决大部分问题,但是可能是方案有些老了,已经安装最新的版本,下面对最新的版本安装提供解决方案 一 预备工作 安…...

java设计模式-建造者(Builder)设计模式

介绍 Java的建造者&#xff08;Builder&#xff09;设计模式可以将产品的内部表现和产品的构建过程分离开来&#xff0c;这样使用同一个构建过程来构建不同内部表现的产品。 建造者设计模式涉及如下角色&#xff1a; 产品&#xff08;Product&#xff09;角色&#xff1a;被…...

iOS开发-实现获取下载主题配置动态切换主题

iOS开发-实现获取下载主题配置动态切换主题 iOS开发-实现获取下载主题配置更切换主题&#xff0c;主要是通过请求服务端配置的主题配置、下载主题、解压保存到本地。通知界面获取对应的图片及颜色等。 比如新年主题风格&#xff0c;常见的背景显示红色氛围图片、tabbar显示新…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...