如何压缩本地Git仓库

4

我已经在本地克隆了所有历史记录的repo,现在想要删除所有的git历史记录以释放空间。但是我想保留所有被忽略的文件,并希望能够达到 git clone --depth=1 的效果。

更新:

更具体来说:

  • 我不想手动移动文件、删除repo、重新创建等操作。
  • 我有一些在assume-unchanged状态下的配置文件需要保留。
  • 我有很多被gitignored的文件需要保留。

这些原因说明了为什么我不想在30个repo中重新克隆并设置所有凭据和相关信息。

理想情况下,我希望能找到一种方法,甚至可以批量运行所有项目。如果没有这样的方法,那当然也行。


相关链接:*减少Git占用的磁盘空间* 和 *减小Git仓库的大小*。 - undefined
2个回答

10
我有几个占用大量空间的git项目,我想删除所有的git历史记录以释放一些空间。谢谢。只需删除这些项目,然后使用git clone --depth --branch ...重新克隆,以克隆指定分支和最新提交,就像你之前做的那样。

如何打包您的代码库:

您需要运行gc来完成此操作。

# Expire all the unreachable content and pack the repository in the most
# compact way.
git gc --aggressive --prune=now

# Also clear the reflog as well
git reflog expire --expire=now --all

清理大文件

你应该使用这个工具来清理你的代码库历史记录:git-filter-branch的替代方案

这是一个完美的工具来完成这种任务。

BFG Repo-Cleaner

git-filter-branch的替代方案。

BFG是一个比git-filter-branch更简单、更快速的工具,用于清理你的Git代码库历史记录中的错误数据

  • 删除超大文件
  • 删除密码、凭证和其他私密数据

示例(来自官方网站)

在所有这些示例中,bfgjava -jar bfg.jar的别名。

# Delete all files named 'id_rsa' or 'id_dsa' :
bfg --delete-files id_{dsa,rsa}  my-repo.git

Enter image description here


在清理完您的存储库之后,使用此工具来存储您的大文件。

Enter image description here


谢谢,但是 git gc --aggressive --prune=now;git reflog expire --expire=now --all 可以从 .git 中删除20MB,而 --depth-1 重新克隆则要小45MB。 - zsitro
当然。因为垃圾回收只重新打包而不删除任何数据,而克隆下载只下载最新的数据。 - CodeWizard
只是想给你展示一些选项,你可以选择并在学习的过程中学到新东西。 - CodeWizard
再次感谢,这确实有所帮助,但我仍然会保持开放状态,因为我很想知道是否有其他更好的解决方案可以更好地匹配--depth = 1存储库大小。 - zsitro

2
我会新建一个文件夹,并将现有文件夹中的代码库克隆到其中:
```html

我会新建一个文件夹,并将现有文件夹中的代码库克隆到其中:

```
git clone --depth=1 /path/to/existingFolder /path/to/newFolder

然后将 /path/to/newFolder 中的 .git 目录复制到 /path/to/existingFolder,然后删除 /path/to/newFolder编辑: 根据这个答案,您可以直接编辑 shallow 文件。
git show-ref -s HEAD > .git/shallow
git reflog expire --expire=0
git prune
git prune-packed

谢谢,但是手动工作太多了,而且还有git-ftp凭证和其他设置在.git下面。 - zsitro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接