zoukankan      html  css  js  c++  java
  • jgit

    在做一个项目中需要用到远程仓库,本来想使用svn的,但是svn的java api网上的资料很少,而且与git相比,svn显得笨重且不方便,因此放弃了svn转而使用git。java git api - jgit的资料还是比较多的,而且git的操作比svn更容易理解,所以毅然决然的在git的道路上越走越远。

    如果你想在一个 Java 程序中使用 Git ,有一个功能齐全的 Git 库,那就是 JGit 。 JGit 是一个用 Java 写成的功能相对健全的 Git 的实现,它在 Java 社区中被广泛使用。 JGit 项目由 Eclipse 维护,它的主页在 http://www.eclipse.org/jgit 。

    非常好的例子:https://github.com/centic9/jgit-cookbook

    下面是我实现的代码,分别包含了如下的功能:

    1、在本地文件夹建立起与远程仓库的连接

    2、根据主干master新建分支并同步到远程

    3、提交commit文件到远程

    4、从远程拉去代码到本地文件夹

    public class GitUtilClass {
        public static String localRepoPath = "D:/repo";
        public static String localRepoGitConfig = "D:/repo/.git";
        public static String remoteRepoURI = "git@gitlab.com:wilson/test.git";
        public static String localCodeDir = "D:/platplat";
        
        /**
         * 新建一个分支并同步到远程仓库
         * @param branchName
         * @throws IOException
         * @throws GitAPIException
         */
        public static String newBranch(String branchName){
            String newBranchIndex = "refs/heads/"+branchName;
            String gitPathURI = "";
            Git git;
            try {
                
                //检查新建的分支是否已经存在,如果存在则将已存在的分支强制删除并新建一个分支
                List<Ref> refs = git.branchList().call();
                for (Ref ref : refs) {
                    if (ref.getName().equals(newBranchIndex)) {
                        System.out.println("Removing branch before");
                        git.branchDelete().setBranchNames(branchName).setForce(true)
                                .call();
                        break;
                    }
                }            
                //新建分支
                Ref ref = git.branchCreate().setName(branchName).call();
                //推送到远程
                git.push().add(ref).call();
                gitPathURI = remoteRepoURI + " " + "feature/" + branchName;
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (GitAPIException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            return gitPathURI;                
        }
        
        public static void commitFiles() throws IOException, GitAPIException{
            String filePath = "";
            Git git = Git.open( new File(localRepoGitConfig) );
            //创建用户文件的过程
            File myfile = new File(filePath);
            myfile.createNewFile();
            git.add().addFilepattern("pets").call();   
            //提交
            git.commit().setMessage("Added pets").call();   
            //推送到远程
            git.push().call();
        }
        
        public static boolean pullBranchToLocal(String cloneURL){
            boolean resultFlag = false;
            String[] splitURL = cloneURL.split(" ");
            String branchName = splitURL[1];
            String fileDir = localCodeDir+"/"+branchName;
            //检查目标文件夹是否存在
            File file = new File(fileDir);
            if(file.exists()){
                deleteFolder(file);
            }
            Git git;
            try {
                git = Git.open( new File(localRepoGitConfig) );
                git.cloneRepository().setURI(cloneURL).setDirectory(file).call();
                resultFlag = true;
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (GitAPIException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return resultFlag;    
        }
        
        public static void deleteFolder(File file){
            if(file.isFile() || file.list().length==0){
                file.delete();
            }else{
                File[] files = file.listFiles();
                for(int i=0;i<files.length;i++){
                    deleteFolder(files[i]);
                    files[i].delete();
                }
            }
        }
        
        public static void setupRepo() throws GitAPIException{
            //建立与远程仓库的联系,仅需要执行一次
            Git git = Git.cloneRepository().setURI(remoteRepoURI).setDirectory(new File(localRepoPath)).call();
        }
        
    }
  • 相关阅读:
    Linux的ftp和www的服务器在虚拟机上的搭建
    Android中ViewPager
    Vue学习中踩的坑
    MySQL性能优化
    从Java内存模型讲双重检查锁原理
    JAVA8新特性学习
    JAVA中使用openoffice将Excel转PDF再转图片功能实现
    netty自定义协议上传
    poi-tl生成Word
    gitlab搭建
  • 原文地址:https://www.cnblogs.com/songshu120/p/6180747.html
Copyright © 2011-2022 走看看