在内存中克隆git存储库

时间:2017-07-23 10:05:49

标签: java git jgit jimfs

我一直在尝试使用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。是否有一种简单的方法可以使这个(或类似的)设置工作而不需要求助于磁盘上的临时目录?

2 个答案:

答案 0 :(得分:1)

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

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

某些命令允许指定WorkingTreeIterator,理论上,它允许对备用存储上的工作树进行读访问。但是,并非所有命令都支持此概念,目前也缺少写访问。

答案 1 :(得分:0)

Yo可以将存储库克隆到内存中,然后逐个文件复制到自己的fs。 请参阅此处的将文件读入内存回购中的示例:https://stackoverflow.com/a/54486558/449553