当前位置: 首页 > 编程日记 > 正文

java代码操作git_JGit--实现Git命令操作的Java API

问题来源:最近在做一个项目,其中有一块需要用户上传代码到服务器中,然后分析用户所传的代码,传代码最直接的方式就是用户打个包上传,但是后期再分析代码的时候还要代码实现解压上传的代码,操作起来比较复杂。

解决方案

与小伙伴们讨论了下,是不是可以通过代码仓库来解决问题,于是上网找了找,发现Git操作是可以用JGit这个API来实现的,于是就选择了让用户直接给一个Github Repository的链接,不仅能让系统自动下载代码,还省去了解压步骤。

JGit

JGit 提供了一个Git 命令的Java API,例如,你可以在 JGit 里面用

git.commit().setMessage( "My first commit" ).call();

代替

git commit -m "First commit"

JGit 命令都有一个 call() 方法,在命令被建立之后用来实际执行它。这些类的命名是在各自的 Git 命令后加上后缀命令。虽然有些命令提供一个公共构造函数,还是建议使用 Git 的工厂类来创建命令。

JGit示例

Java实现git clone操作,参考代码如下:

import java.io.File;

import org.eclipse.jgit.api.CloneCommand;

import org.eclipse.jgit.api.Git;

public class JGitUtil {

public static String cloneRepository(String url,String localPath)

{

try{

System.out.println("开始下载......");

CloneCommand cc = Git.cloneRepository().setURI(url);

cc.setDirectory(new File(localPath)).call();

System.out.println("下载完成......");

return "success";

}catch(Exception e)

{

e.printStackTrace();

return "error";

}

}

public static void main(String[] args)

{

String localPath = "/Users/XXX/Desktop/GitTest";

String url = "https://github.com/XXX/python3-webapp.git";

cloneRepository(url,localPath);

}

}

注意点:在使用JGit这个JAR包时,是依赖其他JAR包的;列举如下:

slf4j-api-1.7.9.jar

slf4j-log4j12-1.7.9.jar

log4j-1.2.17.jar

jsch-0.1.54.jar

除了git clone之外,还有很多其他操作,创建一个存储库,从远程获取内容,向历史版本中添加和删除文件,检查历史操作,并最终将更改的文件推回到原始存储库都可以用JGit实现。大家可以参考官网的API或者JGit资源介绍。

相关文章:

Python学习(一) 安装,环境搭建,IDE

第一篇废话太多了,我的博客最主要的是给自己看的,大家觉得还凑合也可以看看,能说自己想法的就更好了,因为一个人的思想是有局限性的。集思广益,自己的认知才不会被禁锢。 注:其他的系统没装,在W…

桑叶黑芝麻糊,从头到脚通补

人体通补手册:丹道医学中的养命之术/武国忠著. —南京:江苏人民出版社,2009.8(国医健康绝学系列)ISBN 978-7-214-05938-3 桑叶黑芝麻糊,从头到脚通补 桑叶味甘、苦,性寒,可以入肝、肺经&#xf…

CSS jQuery制作漂亮的文字模糊效果

CSS3漂亮的模糊效果 运用CSS3 和 jQuery 以及其他javascript框架,将 CSS模糊效果发挥到极致. 本文底部可提供下载以及预览,并且包含了所有需要的文件包。 1. 烟雾模糊效果: 2.彩色灯晕效果 3. 鼠标悬浮模糊效果 4, 模糊效果 5,随机…

java 三维全景_3D开发-全景技术基础

全景,英文名(Panorama),又被称为3D实景,是一种新兴的富媒体技术,其与视频,声音,图片等传统的流媒体最大的区别是“可操作,可交互”。 全景分为虚拟现实和3D实景两种。虚拟现实是利用maya等软件&…

HAProxy基础

HAProxy HAProxy是法国开发者Willy Tarreau 开发的一个开源然教案,是一款具备高并发、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计。 HAProxy功能 HAProxy是TCP/HTTP反向代理服…

不试过你怎么知道?开博第一篇(本人菜鸟也,高手可以飘过)

我是菜鸟,一直都是,只不过以前比现在更菜而已。 注册博客园居然有5个月了。昨晚看过一位迷茫中的仁兄30岁了不知道干什么。。我跟他差不多。 既然他可以申请开博,为什么我就不试试看呢? 试试看又不会损失什么?被拒绝又…

java 类隔离_微服务架构中zuul的两种隔离机制实验

