JGit:使用TreeWalk获取文件内容

时间:2016-09-26 07:09:00

标签: java git jgit

我想获取文件内容。输入是修订版。 如何获取工作目录或阶段区域中的文件内容 例如,如果我的文件'Test'的值为'1' 如果我确实改为'2'并暂存文件 现在我对同一个文件做了另一个更改为'3' 现在我有两个文件一个阶段,一个不是。我如何获取文件的内容。

在我发现的代码中,我只能获取提交ID或HEAD

的信息
try (RevWalk revWalk = new RevWalk(getRepository())) {
    RevCommit revCommit = revWalk.parseCommit(revision);
    RevTree tree = revCommit.getTree();

    try (TreeWalk treeWalk = new TreeWalk(getRepository())) {
        treeWalk.addTree(tree);
        treeWalk.setRecursive(true);
        treeWalk.setFilter(PathFilter.create(request.getFile()));
        if (!treeWalk.next()) { 
          //error
        }
        ObjectId objectId = treeWalk.getObjectId(0);
        ObjectLoader loader = repository.open(objectId);
        content = new String(loader.getBytes());
    }
}

1 个答案:

答案 0 :(得分:2)

为了遍历暂存区域的条目,您需要获取存储库DirCache。此类表示暂存区域。

例如:

DirCache index = repository.lockDirCache();
try {
  // create treeWwalk
  treeWalk.addTree( new DirCacheIterator( index ) )
  // iterate over treeWalk
} finally {
  index.unlock();
}

获得锁定的目录缓存后,可以将其添加到树步行中。一旦不再需要,就不要忘记解锁目录缓存。

与代码段中的方法相同,您可以使用treeWalk.getObjectId( 0 )返回当前条目的blob id。