我有一个大(几个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(我猜:通过在工作站上运行浅层克隆命令来检查实际大小(,以获得头提交的压缩版本。