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 工具类 (代码检出、删除分支(本地、远程)、新建分支、切换分支、代码提交)_jgit删除远程分支_CJ点的博客-CSDN博客 <!--JAVA操作GIT--><dependency><groupId>org.…...
什么是redux?如何在react 项目中使用redux?
redux 概念 redux是一种用于管理JavaScript应用程序的状态管理库。它可以与React、Augular、Vue等前端框架结合使用,但也可以纯在JavaScript应用程序中独立使用。redux遵循单项数据流的原则,通过一个全局的状态树来管理应用程序的状态,从而使…...
mysql的json处理
写在前面 需要注意,5.7以上版本才支持,但如果是生产环境需要使用的话,尽量使用8.0版本,因为8.0版本对json处理做了比较大的性能优化。你你可以使用select version();来查看版本信息。 本文看下MySQL的json处理。在正式开始让我们先…...
前端学习——Vue (Day8)
Vue3 create-vue搭建Vue3项目 注意要使用nodejs16.0版本以上,windows升级node可以西安使用where node查看本地node位置,然后到官网下载msi文件,在本地路径下安装即可 安装完可以使用node -v检查版本信息 项目目录和关键文件 组合式API - s…...
Windows环境下安装及部署Nginx
一、安装Nginx教程 1、官网下载地址:https://nginx.org/en/download.html 2、下载教程:选择Stable version版本下载到本地 3、下载完成后,解压放入本地非中文的文件夹中: 4、启动nginx:双击nginx.exe,若双击…...
使用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时区设置
一般来说,时序数据就是带有时间序列属性的数据。在处理时序数据时,TDengine有着自己独特的方式。但是如果没有正确理解TDengine在写入和查询上的行为,极可能会因为配置了错误的时区(timezone),而导致写入和…...
站外引流效果差?一文带你搞懂解海外主流社交媒体算法!
在流量成本越来越高的当下,无论是平台卖家还是独立站卖家都在努力拓展流量渠道。站外引流是推动业务增长的关键策略,很多卖家会把重点放在内容营销上,但其实除了做好内容之前,了解社交媒体的算法才能让营销效果最大化。 01.Faceb…...
css 动画之旋转视差
序:网上看到的一个例子,做一下 效果图: 代码: <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项目后,没反应,不编译。 解决 在maven工具框中选择compile工具,运行即可。...
android jetpack App Startup 应用启动时初始化组件(java)
有什么用? 应用启动时初始化组件。 怎么用 添加依赖 dependencies {implementation "androidx.startup:startup-runtime:1.1.1" }创建类,继承Initializer。 public class AppInit implements Initializer<String> {NonNullOverride…...
【设计模式|行为型】命令模式(Command Pattern)
说明 命令模式(Command Pattern)是一种行为设计模式,它将请求封装为一个对象,以便在不同的请求者和接收者之间进行解耦、参数化和操作的队列化。命令模式允许你将具体的请求封装为对象,这些对象之间彼此独立ÿ…...
SqlServer 批量删除表
SqlServer 批量删除表 直接上SQL脚本吧 SELECT row_number()over(order by Name) as FID,Name into #temp FROM SysObjects Where XTypeU --类型,U为实体表 and name like TMP% --表名过滤(自定义就好) ORDER BY Namedeclare count int 0…...
[Linux]线程基本知识
概念 进程 一个正在执行的程序,它是资源分配的最小单位 进程中的事情需要按照一定的顺序逐个进行 进程出现了很多弊端: 一是由于进程是资源拥有者,创建、撤消与切换存在较大的时空开销,因此需要引入轻型进程; 二是由于对称多…...
STM32 串口基础知识学习
串行/并行通信 串行通信:数据逐位按顺序依次传输。 并行通信:数据各位通过多条线同时传输。 对比 传输速率:串行通信较低,并行通信较高。抗干扰能力:串行通信较强,并行通信较弱。通信距离:串…...
页面滚动时隐藏element-ui下拉框/时间弹框
场景 在系统中,当(有垂直滚动时)点击下拉框后滚动页面,会发现下拉项会遮盖住页面中的元素,不会隐藏 解决:(以vue为例) 在页面滚动或者缩放时隐藏下拉项即可(借助点击目标元素,下…...
C#中i++和++i的底层原理
一:前言 我们都知道,i是先取值,后计算。i是先计算,后取值。下面说下它的底层原理 二:原理 int i 0; i; Console.WriteLine(i); 结果是1 执行步骤是: 1.将常量0压入栈中 2.从栈中取出元素0,局…...
在win10下安装verilator
主要参考文章 Verilator简介及其下载安装卸载_徐晓康的博客的博客-CSDN博客https://blog.csdn.net/weixin_42837669/article/details/114505364上面的文章可以解决大部分问题,但是可能是方案有些老了,已经安装最新的版本,下面对最新的版本安装提供解决方案 一 预备工作 安…...
java设计模式-建造者(Builder)设计模式
介绍 Java的建造者(Builder)设计模式可以将产品的内部表现和产品的构建过程分离开来,这样使用同一个构建过程来构建不同内部表现的产品。 建造者设计模式涉及如下角色: 产品(Product)角色:被…...
iOS开发-实现获取下载主题配置动态切换主题
iOS开发-实现获取下载主题配置动态切换主题 iOS开发-实现获取下载主题配置更切换主题,主要是通过请求服务端配置的主题配置、下载主题、解压保存到本地。通知界面获取对应的图片及颜色等。 比如新年主题风格,常见的背景显示红色氛围图片、tabbar显示新…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
全面解析各类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? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
