Git克隆引用已删除的文件

时间:2018-03-23 19:29:47

标签: git github git-clone

当我们对我们的项目进行git克隆时,需要一段时间才能克隆。我们运行了以下命令

git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}')"

它返回了一堆被错误推送的大文件,并被删除了。当前的主人没有这些文件或提交。而且我们没有可能包含这些文件的旧分支。

我们如何从git历史记录或克隆时删除它们。

谢谢

1 个答案:

答案 0 :(得分:1)

一旦项目在git历史记录中,它就会永久。即使稍后的提交删除了该文件,该文件仍将存在于git clone中,因为git clone包含完整的历史记录(因为Git是分布式版本控制系统)。这将允许您通过签出先前的提交来检索文件。

从存储库中删除这些文件以加速克隆的唯一方法是重写历史记录,以便它从不首先包含这些文件。 Github使用git filter-branch here提供了有关如何执行此操作的详细说明。

重写存储库的历史记录以删除大文件可以这样做:

$ git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' --prune-empty --tag-name-filter cat -- --all

执行此操作后,您必须强制推送以覆盖远程存储库上的历史记录。当您这样做时,您的所有开发人员都需要知道历史记录已被重写,并且他们需要检查存储库的新副本以继续开发。