我在Windows 10上使用Git,以及Netbeans 8.1,也在测试Smartgit。创建存储库后,我意外地提交了二进制文件和其他源文件,并且存储库大小达到了680MB! 虽然我已创建.gitignore文件并手动指示NB要忽略哪些文件夹,但我找不到恢复存储库中浪费空间的方法。
我已经阅读了这些资源,但是我在Windows上没有bash终端,这些建议似乎没有帮助:
一个重要的方面是我想要排除的二进制文件仍然在工作树中(由于功能原因无法删除它们)但是它们应该被Git忽略并从repo中删除。
我可以尝试什么?
答案 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用于您的一次性演出。