【Git】Java 使用 JGit 创建 Git 代码仓库

JGit 是一个用 Java 实现的 Git 版本控制工具。它是由 EGit 项目发展而来的,EGit 是 Eclipse 基金会的一个开源项目,旨在为 Eclipse IDE 提供 Git 支持。

JGit 提供了一个完整的 Git 实现,包括存储库、索引、对象数据库、命令行客户端和图形界面客户端等。它可以与其他 Git 客户端(如 Git Bash、SourceTree 等)配合使用,也可以作为独立的版本控制系统使用。

JGit 的优点之一是它的速度和性能。由于它是用 Java 实现的,因此可以在各种平台上运行,并且可以利用 Java 的内存管理和垃圾回收机制来提高性能。

本文将介绍使用 JGit 实现推送创建。

环境

  • Git 服务器采用Gitea
  • Gitea 已开启推送创建功能 【Gitea】配置 Push To Create

代码实现

JGit pom 引用

        <!-- https://mvnrepository.com/artifact/org.eclipse.jgit/org.eclipse.jgit -->
<dependency>
    <groupId>org.eclipse.jgit</groupId>
    <artifactId>org.eclipse.jgit</artifactId>
    <version>5.1.3.201810200350-r</version>
</dependency>

实现代码


import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;

import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.internal.storage.file.FileRepository;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.transport.CredentialsProvider;
import org.eclipse.jgit.transport.URIish;
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;

import com.google.common.io.Files;

/*
 * Description: 
 * Author: xzbd
 * Finished: 2024年2月18日
 */
public class JgitTest {

    public static void main(String[] args) {
        String localDir = "D:\\tmp\\git-test\\";

        String gitUrl = "http://192.168.181.1:3000/root/git-test-by-code.git";
        String username = "root";
        String password = "123456";

        try {
            Repository repository = new FileRepository(localDir.concat(".git"));
            Git git = new Git(repository);
            // 添加一个 Add-New-File.txt 文件,并向其中写入 Write By Code 字符串
            File addNewFile = new File((localDir.concat("Add-New-File.txt")));
            Files.write("Write By Code".getBytes(), addNewFile);

            // 新增的文件添加到存储库,类似于 git add .
            git.add().addFilepattern(".").call();

            // 添加提交信息,并提交
            git.commit().setMessage("code by xzbd").call();

            // 添加远程仓库信息
            git.remoteAdd()
                    .setName("origin")
                    .setUri(new URIish(gitUrl))
                    .call();

            // 创建认证信息
            CredentialsProvider credentialsProvider = new UsernamePasswordCredentialsProvider(username,
                    password);

            // 推送到远端 master 分支
            git.push()
                    .setRemote("origin")
                    .setCredentialsProvider(credentialsProvider)
                    .add("master")
                    .call();

            // 关闭 git 命令
            git.close();

        } catch (IOException | GitAPIException | URISyntaxException e) {
            e.printStackTrace();
        }
    }
}

执行验证

运行日志

PS D:\test> & 'D:\apps\Java\jdk-11.0.11\bin\java.exe' '@D:\Users\74511\AppData\Local\Temp\cp_93r4hjv1grgk6g6477y7l8wub.argfile' 'cn.xzbd.util.JgitTest' 
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/D:/Users/74511/.m2/repository/ch/qos/logback/logback-classic/1.2.11/logback-classic-1.2.11.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/workspace/builder_backend/libs/sya.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
17:16:57.070 [main] DEBUG org.eclipse.jgit.util.FS - readpipe [git, --version],d:\apps\Git\cmd
17:16:57.154 [main] DEBUG org.eclipse.jgit.util.FS - readpipe may return 'git version 2.36.1.windows.1'
17:16:57.154 [main] DEBUG org.eclipse.jgit.util.FS - remaining output:

17:16:57.170 [main] DEBUG org.eclipse.jgit.util.FS - readpipe [git, config, --system, --edit],d:\apps\Git\cmd
17:16:57.346 [main] DEBUG org.eclipse.jgit.util.FS - readpipe may return 'D:/apps/Git/etc/gitconfig'
17:16:57.346 [main] DEBUG org.eclipse.jgit.util.FS - remaining output:

