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