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检出代码,切换分支,切换版本。

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

原文地址:https://www.cnblogs.com/wozijisun/p/10396660.html

时间: 2024-08-04 11:23:21

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

Java操作redis简单示例

第一:安装Redis    首先我们要安装Redis,就像我们操作数据库一样,在操作之前肯定要先创建好数据库的环境.    Redis的下载可以百度一下,或者打开下面的下载链接:    https://github.com/MSOpenTech/redis 也可以从我的百度网盘下载,下载链接:    http://pan.baidu.com/s/1pJmaZ71        Redis有Linux版本的也有Windows版本的,我们练习的话一般都是Win版,操作比较简单.下载之后,压缩文件里面

Java操作simple简单消息队列

1.进入官网 进入get start 然后进入Tutorials 发现简单消息队列 2. 原文地址:https://www.cnblogs.com/juncaoit/p/8570703.html

java操作properties文件简单学习

java操作properties文件的工具类简单封装: 注意:由于本地和环境和linux服务的路径有区别,或者jetty,resin,tomcat部署后,文件的路径也是有区别的.比如我们在linux上把项目放在另一个磁盘下,此时,文件的路径就是项目所在的路径,而不是WEB-INF下,所以,这里需要灵活配置! package com.sohu.util; import java.io.BufferedInputStream; import java.io.File; import java.io.

Java操作Redis的简单实例

Java操作Redis是必备学习的内容,那我直接上一个超级简单的案例给大家参考下! 一.创建RedisTest类,代码如下! import redis.clients.jedis.Jedis; public class RedisTest {     public static void main(String[] args) {         // TODO Auto-generated method stub         //连接redis服务         Jedis jedis 

java操作hbase例子

hbase安装方法请参考:hbase-0.94安装方法详解 hbase常用的shell命令请参考:hbase常用的shell命令例子 java操作hbase,在eclipse中创建一个java项目,将hbase安装文件根目录的jar包和lib目录下jar包导入项目,然后就可以编写java代码操作hbase了.下面代码给出来一个简单的示例 /** * @date 2015-07-23 21:28:10 * @author sgl */ package com.songguoliang.hbase;

Jedis学习使用(java操作redis)

Jedis 是 Redis 官方首选的 Java 客户端开发包. 工作过程总结的一个示例,贴出来,如下: Java代码   package com.wujintao.redis; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.junit.

JAVA操作properties文件

java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容是格式是"键=值"的格式,在properties文件中,可以用"#"来作注释,properties文件在Java编程中用到的地方很多,操作很方便.一.properties文件test.properties------------------------------------------------------###########

Java操作XML的JAXB工具

在java中操作XML的工作中中,比较方便的工具是JAXB(Java Architecture for XML Binding). 利用这个工具很方便生成XML的tag和Java类的对应关系.参照网上的资料,简单说明一下java操作xml的一些东西. 1.先定义一个XML Schema文件.比如: [html] view plain copy print? <?xml version="1.0" encoding="UTF-8" standalone=&quo

java操作xml的一个小例子

最近两天公司事比较多,这两天自己主要跟xml打交道,今天更一下用java操作xml的一个小例子. 原来自己操作xml一直用这个包:xstream-1.4.2.jar.然后用注解的方式,很方便,自己只要定义好bean的层次结构就可以了,第三方包会自动生成和解析xml. 但是今天发现,这个包有两个问题: 一个是比较复杂(我是菜鸟,求别喷,我真的觉得他挺复杂的..).比如说你要想处理既有属性又有值的xml就比较麻烦.(@XStreamConverter注解这种方法报这个错:com.thoughtwor