在内存中克隆 git 存储库

Posted

技术标签:

【中文标题】在内存中克隆 git 存储库【英文标题】:Clone git repository in-memory 【发布时间】:2017-12-29 01:14:18 【问题描述】:

我一直在尝试使用 JGIT 和 JIMFS 将一个小型 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。有没有一种简单的方法可以让这个(或类似的)设置工作而无需借助磁盘上的临时目录?

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

以上是关于在内存中克隆 git 存储库的主要内容,如果未能解决你的问题,请参考以下文章

如何使用私钥克隆 GIT 存储库

如何在 tensorflow 中克隆 git 存储库 [重复]

如何从 Docker 容器克隆 Git 存储库

如何使用 GitLab 克隆 git 存储库

从 Dockerfile 克隆私有 git 存储库

仅从 git 存储库中克隆特定版本