利用Java操作Git获取分支的内容

/**
public static String getContentWithFile(String gitRoot, final String branchName, String fileName) throws Exception {
        final Git git = Git.open(new File(gitRoot));
        Repository repository = git.getRepository();
   
        repository = git.getRepository();
        RevWalk walk = new RevWalk(repository);
        Ref ref = repository.getRef(branchName);
        if (ref == null) {
            //获取远程分支
            ref = repository.getRef(REF_REMOTES + branchName);
        }
        //异步pull
        ExecutorService executor = Executors.newCachedThreadPool();
        FutureTask task = new FutureTask(new Callable() { 
               public Boolean call() throws Exception {  
                  /*//创建分支 
                   CreateBranchCommand createBranchCmd = git.branchCreate();               
                   createBranchCmd.setStartPoint(REF_REMOTES + branchName).setName(branchName).call();*/   
                 return git.pull().call().isSuccessful();   
             }
        });    
        executor.execute(task); 
        ObjectId objId = ref.getObjectId(); 
        RevCommit revCommit = walk.parseCommit(objId);     
        RevTree revTree = revCommit.getTree();         
        TreeWalk treeWalk = TreeWalk.forPath(repository, fileName, revTree);     
     //文件名错误      
      if (treeWalk == null)  return null;     
        ObjectId blobId = treeWalk.getObjectId(0);   
        ObjectLoader loader = repository.open(blobId);    
        byte[] bytes = loader.getBytes();       
      if (bytes != null)  return new String(bytes);   
     return null;    
    }


转自网络

2019-03-10 16:22

