Java JGit:使用TreeWalk获取文件内容

Java JGit:使用TreeWalk获取文件内容,java,git,jgit,Java,Git,Jgit,我想获取文件的内容。输入是修订。 如何获取工作目录或后台区域中的文件内容 例如,如果我有值为“1”的文件“Test” 如果我确实更改为“2”并转移文件 现在我对同一个文件做了另一个更改,改为“3” 现在我有两个文件一个是阶段,一个不是阶段。如何获取文件的内容 在我找到的代码中,我只能获得提交ID或头的信息 try (RevWalk revWalk = new RevWalk(getRepository())) { RevCommit revCommit = revWalk.parseCo

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

在我找到的代码中,我只能获得提交ID或头的信息

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());
    }
}

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

例如:

DirCache index=repository.lockDirCache();
试一试{
//创建treeWwalk
addTree(新的DirCacheIterator(索引))
//在树路上迭代
}最后{
index.unlock();
}
获得锁定的目录缓存后,可以将其添加到树漫游中。不要忘记在不再需要dir缓存时立即解锁它


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

您的意思是什么-不要忘记在不再需要dir缓存时立即解锁它?getObjectId和treeWalk之间有什么不同?什么更好?在这种情况下如何使用treeWalk?正如名称所暗示的那样,
lockDirCache()
锁定dir缓存供其他人使用,因此您需要尽快释放此锁。我发现了一个示例,他们获取DirCache,然后在没有树的情况下调用getObjectID。有什么不同?比如DirCache=db.readDirCache();DirCacheEntry=cache.getEntry(模式);如果(entry==null){return null;}ObjectId blobId=entry.getObjectId();只需重新使用
try(TreeWalk
…代码,而不是
TreeWalk.addTree(tree)
将目录缓存添加到TreeWalk。