所以,我整个上午都在寻找执行此操作的正确方法,但我不是那种精通命令行的人。
我有一个包含大量 Assets 的 git 存储库。这就像大罪,我知道。
repo 已经变得太大了。我想清理它,以便我可以通过编程方式从整个 repo 历史中删除 HEAD 中不再存在的所有文件。我已经看到了执行此操作的方法,您可以在其中指定文件路径,但实际上,我说的是从我们的最终产品中删除的 1000 多个文件,我真的不想再在我的 repo 中了。
更新:
我已经清理了所有不应该存在的 Assets 的 repo 协议(protocol)。我现在真的只有源代码和一些应该存在的 Assets 。我真的很想保留所有源代码的所有历史记录……所以我真的很想从历史记录中删除已删除的文件,同时保留当前存在的历史记录。这就是目标。我很确定可以使用 git filter-branch
来完成 - 但我只是不太了解它。
最佳答案
使用 BFG Repo-Cleaner ,一个更简单、更快速的 git-filter-branch
替代方案,专门用于从 Git 历史记录中删除不需要的文件。
so I can programmatically remove all files that do not exist in HEAD anymore from the entire history of the repo
默认情况下,BFG 会“保护”您的 HEAD 提交中的所有文件,但会删除符合您的条件的其他文件。
您应该仔细遵循 usage instructions ,但核心部分就是这样:
$ java -jar bfg.jar --strip-blobs-bigger-than 1M my-repo.git
任何大小超过 1MB 的文件 - 不 在你的最新提交中 - 将从你的 Git 存储库的历史记录中删除。如果您有普通的、小于 1MB 的源文件,您仍然想要删除,您可以使用 --delete-files
或 - 指定它们-删除文件夹
选项。
BFG 通常至少为 10-50x比运行 git-filter-branch
更快,而且通常更易于使用。
完全披露:我是 BFG Repo-Cleaner 的作者。
关于git - 从 git 历史记录中删除未使用的 Assets ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27233093/