5

我一直在尝试使用JGITJIMFS使用类似的东西将一个小型 git 配置存储库克隆到内存中

FileSystem fs = Jimfs.newFileSystem(Configuration.unix());
Path gitPath = Files.createDirectories(fs.getPath("/git")); 
Git.cloneRepository().setURI(...).setBranch(...).setDirectory(gitPath.toFile())
                    .setCredentialsProvider(...).call()

但是由于 JIMFS 使用路径Path API(因为它不使用默认文件系统),而 JGIT 使用File API,JIMFS 没有实现 toFile() 调用:

@Override
public File toFile() {
    // documented as unsupported for anything but the default file system
    throw new UnsupportedOperationException();
}

所以我得到的是这个UnsupportedOperationException。有没有一种简单的方法可以让这个(或类似的)设置工作而不求助于磁盘上的临时目录?

4

2 回答 2

2

JGit 提供了一个InMemoryRepository用于测试和实验的用途。但即使是这个存储库后端也会将非裸存储库的工作目录存储在磁盘上。

除非 JGit 更改其FileRepository实现以使用 Paths API,否则我看不到使用 Jimfs 存储存储库的方法。

一些命令允许指定 a WorkingTreeIterator,理论上,这将允许对备用存储上的工作树进行读取访问。但是,并非所有命令都支持这个概念,写访问目前也缺失。

于 2017-07-23T16:32:14.517 回答
0

您可以将存储库克隆到内存中并将其逐个文件复制到自己的 fs。在此处查看将文件读入内存存储库的示例:https ://stackoverflow.com/a/54486558/449553

于 2019-02-01T20:20:11.390 回答