java操作git简单实现
记录瞬间
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简单实现的更多相关文章
- Java操作redis简单示例
第一:安装Redis 首先我们要安装Redis,就像我们操作数据库一样,在操作之前肯定要先创建好数据库的环境. Redis的下载可以百度一下,或者打开下面的下载链接: https:/ ...
- java操作redis之jedis篇
首先来简单介绍一下jedis,其实一句话就可以概括的,就是java操作redis的一种api.我们知道redis提供了基本上所有常用编程语言的clients,大家可以到http://redis.io/ ...
- 关于操作git
手册:http://www.yiibai.com/git/ 一.安装git,可以通过git bash执行命令行:安装tortoiseGit执行git相关操作,在那之前需要了解下git命令行操作 二.在 ...
- 小丁带你走进git世界一-git简单配置
小丁带你走进git世界一-git简单配置 1.github的简单配置 配置提交代码的信息,例如是谁提交的代码之类的. git config –global user.name BattleHeaer ...
- 【MongoDB for Java】Java操作MongoDB
上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过 ...
- JAVA操作MongoDB数据库
1. 首先,下载MongoDB对Java支持的驱动包 驱动包下载地址:https://github.com/mongodb/mongo-java-driver/downloads 2.Java操作Mo ...
- Java 异步处理简单实践
Java 异步处理简单实践 http://www.cnblogs.com/fangfan/p/4047932.html 同步与异步 通常同步意味着一个任务的某个处理过程会对多个线程在用串行化处理,而异 ...
- Java操作Session与Cookie
1,Java操作Session Java操作Session非常简单,步骤如下 1.1,在servlet中通过request获取session HttpSession session = request ...
- 使用webstorm操作git
0. 前言 在上一篇文章中,讲述了使用webstorm去调试node程序,最近研究了一下如何使用webstorm去操作git. 对于git的使用,大家的使用方式均有不同,最王道的方式非命令行莫属,基于 ...
随机推荐
- eclipse下启动tomcat访问网址报404错误
问题: 解决步骤 首先检查一遍自己tomcat的相关配置,如果无误,则继续下面的操作 1.打开server视图,双击tomcat进入编辑页面 选择其中的第二个选项,并且修改Server path中的内 ...
- python 爬虫与数据可视化--爬虫基础知识
一.python中的模块 模块的安装:pip install 模块名 导入模块与函数:import requests . from pymongo import MongoClient json模块的 ...
- 译:Dataiku 白皮书之《在银行和保险行业应用数据科学》
原文链接:Data Science For Banking & Insurance 如果不能正常访问,请点击备份获取. 在银行和保险行业应用数据科学 互联网巨头和金融技术创业时代的求生和发展 ...
- 第四篇flask中模板语言 jinja2
Flask中默认的模板语言是Jinja2 首先我们要在后端定义几个字符串,用于传递到前端 STUDENT = {, 'gender': '中'}, STUDENT_LIST = [ {, 'gende ...
- LOJ.6160.[美团CodeM初赛 RoundA]二分图染色(容斥 组合)
题目链接 \(Description\) 求在\(2n\)个点的完全二分图(两边各有\(n\)个点)上确定两组匹配,使得两个匹配没有交集的方案数. \(n\leq10^7\). \(Solution\ ...
- composer install 时遇到 Composer\Downloader\TransportException ...
安装错误 [Composer\Downloader\TransportException] Invalid credentials for 'https://packagist.phpcomposer ...
- HDU 2008 数值统计
题目链接:HDU 2008 Description 统计给定的n个数中,负数.零和正数的个数. Input 输入数据有多组,每组占一行,每行的第一个数是整数n(n<100),表示需要统计的数值的 ...
- 201771010126王燕《面向对象程序设计(Java)》第三周学习总结
实验三 Java基本程序设计(2) 实验时间 2018-9-13 1.实验目的与要求 (1)进一步掌握Eclipse集成开发环境下java程序开发基本步骤: (2)熟悉PTA平台线上测试环境: (3) ...
- __x__(11)0906第三天__图片标签
图片标签 <img src="images/1.gif" alt="冰河世纪的大松鼠" width="80%" /> Hell ...
- ECMA Script 6_数值的扩展
1. 二进制 和 八进制 新的表示法 前缀 0b(或0B) 表示 二进制 前缀 0o(或 0O )表示 八进制 console.log(0b111110111 === 503); // true co ...