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显示新…...
ARM Cortex-M4中断优先级与嵌套配置实战指南
1. 项目概述:为什么中断优先级和嵌套是嵌入式开发的“命门”如果你正在用ARM Cortex-M4做项目,无论是做电机控制、物联网设备还是消费电子,中断系统绝对是绕不开的核心。很多新手工程师,甚至一些有经验的开发者,常常在…...
昇腾CANN ops-blas:GEMM 在 NPU 上为什么可以快到极致
矩阵乘是所有深度学习计算的根。Attention、全连接、卷积展开——归根到底都是矩阵乘。ops-blas 是 CANN 里专门做高性能 GEMM(General Matrix Multiply)的算子库,核心目标是把昇腾 NPU 的 Cube 单元利用率拉到 90% 以上。 ops-blas 和 ops-n…...
用 5 款全栈电商微系统打通你的前后端核心逻辑链路(附级联 Prompt)
各位大前端、全栈开发以及正在寻求技术进阶的同仁们,大家好。在日常的技术社区里,我们经常能看到各种流于表面的前端 UI 静态页或者几行代码拼凑的后端 CRUD 示例。但真正能在一个全栈工程师的履历中起到定海神针作用的,往往是那些功能内敛、…...
告别“感觉能用”:基于 Ragas 构建 RAG 自动化回归测试流水线的方法论
很多团队把 RAG 系统做到能演示、能回答、能接知识库之后,心里都会出现一种熟悉又危险的判断:看起来差不多能用了。 但只要系统真的进入业务场景,这种“差不多”很快就会露出问题。今天回答还算靠谱,明天换一批文档就开始飘;演示集表现很好,真实用户一多就出现答非所问;…...
上班族开例会懒得记要点?2026年这3款AI总结工具,会后自动整理纪要
做互联网运营四年,开会已经成了每天的常态。部门周例会、项目复盘会、线上培训课、远程沟通会,大大小小的视频会议一场接一场。以前最让我头疼的不是参会,而是会后整理纪要。开会时既要认真听讨论、跟进工作进度,又要低头飞速记笔…...
深度实战:如何利用7zip引擎实现加密压缩包密码暴力破解
深度实战:如何利用7zip引擎实现加密压缩包密码暴力破解 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 在数字资产管理中&#…...
如何快速掌握Ender-3 3D打印机:新手必看的完整配置指南
如何快速掌握Ender-3 3D打印机:新手必看的完整配置指南 【免费下载链接】Ender-3 The Creality3D Ender-3, a fully Open Source 3D printer perfect for new users on a budget. 项目地址: https://gitcode.com/gh_mirrors/en/Ender-3 Ender-3 3D打印机是一…...
Saleor:应对现代电商架构挑战的无头商业引擎解决方案
Saleor:应对现代电商架构挑战的无头商业引擎解决方案 【免费下载链接】saleor Saleor Core: the high performance, composable, headless commerce API. 项目地址: https://gitcode.com/gh_mirrors/sa/saleor 在数字化转型浪潮中,电商平台面临的…...
USB扩展坞
usb中引脚含意DP表示USB的差分信号线正极DM表示USB的差分信号线负极差分对布线:大于设置的距离,使用等长调节每一个晶振都要放置...
VSCode PDF预览器技术实现深度解析:基于PDF.js的编辑器集成架构
VSCode PDF预览器技术实现深度解析:基于PDF.js的编辑器集成架构 【免费下载链接】vscode-pdfviewer Show PDF preview in VSCode. 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-pdfviewer 在Visual Studio Code生态系统中,PDF文档预览功能…...
