Git 为什么即使我';你删除了吗?
有没有办法告诉我为什么Git会保留一个文件,即使我认为它必须放弃它?我正试图通过删除大文件来重写提交历史记录。以下是我所做的:Git 为什么即使我';你删除了吗?,git,Git,有没有办法告诉我为什么Git会保留一个文件,即使我认为它必须放弃它?我正试图通过删除大文件来重写提交历史记录。以下是我所做的: git filter-branch -f --tree-filter "rm -rf *.mp4" 573edba..HEAD 我也试过: git filter-branch --index-filter 'git rm --cached --ignore-unmatch *.mp4' 573edba..HEAD 我看到有人报告说他们被撤职了。我还运行了git-gc
git filter-branch -f --tree-filter "rm -rf *.mp4" 573edba..HEAD
我也试过:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch *.mp4' 573edba..HEAD
我看到有人报告说他们被撤职了。我还运行了git-gc
我在存储库中有两个分支,所以我在master和development分支上都运行了这个
现在,如果我这样做:
git ls-files | grep '.mp4'
或
我没有结果
但是,当我像这样检查索引文件时:
git verify-pack -v .git/objects/pack/pack-*.idx | grep -v chain | sort -k3nr
然后我取第一个SHA1,看看它是什么:
git rev-list --all --objects | grep $SHA1
我得到/path/to/file.mp4
问题是:我如何一劳永逸地删除该文件?我如何知道为什么该文件仍在存储库中?是什么让Git相信它必须存在?您必须更新Git存储库,请使用以下命令:
git add -u .
git commit -m "some commit"
然后享受生活:D您必须更新git存储库,请使用以下命令:
git add -u .
git commit -m "some commit"
然后享受生活:D因为
git filter branch
是一个非常危险的操作,所以您的旧分支头的备份保存在.git/refs/original
中。这将阻止git gc
删除这些头引用的任何对象
您只需删除
.git/refs/original
并再次运行git gc
,或者简单地克隆您的本地repo,以便从您的repo中实际删除所有那些大的blob。因为git filter branch
是一个非常危险的操作,您的旧分支头的备份保存在.git/refs/original
中。这将阻止git gc
删除这些头引用的任何对象
你只需要删除
.git/refs/original
并再次运行git gc
,或者简单地克隆你的本地回购,以便从你的回购中删除所有的大斑点。我将回答我自己的问题,尽管之前已经给出了一些很好的建议。这是因为很少有事情没有提到其他
为了让它工作,我需要做的重要事情:
- 在
我需要删除文件git过滤器分支之后
.git/refs/original
- 之后,我不得不调用git-gc--prune=now
- 在那之后,
git repack-a-d
- 重要提示:您必须删除遥控器<代码>git远程rm源站
- 也许顺序不正确,但重复这些步骤中的某些步骤最终会让你达到目标
- 推。确保服务器设置
git推送-f
- 希望您可以使用SSH连接到服务器,因为您还没有完成李>
- 在服务器存储库中,再次需要调用
和git gc
以最终缩小存储库,删除删除的文件git repack
- 在
我需要删除文件git过滤器分支之后
.git/refs/original
- 之后,我不得不调用git-gc--prune=now
- 在那之后,
git repack-a-d
- 重要提示:您必须删除遥控器<代码>git远程rm源站
- 也许顺序不正确,但重复这些步骤中的某些步骤最终会让你达到目标
- 推。确保服务器设置
git推送-f
- 希望您可以使用SSH连接到服务器,因为您还没有完成李>
- 在服务器存储库中,再次需要调用
和git gc
以最终缩小存储库,删除删除的文件git repack
[receive]
denyNonFastforwards = false