java - JGit:使用TreeWalk获取文件内容

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

最佳答案

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

例如:

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

一旦获得锁定的目录缓存,就可以将其添加到树遍历中。当不再需要目录缓存时,不要忘记解锁它。

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

关于java - JGit:使用TreeWalk获取文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39696689/

相关文章:

java - BufferedImage,转换为字节数组并返回后相同的图像,但灰度转换后不同

java - 对象创建/声明不同

git - 使用 JGit 访问存储库中的修改文件

git - 'git difftool' 只包含修改过的文件

git - 如何使用 git clean 删除 .gitignore 中的所有文件列表?

git - 我如何用 jgit 做相当于 “git remote update” 的操作?

java - 传输错误::Jgit::git-upload-pack 不允许

java - Java 中的斐波那契内存/动态编程

java - 如何在Python中表示Unicode编码的字符串?

git - Azure - 基于子域动态多个网站