出于测试目的,我需要一个精简的linux内核git repo,它包含更少的提交,占用更少的磁盘空间。例如,假设我需要永久删除v3.2之后的所有提交,我尝试了以下命令来删除805a6a之后的所有提交:
git reset --hard 805a6af8dba5dfdd35ec35dc52ec0122400b2610
git gc --aggressive --purne=all在运行这些命令之前,存储库需要2.7G的磁盘空间。运行命令后,repo占用2.0G磁盘空间,但我认为它占用的磁盘空间更少,因为似乎没有真正删除任何提交:在运行命令之前和之后,"git rev-list --all --count“的输出都是949352。
有什么想法吗?如何永久删除805a6a之后的提交,使其不占用磁盘空间?
发布于 2020-09-04 19:31:31
这可能有点XY problem。
出于测试目的,我需要一个精简的
内核git repo,它包含更少的提交,占用更少的磁盘空间。
您可以通过执行一种倒排的shallow clone来实现这一点,它包含了直到特定标记的历史记录。您可以使用git clone的--branch和--single-branch选项来执行此操作。例如:
git clone https://github.com/torvalds/linux.git --single-branch --branch v3.2发布于 2020-09-05 00:00:49
这不是你想要的,原因是gc只会在没有引用提交的情况下删除它们。这可能意味着可以从提交到达的其他分支。这可能意味着标签。这肯定是指你的reflog。
要说服git删除已提交的数据并不容易。这是可以做到的,但是对于linux内核这样大小的repo,我不认为这是一个合理的任务。
为什么不直接克隆你需要的部分。您可以提供一个--branch选项来指定您想要的版本,一个--single-branch选项来仅复制该版本之前的历史记录,甚至还可以提供一个--depth选项(或其他浅显选项)来限制您复制的历史记录数量。
https://stackoverflow.com/questions/63739560
复制相似问题