知识点

  • Git
  • 相关教程

    更多

    Git分支管理

    Git分支管理                     分类: GitHub          2014-10-11 21:42         334人阅读         评论(0)         收藏         举报                  Git         branch         分支管理                   首先,我们创建dev分支,然后切换

    Bug分支-git入门教程

    软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。 当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue -101来修复它,但是,等等,当前正在dev上进行的工作还没有提交: $ git status# On branch dev# Ch

    分支管理-git入门教程

    分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN。 如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了Git又学会了SVN! 分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不

    Feature分支-git入门教程

    软件开发中,总有无穷无尽的新的功能要不断添加进来。 添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。 现在,你终于接到了一个新任务:开发代号为Vulcan的新功能,该功能计划用于下一代星际飞船。 于是准备开发: $ git checkout -b feature-

    创建与合并分支-git入门教程

    在版本回退里,你已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。 一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当

    分支管理策略-git入门教程

    通常,合并分支时,如果可能,Git会用“Fast forward”模式,但这种模式下,删除分支后,会丢掉分支信息。 如果要强制禁用“Fast forward”模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。 下面我们实战一下--no-ff方式的merge: 首先,仍然创建并切换dev分支: $ git checkout -b devSwitched t

    Java分支结构 – if…else/switch

    Java分支结构 - if...else/switch    顺序结构只能顺序执行,不能进行判断和选择,因此需要分支结构。 Java有两种分支结构:      if语句  switch语句      if语句    一个if语句包含一个布尔表达式

    如何获取iframe刷新后的内容

    我在做一个基于iframe的文件上传,然后服务器写回一个JSON数据输出到隐藏的iframe里面,那么如何获取iframe里的内容呢?  PS:我发现文件上传后,iframe有返回的JSON数据,但是无法在父页面获取(一直是空的)。  问题补充:  我用的jQuery,用  $("#iframe_id").contents().find("*:first")

    怎么获取本站源码-安装git

    本站使用的是git管理代码,获取源码的步骤如下: 安装git客户端: 客户端软件(Git-1.8.3-preview20130601.zip)可以到本站的百度云盘下载:http://pan.baidu.com/s/1o6EwjvO 如果你对乌龟客户端TortoiseGit-1.8.6.0-32bit.zip,同样可以下载:http://pan.baidu.com/s/1sjGrUHn  安装很简单

    操作标签-git入门教程

    如果标签打错了,也可以删除: $ git tag -d v0.1Deleted tag 'v0.1' (was e078af9) 因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。 如果要推送某个标签到远程,使用命令git push origin tagname: $ git push origin v1.0Total 0 (delta 0), reused 0

    利用SolrJ操作solr API完成index操作

    使用SolrJ操作Solr会比利用httpClient来操作Solr要简单。SolrJ是封装了httpClient方法,来操作solr的API的。SolrJ底层还是通过使用httpClient中的方法来完成Solr的操作。 1、 首先,你需要添加如下jar包   其中apache-solr-solrj-3.4.0.jar、slf4j-api-1.6.1.jar可以在下载的apache-solr-3

    JAVA的solr操作实现(基本操作)

    JAVA操作solr的实现其实很简单,但是很多细节要注意,在实际的开发中,很多人喜欢自己封装这些基础的方法以一个全新的“面貌”出现,其实都是一回事,操作熟了自然就会想到将一些实现功能用到的方法重新封装,这也是编程进阶的表现。 SolrJ的使用 SolrJ覆盖了solr的全部功能,下面将自己在实际开发中所使用的程序粘贴出来并适当加以解释,由于本人比较菜,代码书写不是那么的精练,还请见谅。 1、创建s

    github(git.oschina.net)中的 README.md内容换行

    不管是github,还是oschina的README.md文件,如果你输入内容直接回车,push到远程仓库后,在页面你会发现显示后是不会换行的,看起来特别恶心。 解决方法之一: 在每一行的末尾加上br换行标签 解决方法之二: 在要换行的末尾,输入空格两个以上 回车! 就这么简单,git真是个好东西

    java 获取logback日志文件路径

    在程序运行期间,读取logback日志文件内容进行特定业务操作,例如分析访问记录。通过LoggerFactory获取Logger上下文LoggerContext,再通过LoggerContext获取到Logger、Appender

    最新教程

    更多

    java线程状态详解(6种)

    java线程类为:java.lang.Thread,其实现java.lang.Runnable接口。 线程在运行过程中有6种状态,分别如下: NEW:初始状态,线程被构建,但是还没有调用start()方法 RUNNABLE:运行状态,Java线程将操作系统中的就绪和运行两种状态统称为“运行状态” BLOCK:阻塞状态,表示线程阻塞

    redis从库只读设置-redis集群管理

    默认情况下redis数据库充当slave角色时是只读的不能进行写操作,如果写入,会提示以下错误:READONLY You can't write against a read only slave.  127.0.0.1:6382> set k3 111  (error) READONLY You can't write against a read only slave. 如果你要开启从库

    Netty环境配置

    netty是一个java事件驱动的网络通信框架,也就是一个jar包,只要在项目里引用即可。

    Netty基于流的传输处理

    ​在TCP/IP的基于流的传输中,接收的数据被存储到套接字接收缓冲器中。不幸的是,基于流的传输的缓冲器不是分组的队列,而是字节的队列。 这意味着,即使将两个消息作为两个独立的数据包发送,操作系统也不会将它们视为两个消息,而只是一组字节(有点悲剧)。 因此,不能保证读的是您在远程定入的行数据

    Netty入门实例-使用POJO代替ByteBuf

    使用TIME协议的客户端和服务器示例,让它们使用POJO来代替原来的ByteBuf。

    Netty入门实例-时间服务器

    Netty中服务器和客户端之间最大的和唯一的区别是使用了不同的Bootstrap和Channel实现

    Netty入门实例-编写服务器端程序

    channelRead()处理程序方法实现如下

    Netty开发环境配置

    最新版本的Netty 4.x和JDK 1.6及更高版本

    电商平台数据库设计

    电商平台数据库表设计:商品分类表、商品信息表、品牌表、商品属性表、商品属性扩展表、规格表、规格扩展表

    HttpClient 上传文件

    我们使用MultipartEntityBuilder创建一个HttpEntity。 当创建构建器时,添加一个二进制体 - 包含将要上传的文件以及一个文本正文。 接下来,使用RequestBuilder创建一个HTTP请求,并分配先前创建的HttpEntity。

    MongoDB常用命令

    查看当前使用的数据库    > db    test  切换数据库   > use foobar    switched to db foobar  插入文档    > post={"title":"领悟书生","content":"这是一个分享教程的网站","date":new

    快速了解MongoDB【基本概念与体系结构】

    什么是MongoDB MongoDB is a general purpose, document-based, distributed database built for modern application developers and for the cloud era. MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

    windows系统安装MongoDB

    安装 下载MongoDB的安装包:mongodb-win32-x86_64-2008plus-ssl-3.2.10-signed.msi,按照提示步骤安装即可。 安装完成后,软件会安装在C:\Program Files\MongoDB 目录中 我们要启动的服务程序就是C:\Program Files\MongoDB\Server\3.2\bin目录下的mongod.exe,为了方便我们每次启动,我

    Spring boot整合MyBatis-Plus 之二:增删改查

    基于上一篇springboot整合MyBatis-Plus之后,实现简单的增删改查 创建实体类 添加表注解TableName和主键注解TableId import com.baomidou.mybatisplus.annotations.TableId;
    import com.baomidou.mybatisplus.annotations.TableName;
    import com.baom

    分布式ID生成器【snowflake雪花算法】

    基于snowflake雪花算法分布式ID生成器 snowflake雪花算法分布式ID生成器几大特点: 41bit的时间戳可以支持该算法使用到2082年 10bit的工作机器id可以支持1024台机器 序列号支持1毫秒产生4096个自增序列id 整体上按照时间自增排序 整个分布式系统内不会产生ID碰撞 每秒能够产生26万ID左右 Twitter的 Snowflake分布式ID生成器的JAVA实现方案