记录瞬间

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. POJ 1985 Cow Marathon (模板题)(树的直径)

    <题目链接> 题目大意: 给定一颗树,求出树的直径. 解题分析:树的直径模板题,以下程序分别用树形DP和两次BFS来求解. 树形DP: #include <cstdio> #i ...

  2. C#-导入Excel 内容到 DataTable中

    C#-导入Excel 内容到 DataTable中 直接传入文件路径,支持所有Excel格式. 缺点:如果数据量庞大会很占内存. public static DataTable ImportExcel ...

  3. Beta(4/7)

    鐵鍋燉腯鱻 项目:小鱼记账 团队成员 项目燃尽图 冲刺情况描述 站立式会议照片 各成员情况 团队成员 学号 姓名 git地址 博客地址 031602240 许郁杨 (组长) https://githu ...

  4. hibernate 报query result offset is not supported

    在配置hibernate.cfg.xml时需指定使用数据库的方言: 例: <property name="dialect">org.hibernate.dialect. ...

  5. [LeetCode] Swap Adjacent in LR String 交换LR字符串中的相邻项

    In a string composed of 'L', 'R', and 'X' characters, like "RXXLRXRXL", a move consists of ...

  6. ES6 promise学习

    Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大. 1.promise是一构造函数,既然是构造函数,那么我们就可以用 new Promise()得到一个p ...

  7. Snackbar 提醒

    类似于Toast,属于design包,不要忘记导入design package com.xiaozhuyisheng.jinjiedemos.activity; import android.supp ...

  8. mysql 查询 两个表中不同字段的 和,并通过两个表的时间来分组

    ( SELECT sum( a.cost_sum ) AS sum_cost, sum( a.phone_sum ) AS sum_phone, sum( a.arrive_sum ) AS sum_ ...

  9. YARN的基础配置

    基于HADOOP3.0+Centos7.0的yarn基础配置: 执行步骤:(1)配置集群yarn (2)启动.测试集群(3)在yarn上执行wordcount案例 一.配置yarn集群 1.配置yar ...

  10. python语法_集合

    集合:不同的元素(不可hash)组合在一起的就叫做集合,去掉重复的,以空字符返回,无序的 可以分为可变集合和不可变集合(frozenset) 创建: s = set('gm gyx') print(s ...