所以我使用 git 一次(大量)提取了大量文件。
但是后来我曾经git rm
从 git 数据库中删除目录,因为 git 开始需要很长时间才能从原点拉取,但是调用git rm
并没有解决问题 - git 仍然需要很长时间才能从原点拉取。
除了重新创建存储库来解决这个问题,我还能做什么?
所以我使用 git 一次(大量)提取了大量文件。
但是后来我曾经git rm
从 git 数据库中删除目录,因为 git 开始需要很长时间才能从原点拉取,但是调用git rm
并没有解决问题 - git 仍然需要很长时间才能从原点拉取。
除了重新创建存储库来解决这个问题,我还能做什么?
因为 git 保留了所有提交的历史记录,所以从技术上讲,该内容存在于 git repo 中(谢天谢地,这正是源 repo 的好处:)
您可以重写过去的历史记录以删除对该文件夹的所有引用。
该站点有一个使用示例filter-branch
:
http://dalibornasevic.com/posts/2-permanently-remove-files-and-folders-from-a-git-repository
注意:您正在重写历史记录,您需要强制将 repo 推送到服务器。如果其他人正在使用/提交它,可能会给他们带来一些麻烦。
编辑:关于该主题的另一个有趣的阅读:http ://ramblinglabs.com/blog/2012/04/git-removing-sensitive-data-and-rewriting-history
git rm
实际上不会删除在您在存储库中引用的任何头的当前历史中的任何时候提交的大对象(例如分支、标签等)
我不确定这是否是导致 git 拉慢的原因(根据我的经验,一旦你拉了很大的差异,在随后的拉动中事情应该恢复快速和正常),但如果你怀疑它,你可以尝试完全删除包含较大差异的提交,使用git rebase
.
完成此操作后,您可以执行 agit gc
来清理仓库中分离的对象并减小整体大小。要与您的远程仓库同步,您需要进行强制推送。