17:16:58.160 [main] DEBUG org.eclipse.jgit.transport.PacketLineIn - git< # service=git-receive-pack
17:16:58.161 [main] DEBUG org.eclipse.jgit.transport.PacketLineIn - git< 0000
17:16:58.168 [main] DEBUG org.eclipse.jgit.transport.PacketLineIn - git< 0000000000000000000000000000000000000000 capabilities^{}report-status report-status-v2 delete-refs side-band-64k quiet atomic ofs-delta push-options object-format=sha1 agent=git/2.36.2
17:16:58.174 [main] DEBUG org.eclipse.jgit.transport.PacketLineIn - git< 0000
17:16:58.179 [main] DEBUG org.eclipse.jgit.transport.PacketLineOut - git> 0000000000000000000000000000000000000000 a665c306a1cedd957ebb6bd164904f85ab855071 refs/heads/masterreport-status delete-refs ofs-delta side-band-64k agent=JGit/5.1.3.201810200350-r
17:16:58.181 [main] DEBUG org.eclipse.jgit.transport.PacketLineOut - git> 0000
17:17:00.325 [main] DEBUG org.eclipse.jgit.transport.PacketLineIn - git< unpack ok
17:17:00.325 [main] DEBUG org.eclipse.jgit.transport.PacketLineIn - git< ok refs/heads/master
17:17:00.326 [main] DEBUG org.eclipse.jgit.transport.PacketLineIn - git< 0000
PS D:\test>

web结果查看

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Java+SpringBoot+vue+elementui 实现即时通讯管理系统

目录 系统简介效果图源码结构试用地址源码下载地址技术交流 博主介绍&#xff1a; 计算机科班人&#xff0c;全栈工程师&#xff0c;掌握C、C#、Java、Python、Android等主流编程语言&#xff0c;同时也熟练掌握mysql、oracle、sqlserver等主流数据库&#xff0c;能够为大家提供…

波奇学Linux:动静态库

创建静态库 Makefile文件 mymath.c文件 mymath.h文件 编译main.c文件 gcc 编译时会把在系统目录中寻找头文件和库文件&#xff0c;文件不在系统目录中用参数 -I 头文件所在文件夹/ -L 库的地址文件夹 -l除去lib和后缀。 拷贝文件到系统目录即可不用参数 库的安装类似于把头文件…

npm run serve启动报错npm ERR! Missing script: “serve“

启动项目的时候用npm run serve发现报了以下的错误 解决方法&#xff1a; 1.一般情况下&#xff0c;这个问题是因为package.json文件里面确实没有 这里没有可能因为你的脚手架版本比较低&#xff0c;如果不想换&#xff0c;可以用 这里面有的 npm run dev去启动也是可以的 n…

RTC时钟

目录 一、STM32F407内部RTC硬件框图&#xff0c;主要由五大部分组成&#xff1a; 二、硬件相关引脚 三、具体代码设置步骤 四、了解其它知识点 一、STM32F407内部RTC硬件框图&#xff0c;主要由五大部分组成&#xff1a; ① 时钟源 (1)LSE&#xff1a;一般我们选择 LSE&am…

Electron实战之进程间通信

进程间通信&#xff08;IPC&#xff09;并非仅限于 Electron&#xff0c;而是源自甚至早于 Unix 诞生的概念。尽管“进程间通信”这个术语的确创造于何时并不清楚&#xff0c;但将数据传递给另一个程序或进程的理念可以追溯至 1964 年&#xff0c;当时 Douglas McIlroy 在 Unix…

央视年味大片浓情上映,四位主持人首次因酒“合体”

执笔 | 尼 奥 编辑 | 萧 萧 年&#xff0c;中国人最眷念的味道。年味&#xff0c;独属于中国人的一种文化传承。 14亿中国人&#xff0c;是14亿份不同的中国年味。 五粮浓香 &#xff0c;赞99 让“年味浓起来”&#xff0c;2月1日&#xff0c;央视新闻上线《年味分之一…

【JavaEE】IP协议

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

裁员不可怕,可怕的是软件测试行业在发生巨变,而你却原地踏步

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

【Java】Static关键字与类的实例化

关键字&#xff1a;static 作用&#xff1a;主要用于内存管理 范围&#xff1a;可以用在变量、方法、代码块和嵌套类上。java关键字属于类&#xff0c;但不是类的实例。 类的成员变量包括&#xff1a; 【静态变量/类变量】&#xff1a;指被static修饰的成员变量 运行时&#…

