记录瞬间

import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.ListBranchCommand;
import org.eclipse.jgit.api.errors.*;
import org.eclipse.jgit.lib.BranchTrackingStatus;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List; /**
* Git操作工具类
*/
public class JGitUtil {
private static String MODULE_NAME;
private static String BRANCH_NAME;
private static String GIT_USERNAME;
private static String GIT_PASSWORD;
private static String CHECK_BRANCH;
private static String REVISION;
private static String LOCAL_REPOGIT_CONFIG; final static Logger LOG = LoggerFactory.getLogger(JGitUtil.class); public JGitUtil(GitInfo gitInfo){
String[] gitPath = gitInfo.getGitUrl().split("/");
this.MODULE_NAME = "/" + gitPath[gitPath.length - 3] + "/" + gitPath[gitPath.length - 2]
+ "/" + gitPath[gitPath.length - 1];
this.BRANCH_NAME = gitInfo.getGitUrl();
this.GIT_PASSWORD = gitInfo.getGitPass();
this.GIT_USERNAME = gitInfo.getGitName();
this.CHECK_BRANCH = gitInfo.getGitBranch();
this.REVISION = gitInfo.getNewVersion();
this.LOCAL_REPOGIT_CONFIG = "./" + this.GIT_USERNAME + "/" + this.MODULE_NAME + "/.git";
}
/**
* 拉取远程代码
*
* @return 远程分支名
*/
public static boolean pull() {
return pull(BRANCH_NAME);
} public static boolean pull(String remoteBranchName) { boolean pullFlag = true;
UsernamePasswordCredentialsProvider provider = new UsernamePasswordCredentialsProvider(
GIT_USERNAME, GIT_PASSWORD);
LOG.info(BRANCH_NAME);
String getCodeDir = BRANCH_NAME.split("/git/")[1];
File dir = new File("./" + GIT_USERNAME + "/" + getCodeDir);
if(dir.exists()){
deleteFolder(dir);
} try {
@SuppressWarnings("unused")
Git git = Git.cloneRepository().setURI(remoteBranchName)
.setDirectory(dir).setCredentialsProvider(provider).call();
List<Ref> call = git.branchList().call();
Repository repository = git.getRepository();
for (Ref ref : call) {
List<Integer> counts = getCounts(repository, ref.getName());
System.out.println("For branch: " + ref.getName());
System.out.println("Commits ahead : " + counts.get(0));
System.out.println("Commits behind : " + counts.get(1));
System.out.println();
}
} catch (org.eclipse.jgit.api.errors.TransportException e){
e.printStackTrace();
pullFlag = false;
} catch (Exception e) {
e.printStackTrace();
pullFlag = false;
}
return pullFlag;
} private static List<Integer> getCounts(Repository repository, String branchName) throws IOException {
BranchTrackingStatus trackingStatus = BranchTrackingStatus.of(repository, branchName);
List<Integer> counts = new ArrayList<>();
if (trackingStatus != null) {
counts.add(trackingStatus.getAheadCount());
counts.add(trackingStatus.getBehindCount());
} else {
System.out.println("Returned null, likely no remote tracking of branch " + branchName);
counts.add(0);
counts.add(0);
}
return counts;
} private static void deleteFolder(File file){
try {
if (file.isFile() || file.list().length==0) {
file.delete();
} else {
File[] files = file.listFiles();
for (File getFile: files) {
deleteFolder(getFile);
getFile.delete();
}
}
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 检出代码
* @param branchName
* @return
*/
public static boolean checkoutBranch(String branchName){
boolean checkoutFlag=true; if (branchName.equals("master")) {
return checkoutFlag;
} try ( Git git = Git.open( new File(LOCAL_REPOGIT_CONFIG) );) {
git.checkout().setName("origin/" + branchName).setForce(true).call();
//列出所有的分支名称
List<Ref> ll = git.branchList().setListMode(ListBranchCommand.ListMode.ALL).call();
for (Ref ref : ll){
System.out.println(ref.getName());
}
System.out.println("检出分支代码 success! ->" + branchName);
} catch (Exception e) {
e.printStackTrace();
checkoutFlag = false;
System.out.println("检出分支代码 failed ! ->" + branchName); }
return checkoutFlag;
}
/**
* 检出代码
* @param revision
* @return
*/
public static boolean checkoutRevision(String revision){
boolean checkoutFlag=true;
if (revision == null || revision.length() == 0) {
return checkoutFlag;
}
try ( Git git = Git.open( new File(LOCAL_REPOGIT_CONFIG) );) {
git.checkout().setName( revision ).setForce(true).call();
System.out.println("检出代码版本 success! ->" + revision);
} catch (Exception e) {
e.printStackTrace();
System.out.println("检出代码版本 failed ! ->" + revision);
checkoutFlag = false;
}
return checkoutFlag;
}
}

代码主要记录了,操作git检出代码,切换分支,切换版本。

*简洁可运行版本*

import java.io.File;
import java.util.List; import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.ListBranchCommand;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider; public class GitFromXLY { public static void main(String[] args) {
String baseUrl = "http://git/url";
String module = args[0];
String user = "username";
String pass = "password";
String branch = args[1];
String revision = args[2]; GitFromXLY gfxly = new GitFromXLY(module, user, pass, branch, revision); int getPullCode = gfxly.pull(baseUrl + module);
if (getPullCode == 0) {
System.out.println("检出代码成功===0");
} else if (getPullCode == 1) {
System.exit(1);
} else if (getPullCode == 2) {
System.exit(2);
} else if (getPullCode == 3) {
System.exit(3);
} else if (getPullCode == 4) {
System.exit(4);
} else {
System.out.println("检出代码未知异常===5");
System.exit(5);
}
int getBranchCode = gfxly.checkoutBranch();
if (getBranchCode == 0) {
System.out.println("检出分支成功===0");
} else if (getPullCode == 6) {
System.exit(6);
} else {
System.out.println("检出分支未知异常===7");
System.exit(7);
}
int getRevisionCode = gfxly.checkoutRevision();
if (getRevisionCode == 0) {
System.out.println("检出版本成功===0");
} else if (getPullCode == 8) {
System.exit(8);
} else {
System.out.println("检出版本未知异常===9");
System.exit(9);
}
} private String module;
private String user;
private String pass;
private String branch;
private String revision;
private String git_config; public GitFromXLY(String module, String user, String pass, String branch, String revision){
this.module = module;
this.user = user;
this.pass = pass;
this.branch = branch;
this.revision = revision;
this.git_config = "./basedir/" + module + "/.git";
} /**
* 通过url拉取代码
* @param gitUrl
* @return
*/
public int pull(String gitUrl){
String pullMsg = "";
// 标记拉取代码的标志
int pullFlag = 0;
// 提供用户名和密码的验证
UsernamePasswordCredentialsProvider provider = new UsernamePasswordCredentialsProvider(
this.user, this.pass);
// 指定要加载的代码路径
File dir = new File("./basedir/" + this.module);
// 判断代码路径下是否有内容,如果有就删除
if(dir.exists()){
deleteFolder(dir);
} Git git = null;
try {
git = Git.cloneRepository().setURI(gitUrl)
.setDirectory(dir).setCredentialsProvider(provider).call();
pullMsg = "检出代码成功 success";
} catch (org.eclipse.jgit.api.errors.TransportException e){
e.printStackTrace();
pullMsg = "用户名NAME或密码PASSWORD错误或远程链接URL错误 failed";
pullFlag = 1;
} catch (org.eclipse.jgit.api.errors.JGitInternalException e) {
e.printStackTrace();
pullMsg = "已经存在了项目的下载目录,并且目录正在被操作 failed";
pullFlag = 2;
} catch (GitAPIException e) {
e.printStackTrace();
pullMsg = "调用GitAPI异常,failed";
pullFlag = 3;
} catch (NoClassDefFoundError e) {
e.printStackTrace();
pullMsg = "未找到相应的类文件异常,failed";
pullFlag = 4;
} finally {
System.out.println(pullMsg +"--code--"+ pullFlag);
if (git != null) {
git.close();
}
} return pullFlag;
}
/**
* 检出分支
* @param branchName
* @return
*/
public int checkoutBranch(){
String checkoutMsg = "";
int checkoutFlag = 0; if (this.branch.equals("master")) {
checkoutMsg = "Check out code OK. ->" + this.branch;
System.out.println(checkoutMsg +"--code--"+ checkoutFlag);
return checkoutFlag;
}
Git git = null;
try {
git = Git.open( new File(this.git_config) );
//列出所有的分支名称
List<Ref> branchList = git.branchList().setListMode(ListBranchCommand.ListMode.ALL).call();
for (Ref ref : branchList){
if (this.branch.equals(ref.getName())) {
System.out.println("代码分支列表中存在给定分支");
}
}
git.checkout().setName("origin/" + this.branch).setForce(true).call();
checkoutMsg = "检出分支代码 success! code OK ->" + this.branch;
} catch (Exception e) {
e.printStackTrace();
checkoutMsg = "检出分支代码 failed ! ->" + this.branch;
checkoutFlag = 6;
} finally {
System.out.println(checkoutMsg +"--code--"+ checkoutFlag);
if (git != null) {
git.close();
}
} return checkoutFlag;
}
/**
* 检出代码
* @param revision
* @return
*/
public int checkoutRevision(){
String checkoutMsg = "";
int checkoutFlag = 0;
if (this.revision == null || this.revision.length() == 0) {
checkoutMsg = "Check out code OK. ->" + this.revision;
System.out.println(checkoutMsg +"--code--"+ checkoutFlag);
return checkoutFlag;
}
Git git = null;
try {
git = Git.open( new File(this.git_config) );
git.checkout().setName( this.revision ).setForce(true).call();
checkoutMsg = "检出代码版本 success! code OK. ->" + this.revision;
} catch (Exception e) {
e.printStackTrace();
checkoutMsg = "检出代码版本 failed ! ->" + this.revision;
checkoutFlag = 8;
} finally {
System.out.println(checkoutMsg +"--code--"+ checkoutFlag);
if (git != null) {
git.close();
}
}
return checkoutFlag;
}
/**
* 删除目录
* @param file
*/
private void deleteFolder(File file){
try {
if (file.isFile() || file.list().length==0) {
file.delete();
} else {
File[] files = file.listFiles();
for (File getFile: files) {
deleteFolder(getFile);
getFile.delete();
}
}
} catch (Exception e) {
e.printStackTrace();
}
} }

依赖包如下:

===========================================

java操作git简单实现的更多相关文章

  1. Java操作redis简单示例

    第一:安装Redis    首先我们要安装Redis,就像我们操作数据库一样,在操作之前肯定要先创建好数据库的环境.    Redis的下载可以百度一下,或者打开下面的下载链接:    https:/ ...

  2. java操作redis之jedis篇

    首先来简单介绍一下jedis,其实一句话就可以概括的,就是java操作redis的一种api.我们知道redis提供了基本上所有常用编程语言的clients,大家可以到http://redis.io/ ...

  3. 关于操作git

    手册:http://www.yiibai.com/git/ 一.安装git,可以通过git bash执行命令行:安装tortoiseGit执行git相关操作,在那之前需要了解下git命令行操作 二.在 ...

  4. 小丁带你走进git世界一-git简单配置

    小丁带你走进git世界一-git简单配置 1.github的简单配置 配置提交代码的信息,例如是谁提交的代码之类的. git config  –global user.name BattleHeaer ...

  5. 【MongoDB for Java】Java操作MongoDB

    上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过 ...

  6. JAVA操作MongoDB数据库

    1. 首先,下载MongoDB对Java支持的驱动包 驱动包下载地址:https://github.com/mongodb/mongo-java-driver/downloads 2.Java操作Mo ...

  7. Java 异步处理简单实践

    Java 异步处理简单实践 http://www.cnblogs.com/fangfan/p/4047932.html 同步与异步 通常同步意味着一个任务的某个处理过程会对多个线程在用串行化处理,而异 ...

  8. Java操作Session与Cookie

    1,Java操作Session Java操作Session非常简单,步骤如下 1.1,在servlet中通过request获取session HttpSession session = request ...

  9. 使用webstorm操作git

    0. 前言 在上一篇文章中,讲述了使用webstorm去调试node程序,最近研究了一下如何使用webstorm去操作git. 对于git的使用,大家的使用方式均有不同,最王道的方式非命令行莫属,基于 ...

随机推荐

  1. http动词解释及规范

    GET:GET用于信息获取,而且应该是安全的和幂等的. 安全的意味着该操作用于获取信息而非修改信息,不管进行多少次操作,资源的状态都不会改变. 幂等的意味着对同一URL的多个请求应该返回同样的结果. ...

  2. [转]Web应用防火墙WAF详解

    通过nginx配置文件抵御攻击 0x00 前言 大家好,我们是OpenCDN团队的Twwy.这次我们来讲讲如何通过简单的配置文件来实现nginx防御攻击的效果. 其实很多时候,各种防攻击的思路我们都明 ...

  3. Huginn定时时间不准确或延后问题

    碰巧遇到的:Huginn定时为每天晚上九点执行的任务,却在午后1点执行了, 查了下,午后一点,正好是太平洋时间前一天的晚上9点,一开始没考虑到,午后调试程序,它莫名其妙执行了一次,才发现问题, 那就换 ...

  4. 获取验证码倒计时60s

    倒计时函数: function time(btns) { if (wait == 0) { btns.css("background-color","#F84C02&qu ...

  5. XVII Open Cup named after E.V. Pankratiev. GP of Moscow Workshops

    A. Centroid Tree 枚举至多两个重心作为根,检查对于每个点是否都满足$2size[x]\leq size[father[x]]$即可. #include<stdio.h> # ...

  6. [POJ2559]Largest Rectangle in a Histogram (栈)

    题意 如图所示,在一条水平线上有n个宽为1的矩形,求包含于这些矩形的最大子矩形面积(图中的阴影部分的面积即所求答案). 思路 一个很老的,也是一个很好的题目. 维护一个单调栈即可. 不过在洛谷SP18 ...

  7. 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第6章编程练习2

    #include <iostream> #include <cctype> using namespace std; const int MAXSIZE=10; int mai ...

  8. 字典树-THE XOR largest pair

    题目:给你n个数字A1,A2....An ,问从中选出两个数字异或运算得到的最大结果是多少 0<=Ai<231 用字典树,记录每个数字的31位2进制01串(int 为4个字节,每个字节8个 ...

  9. macos解决Hadoop之Unable to load native-hadoop library

    很显然,native-hadoop library不支持macos,如果是Linux就不会有这个问题.在百度上搜了,要下载在macos上编译的native hadoop library,我在网上下载了 ...

  10. PHP算法学习(5) 位运算

    svn地址:svn://gitee.com/zxadmin/live_z 2019年2月14日11:38:46 <?php /* * 位运算学习笔记 * * 1,php所有的数都是有符号的,无法 ...