ZuulException REJECTED_SEMAPHORE_EXECUTION 是一个最近在性能测试中经常遇到的异常。查询资料发现是因为zuul默认每个路由直接用信号量做隔离,并且默认值是100,也就是当一个路由请求的信号量高于100那么就拒绝服务了,返回500。信号量隔离既…

技术网站/博客网址收藏

1、W3CHtmlDom标准 http://www.w3school.com.cn/htmldom/dom_obj_window.asp2、JavaScirpt参考教程:http://www.iselong.com/online/ebooks/javascript/3、CSS手册http://www.w3school.com.cn/css/css_positioning_floating.asp4、Lucene查询语句http://tech.ddvip.…

TableStore: 海量结构化数据分层存储方案

2019独角兽企业重金招聘Python工程师标准>>> 前言 表格存储是阿里云自研分布式存储系统,可以用来存储海量结构化、半结构化的数据。表格存储支持高性能和容量型两种实例类型。高性能使用SSD的存储介质,针对读多写多的场景都有较好的访问延时。…

计算 webView 显示内容后实际高度

两种方法,方法1可以得到内容的实际高度,方法2得到了将内容显示完整后的 webView 的尺寸(包含 UIEdgeInsets) - (void)webViewDidFinishLoad:(UIWebView *)wb{//方法1CGFloat documentWidth [[wb stringByEvaluatingJavaScriptFro…

另一个.java文件调用_java - 如何调用另一个类“写文件”的方法? - SO中文参考 - www.soinside.com...

在我的Android应用程序,我想有一类处理所有“写入/读取到文本文件”的行动。所以,我根本就调用我的readUserFile.java文件我想的方法。但我的方法将不会在该文件中工作?创建一个文件在我的MainActivity工作正常,但不会在我的readU…

编译器实现(五)

1.自底向上的分析 最普通的自底向上算法称作LR(1)分析( LR(1)parsing) ( L表示由左向右处理输入,R表示生成了最右推导,而数字1则表示使用了先行的一个符号)。 1.1自底向上分析概览 自底向上的分析程序使用了显式栈来完成分析,这与非递归的自顶…

Python字符串的修改以及传参

前两天去面试web developer,面试官提出一个问题,用JavaScript或者Python实现字符串反转,我选择了Python,然后写出了代码(错误的): 1 #!/usr/bin/env python2 #-*-coding:utf-8-*-3 __author__ …

充血模式和贫血模式

贫血模型:是指领域对象里只有get和set方法,或者包含少量的CRUD方法,所有的业务逻辑都不包含在内而是放在Business Logic层。 优点是系统的层次结构清楚,各层之间单向依赖,Client->(Business Facade)->Busin…

java 方法里面定义接口_java – 当接口A在其方法签名中定义接口B时

…如何限制A的实现在方法签名中使用B的某个实现?用例这是一个Unit接口和两个实现它的枚举:public interface Unit { ... }public enum ForceUnit implements Unit { ... }public enum MassUnit implements Unit { ... }属性界面使用哪个:publ…

ANDROID_MARS学习笔记_S01_011ProgressBar

文档是这样来设置样式 <ProgressBarandroid:layout_width"wrap_content"android:layout_height"wrap_content"style"android:style/Widget.ProgressBar.Small"android:layout_marginRight"5dp" /> 1.xml <RelativeLayout xml…

怎样使phpnow1.5.6-1支持firebird

&#xff08;以下部分步骤可能不是必要&#xff0c;自己测试。&#xff09; 环境&#xff1a;windows&#xff0c;phpnow1.5.6-1 默认支持mysql&#xff0c;修改配置文件&#xff0c;使之支持firebird。 php.ini 的位置 &#xff1a; php-5.2.14-Win32\php-apache2handler.ini …

php 引入其他文件中的变量

在php的开发过程中&#xff0c;如果所有的代码都写在同一个文件中的话&#xff0c;那么文件中的代码数量是否太多了,一来不便维护&#xff0c;二来对于编辑器也是个负担include("class0.php");在php文件的首部引入即可;转载于:https://www.cnblogs.com/wrhbk/p/10985…

java struts技术_java技术框架之:struts

一&#xff1a;struts的优缺点优点&#xff1a;1、开源&#xff1a;2、利用Struts提供的taglib可以大大节约开发时间。3、维护扩展比较方便。通过一个配置文件&#xff0c;即可把握整个系统各部分之间的联系&#xff0c;这对于后期的维护有着莫大的好处。4、表现与逻辑分离5、表…

BZOJ 2780: [Spoj]8093 Sevenk Love Oimaster( 后缀数组 + 二分 + RMQ + 树状数组 )

全部串起来做SA, 在按字典序排序的后缀中, 包含每个询问串必定是1段连续的区间, 对每个询问串s二分RMQ求出包含s的区间. 然后就是求区间的不同的数的个数(经典问题), sort queries BIT 就行了.时间复杂度O(N log N). 速度垫底了QAQ 你们都会SAM。。。。----------------------…

centos7下Gitlab+Jenkins部署持续集成CI环境

1.基本环境 主机&#xff1a;win10&#xff0c;IP&#xff1a;192.168.0.111&#xff1b;部署机器centos7&#xff0c;IP&#xff1a;192.168.0.65&#xff1b;内存推荐到8G&#xff0c;实测需要6G以上&#xff0c;以免出现内存不够用而报错。 2.安装gitlab需要的组件 [rootloc…

VIM7.3添加中文帮助文档

安装中文帮助文档之前首先执行下列操作&#xff1a;在home目录下列新建文件夹 &#xff1a;.vim ------------------>.vim是一个隐藏文件&#xff0c;不要漏了 “.”.vim/plugin ---------->.vim目录下的plugin文件夹.vim/doc ------------->.vim目录下的doc文件夹.v…

安卓java代码标签_Android实现动态添加标签及其点击事件

在做Android开发的时候&#xff0c;会遇到动态添加标签让用户选择的功能&#xff0c;所以自己写了个例子&#xff0c;运行效果图如下。标签可以左右滑动进行选择&#xff0c;点击的时候&#xff0c;会弹出toast提示选择或者取消选择了哪个标签。通过动态添加TextView作为标签&a…

Windows 7 SDK Fails to Install with Return Code 5100 (GRMSDK_EN_DVD.iso)

来源&#xff1a;http://support.microsoft.com/kb/2717426/de 不对全文做翻译了&#xff0c;总结一下&#xff1a; 原因&#xff1a;电脑上已经安装了新版本的Visual C 2010 Redistributable运行库 解决办法&#xff1a;卸载Visual C 2010 Redistributable&#xff0c;然后再安…

Android动画效果translate、scale、alpha、rotate详解

动画类型Android的animation由四种类型组成XML中 alpha渐变透明度动画效果scale渐变尺寸伸缩动画效果translate画面转换位置移动动画效果rotate画面转移旋转动画效果JavaCode中 AlphaAnimation渐变透明度动画效果ScaleAnimation渐变尺寸伸缩动画效果TranslateAnimation画面转换…

对javscript中Object.defineProperty的理解

自己在使用vue的过程中经常会用到听到数据双向绑定这个词&#xff0c;而且我们还可以直接通过调用this.msg(this表示vue实例),来获取data上的数据&#xff0c;以前一直不太明白为什么可以这样获取&#xff0c;直到有一天我在论坛里看到了寻找海蓝96这位大佬写的文章,才明白其原…

java kafka 集群消费_kafka集群搭建和使用Java写kafka生产者消费者

转自&#xff1a;http://chengjianxiaoxue.iteye.com/blog/21904881 kafka集群搭建1.zookeeper集群 搭建在110&#xff0c; 111,1122.kafka使用3个节点110&#xff0c; 111,112修改配置文件config/server.propertiesbroker.id110host.name192.168.1.110log.dirs/usr/local/kafk…

Java之替换“\n”符号

开发平台&#xff1a;Android 4.1.2 在去除字符串中的换行符(\n)的时候&#xff0c;写成str.replace("\\n", "")才能正确执行。str.replace("\n","") &#xff0c;str.replaceAll("\\n","")&#xff0c;str.repla…

ThinkPHP项目笔记之登录,注册,安全退出篇

1.先说注册 a.准备好注册页面&#xff0c;register.html,当然一般有&#xff0c;姓名&#xff0c;邮箱&#xff0c;地址等常用的。 b."不要相信用户提交的一切数据",安全&#xff0c;安全是第一位的。所以要做判断&#xff0c;客户端要做基本判断&#xff0c;为了防止…

c语言第八次作业

1.选择法排序。输入一个正整数n(1<n<10)&#xff0c;再输入n个整数&#xff0c;将他们从大到小排序后输出。试写出相应程序。 #include<stdio.h>int main (void){int i,index,k,n,t;int a[10];printf("输入数据的个数n:");scanf("%d",&n);…