Python实现时间序列分析霍尔特季节性平滑模型(Holt算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 霍尔特季节性平滑模型是指数平滑技术的一种扩展形式&#xff0c;由E. S. Holt和P. R. Winters分别独立…

C语言系列-编译和链接

&#x1f308;个人主页: 会编辑的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” 目录 翻译环境和运行环境 编译环境 预处理&#xff08;预编译&#xff09; 编译 词法分析 语法分析 语义分析 汇编 链接 运行环境 翻译环境和运行环境 在 ANSIC 的任何一种实…

【Qt】图形视图框架 之 坐标

QGraphicsView移动图元/场景以及坐标转换 QGraphicsView图形视图框架使用(一)坐标变换 1.继承 QGraphicsProxyWidget 类 虚函数 mousePressEvent、mouseReleaseEvent 的参数 QGraphicsSceneMouseEvent event->pos() 是item坐标系*下的坐标&#xff0c;不是scene场景坐标系下…

鸿蒙新手入门-环境准备问题解析

Node.js版本与API配套关系 由于SDK的部分工具依赖Node.js运行时&#xff0c;推荐使用配套API版本的Node.js&#xff0c;保证工程的兼容性。 匹配关系见下表&#xff1a; API LevelNode.js支持范围API Level≤914.x&#xff08;≥14.19.1&#xff09;、16.xAPI Level>914.…

宠物赛道都卷出了哪些花样?媒介盒子分享

如今的宠物市场&#xff0c;已经从让宠物吃饱喝足的基本生理需求&#xff0c;拓展到五花八门的精神需求&#xff0c;与“马斯洛需求定理”高度一致。商家们看到宠物经济的潜力&#xff0c;不再满足于给人类造节&#xff0c;给毛孩子造节也是重中之重&#xff0c;今天媒介盒子就…

【Java EE初阶十六】网络原理(一)

在网络原理中主要学习TCP/IP四层模型中的重点网络协议 1. 应用层 1.1 应用程序与协议 应用层是和程序员接触最密切的&#xff1b; 应用程序&#xff1a;在应用层这里&#xff0c;很多时候都是程序员自定义应用层协议&#xff08;步骤&#xff1a;1、根据需求&#xff0c;明确…

Faker遭受DDOS攻击,为什么它一直存在,当遇到ddos攻击怎么办?

二十年前中国红客们就在用的DDOS攻击&#xff0c;直到现在还依然是黑客们最爱的攻击方法&#xff0c;为什么它一直存在&#xff1f; Faker各位小伙伴们自然是相当熟悉了&#xff0c;素有着英雄联盟第一人之称的Faker&#xff0c;其所拥有的荣誉让无数职业选手望其项背&#xf…

如何理解CSS的边框宽度?

CSS 边框宽度学习手记 CSS 边框宽度小概念 在CSS的世界里&#xff0c;border-width这个属性真的很实用&#xff0c;它能帮我指定HTML元素四周边框的宽度。这个宽度嘛&#xff0c;可以用像素px、点pt、厘米cm、相对单位em这些来表示&#xff0c;很方便吧&#xff01;还有呢&am…

Unity3D Shader 素描风格渲染管线实现详解

前言 在游戏开发中&#xff0c;渲染效果是非常重要的一部分&#xff0c;它可以直接影响游戏的视觉效果和玩家的体验。而素描风格的渲染效果是一种非常独特和有趣的风格&#xff0c;可以为游戏增添一种艺术氛围。在Unity3D中&#xff0c;可以通过编写Shader来实现素描风格的渲染…

三坐标测量机|全自主研发,实现高精度三维尺寸测量

三坐标测量机广泛应用在工业生产中&#xff0c;不仅可以提高生产效率&#xff0c;还能保证产品质量的稳定性。 基本原理和作用介绍 三坐标测量机是一种基于三维坐标系的精密测量仪器&#xff0c;可精确测量物体的尺寸、形状和位置。基本原理是利用传感器测量被测物体在三个方…

STM32学习笔记(七) —— DMA传输(MTM)

DMA&#xff0c;全称是Direct Memory Access&#xff08;直接内存访问&#xff09;。可以在存储器和存储器之间或者外设和存储器之间传输数据&#xff0c;而不需要CPU的干预&#xff0c;这样可以节省CPU的资源&#xff0c;提高工作效率。 1.功能框图 STM32F103RCT6有两个DMA控…