在做一个项目中需要用到远程仓库,本来想使用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();}}

转载于:https://www.cnblogs.com/songshu120/p/6180747.html

jgit - java实现git操作相关推荐

  1. java索引ref_java – 如何使用jgit库将git HEAD指向特定的ref?

    我想以编程方式更新HEAD而不对非裸仓库执行checkout或rebase. 我希望工作树和索引在操作后保持不变. 编辑 我需要更新HEAD的符号目标,而不是HEAD当前目标的提交ID.这更像是一个结 ...

  2. Jgit基础教程(Java调用git)

    前言 最近公司需要做一个java调用git的工具,这里简单的介绍了一下基本操作方法以及一些衍生的信息获取,或有不对的地方请大家批评指正.转载请注明出处. 一.Jgit依赖导入 <dependen ...

  3. git操作手册_基本的Git手册

    git操作手册 介绍 (Introduction) Hi! I am Sanjula, and in this guide I hope to teach you a little bit about ...

  4. Git操作常用的命令都在这里了

    转载自 Git操作常用的命令都在这里了 创建仓库 git init 在当前目录执行,会生成 .git目录文件,这个和SVN一致. 提交到仓库 git commit -m "first com ...

  5. git 修改commit_结合IDEA与命令行,解决常用git操作与特殊情况的最佳实践

    本文适合总觉得git操作不够顺滑,被各种分支问题搞得焦头烂额的Java业务开发同学. 如果是git的初学者,建议搜索下git其他入门教程,这方面资料很多,非常推荐git init一个新项目,然后本地操 ...

  6. github上创建java项目简单操作

    github上创建java项目简单操作 参考L: github上创建java项目简单操作 - CSDN博客 http://blog.csdn.net/qq_29392425/article/detai ...

  7. 【笔记】【git】【狂神说Java】Git最新教程通俗易懂 -学习笔记

    前言 学习视频:[狂神说Java]Git最新教程通俗易懂 感谢狂神!!! 此笔记用于记录本人在学习中还有不懂以及值得注意的地方.以方便日后的工作与学习. 笔记中有些个人理解后整理的笔记,可能有所偏差, ...

  8. Java 使用itextPdf7操作pdf,写入照片这一篇就够了

    Java 使用itextPdf7操作pdf,写入照片这一篇就够了 1. 效果图 1.1 M*N列图片(无边界&有边界) 1.2 图片重叠 1.3 文字背景图片 1.4 图片与文字相邻 & ...

  9. 手把手教你熟悉Git操作

    文章目录 Git 一.版本控制 二.Windows安装Git 1. Git 安装 2. Git 一次性配置 三.理解Git文件的三种状态与工作模式 四.创建版本库并提交文件 1. 初始化git 2. ...

  10. GitHub防黑客新措施:弃用账密验证Git操作,改用token或SSH密钥,今晚0点执行

    萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 还在用账户+密码对GitHub上的Git操作进行身份验证? 赶紧整个token(令牌)或SSH密钥吧! 8月14号0点(8月13日9:00 ...

最新文章

  1. 2022-2028年中国导热硅胶行业市场研究及前瞻分析报告
  2. 判断手机是否弹出键盘,改变了手机页面高度,对应inputStatus的状态改变相关控件的大小和位置
  3. add函数 pytorch_pytorch常用函数
  4. 快速径向对称 只检测暗对称 代码(2)
  5. 8、Java Swing JCheckBox:复选框组件
  6. 算法设计与分析-实验3
  7. Replication的犄角旮旯(一)--变更订阅端表名的应用场景
  8. 端口聚合Port-Channel
  9. 基于ENVI/IDL实现国产卫星影像批处理功能
  10. Hershell:跨平台反向Shell生成器
  11. 计算机端口里没有usb,电脑联接USB打印机 没有USB虚拟端口
  12. 同一个项目中让R和Python无缝工作的五种方法
  13. 【SpringCloud】-- SpringCloud简介
  14. iOS远程推送--APNs详解
  15. websocket 1006错误码
  16. App自动化手机操作
  17. Android开发学习——记单词APP安卓注册登录跳转
  18. MySQL 零散知识整理~字符编码设置
  19. 泛娱乐 | 2020人才市场洞察及薪酬指南
  20. 实现斐波拉契的三种方法

热门文章

  1. USB的速度还是不够快
  2. 现代企业制度,无助于解决企业亏损倒闭问题
  3. http status 400 – bad request 亚马逊_蛮拼的!这个亚马逊卖家为Prime Day做了这三大准备,销量暴涨58倍...
  4. php网站源码怎么在本地电脑调式,Windows 平台下配置ZendStudio调式PHP
  5. 单机rust怎么设置白天_安卓单机游戏评测:侠盗猎车手3十周年版本
  6. 清楚理解const_cast类型转换
  7. pycharm2017自建注册服务器
  8. vSphere与Workstation虚拟机交互的几种方法(四)
  9. PHP 多维数组转换一维数组
  10. 仿iOS Segmented Control样式