在Windows

时间:2016-09-19 11:05:49

标签: git repository

我在Windows 10上使用Git,以及Netbeans 8.1,也在测试Smartgit。创建存储库后,我意外地提交了二进制文件和其他源文件,并且存储库大小达到了680MB! 虽然我已创建.gitignore文件并手动指示NB要忽略哪些文件夹,但我找不到恢复存储库中浪费空间的方法。

我已经阅读了这些资源,但是我在Windows上没有bash终端,这些建议似乎没有帮助:

  1. Reduce git repository size
  2. How to reduce size of git repository after accidental push of large file size?
  3. how to reduce git repository size
  4. 一个重要的方面是我想要排除的二进制文件仍然在工作树中(由于功能原因无法删除它们)但是它们应该被Git忽略并从repo中删除。

    我可以尝试什么?

1 个答案:

答案 0 :(得分:0)

好吧,.gitignore只会忽略工作树中的某些文件;它肯定不会对已经提交做任何事情,因此存储在存储库的对象存储中。 换句话说,.gitignore是一种过滤器,可以帮助您在研究git status的输出时在视觉上清除不相关的内容,并且它还会使#34; globbing" (或"通配符")某些Git命令的参数也会忽略这些不相关的文件,因此,例如,git add .不会添加.gitignore d的任何内容,除非你明确告诉它考虑它们。

正如您所看到的,您的问题只能通过实际修改已记录的历史记录部分来解决:也就是说,您需要重写包含这些大文件的每个提交,以便创建新的提交取代原来的引用它们。之后,当删除对旧原始历史记录的所有引用时,保存这些文件的存储库存储中的对象变为未引用(因此被认为是垃圾),并且git gc的下一次运行将实际上是核他们来自存储库。

处理此问题的标准方法是git filter-branch命令。 具体来说,您需要使用其--index-filter命令行选项和适当的脚本来过滤它。考虑从"示例开始"其手册页的一部分以获得概述。

这个命令使用起来有些棘手(但是如何使用HOWTOs在互联网中大量存在)所以如果你不太了解硬核Git命令,你可能会考虑更通用的目的自定义工具,The BFG Repo Cleaner用于您的一次性演出。