【发布时间】:2017-08-24 14:24:44
【问题描述】:
由于 .git 文件夹的大小变得非常庞大,我们每天都在一个小组中工作并提交大量数据。在我们的系统上执行 pull 命令时,由于 .git 文件夹很大,需要花费很多时间。我们如何清理或减小这个 git repo 的大小?
【问题讨论】:
由于 .git 文件夹的大小变得非常庞大,我们每天都在一个小组中工作并提交大量数据。在我们的系统上执行 pull 命令时,由于 .git 文件夹很大,需要花费很多时间。我们如何清理或减小这个 git repo 的大小?
【问题讨论】:
您需要确定您的存储库中是否存在固有的大问题——比如太多的大二进制文件——或者垃圾回收是否会修复它。
做一次垃圾回收,看看你的仓库有多大。
如果这不能解决问题,请查看 @sauerburger 提供的 Atlassian 链接,或根据您在那里找到的内容进行其他谷歌搜索。
(这些步骤的细节特意留给用户练习。)
【讨论】:
如果大部分文件大小被 .git 文件夹中的旧提交占用,而不是当前文件,您可以做的是将特定的最近提交重新设置为根,保留从那时起的所有文件和提交但要摆脱旧的历史。
请务必先备份所有内容!
引用这个答案(https://stackoverflow.com/a/24153726/7070218):
这里有一种方法,假设您当前的工作被称为
branchname。每当我进行大型变基时,我都喜欢使用临时标签 仔细检查没有变化并标记我可以的点reset如果出现问题,请返回(不确定这是否是标准的 程序与否,但它适用于我):git tag temp git checkout 10004 git checkout --orphan new_root git commit -m "set new root 10004" git rebase --onto new_root 10004 branchname git diff temp # verification that it worked with no changes git tag -d temp git branch -D new_root要摆脱旧分支,您需要删除所有标签和分支 上面的标签;那么
git prune git gc将从您的存储库中清除它。
请注意,您将暂时拥有所有内容的两份副本,直到您 有
gc'd,但这是不可避免的;即使你做一个标准的壁球 和 rebase 你仍然有两个副本,直到 rebase 完成。
【讨论】:
depth 参数创建到 clone 时)更好,因为它保留了提交 ID(由于许多原因,这可能很有用,特别是如果您保留原始历史的存档)。另外,顺便说一句,关于在变基后拥有“所有内容的两个副本”的业务是不正确的;这不是 git 存储东西的方式。