是否可以使用 JGit 的内存存储库将一个小文件添加到一个大的 Git 存储库而不在本地检出?

Is it possible to use JGit's in-memory repository to add one small file to a big Git repository without checking it out locally?

我有一个很大的(几 GB)Git 存储库。我想要一些应用程序在该存储库中创建小文件并提交更改。这应该在不将这些千兆字节签出到磁盘的情况下发生。

我找到了一个 JGit code sample,其中远程存储库被克隆到内存存储库中。

我可以使用 JGit(如下所示)将文件添加到远程存储库 而不 在本地检查它(即不传输千兆字节)数据到该代码所在的机器 运行)?

DfsRepositoryDescription repoDesc = new DfsRepositoryDescription();
InMemoryRepository repo = new InMemoryRepository(repoDesc);
Git git = new Git(repo);
git.remoteAdd();
git.commit();

更新 1: 整个目录(跟踪文件加上 .git)的大小为 1.2G。单独.git的大小是573M。

% du -hs .
1.2G    .
% du -hs .git
573M    .git

请注意,RAM 中的结帐将从远程下载完全相同的数据。克隆完成后,它只会在 RAM 中使用 1,2G,而不是在磁盘上。

您可能还想看看如何使用 JGit 创建和添加“文件”api,看看它是否是将您想要的数据添加到存储库的便捷方法。


如果您想限制从您的 git 服务器下载的内容的数量:您可以创建浅克隆。
参见 this SO answer 例如:

git clone --depth 1 <repo_url> -b <branch_name>

这将下载最新提交的内部文件(在您的情况下是 500M 的压缩版本),以及 运行 此提交的实际签出(500M)。

您可以 运行 将其保存在磁盘或 RAM 中,具体取决于您的需要。

在您的情况下,这仍然需要 600-700M 的内存或磁盘使用量,包括签出的文件,
但它只会从服务器下载 ~100M(我猜:通过 运行 从你的工作站使用浅克隆命令检查实际大小)以获取压缩版本的 head 提交。