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



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

我发现了一个JGit代码示例,其中远程存储库被克隆到内存中的存储库中。

我是否可以使用JGit(如下所示(将文件添加到远程存储库中,而无需本地签出(即,无需将千兆字节的数据传输到将运行该代码的机器(?

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

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

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

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

您可能还想了解如何创建和添加";文件";使用JGitapi,看看这是否是将您想要的数据添加到回购中的方便方法。


如果你想限制从git服务器下载的东西的数量:你可以创建一个浅克隆
例如,请参阅此SO答案:

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

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

根据需要,您可以在磁盘或RAM中运行此程序。

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

最新更新