`

使用JGit获取指定分支的文件内容

    博客分类:
  • git
阅读更多
/**
     * 获取指定分支、指定文件的内容
     * @param gitRoot git仓库目录
     * @param branchName 分支名称
     * @param fileName 文件名称
     * @return
     * @throws Exception
     */
    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<Boolean> task = new FutureTask<Boolean>(new Callable<Boolean>() {
            @Override
            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;
    }

 

1
2
分享到:
评论

相关推荐

    GItTest_rocket5vc_torntme_使用Java操作GIT仓库_

    当合并分支时可能会出现冲突,JGit提供API解析冲突文件,手动解决后,使用`CheckoutCommand`选择正确的版本并完成合并。 9. **标签管理**: 可以使用`TagCommand`来创建、删除和列出Git标签,方便标记特定的提交...

    git中文教程 progit_v2.1.31.pdf

    - **添加文件**:使用`git add`命令将文件加入暂存区。 - **提交更改**:使用`git commit`命令将更改永久保存至本地仓库。 - **查看提交历史**:使用`git log`命令查看所有的提交记录。 - **撤消操作**:当提交错误...

    git-gouljam-search

    我们可以使用JGit来读取Git仓库,获取文件内容,以及处理提交和分支信息。 2. **Lucene**:Apache Lucene是一个高性能、全功能的文本搜索引擎库,常用于实现全文搜索。在这里,我们需要利用Lucene来建立索引,并...

    github-upload

    2. 文件/代码上传:程序能够选择本地文件或目录,将其内容上传至指定的GitHub仓库。 3. 创建新仓库:如果需要,程序可能还支持创建新的GitHub仓库。 4. 仓库管理:可能包括切换分支、提交更改、拉取最新代码等版本...

    git-plugin:Jenkins Git插件

    - **分支索引**:设置要构建的分支或标签,可以使用通配符或指定特定分支。 - **额外行为**:这里可以配置分支策略、拉取策略、清洁选项等。 4. **使用场景** - **持续集成**:每次提交都会触发Jenkins进行构建...

    config-repo:一个支持spring-config测试的仓库

    Spring Config允许开发者将应用的配置文件(如application.properties或application.yml)存储在一个中央仓库中,可以是Git、Subversion或JGit等。这样,当配置发生变更时,无需重新构建和部署应用,只需更新仓库中...

Global site tag (gtag.js) - Google Analytics