gpt4 book ai didi

git - 如何从 git 存储库中完全删除数据?

转载 作者:行者123 更新时间:2023-12-05 08:02:06 27 4
gpt4 key购买 nike

在我的项目中,我错误地向我的存储库添加了一些大图像文件。我读了GitHub如何从历史记录中删除文件,它确实有效:您再也看不到历史记录中的文件。但是后来我从我的项目中制作了一个 tar.gz 进行备份,现在它的大小是以前的 两倍!我没有添加任何其他可以证明这种增加的理由,所以我怀疑用于表示图像文件的 repo 数据并没有真正从 repo 中丢弃。有人可以证实这一点吗?有解决办法吗?

编辑 以澄清我对 git 知之甚少,所以我完全按照 GitHub help pages 上指示的步骤进行操作,唯一的异常(exception)是我必须从第二个文件开始使用 force 开关,如 git filter-branch -f --index-filter ...

为了部分回答我自己的问题,我想我可以创建一个没有不需要的 Material 的第二个 git 仓库

  • 在不同的位置创建一个空的 repo
  • 在我的项目的不同步骤中重现文件情况,删除不需要的
  • 最后使用新的 repo 而不是旧的将 Material 推送到 GitHub。

以前有人做过吗?具体来说,我可以在 GitHub 上的同一项目中使用新的 git 存储库而不是旧的吗?

顺便说一句,就其值(value)而言,这大约是 a presentation我现在正在写作;有其中的巴别塔图像以高分辨率存在于多个版本中,这解释了问题的大小(~100MB 不需要的数据)。

edit 2 非常感谢您的建议;我做了

rm -rf .git/refs/original/
git reflog expire expire=now --all
git reflog expire --all
git gc --aggressive --prune=now

效果是 *.tar.gz 的大小只缩小了 0.5%...

edit 3 体验 git 的绝对复杂性令人望而生畏。我在这一点上放弃了。我用一个小的一次性 repo 进行了测试;我做了一个初始提交,添加了一个大文件,做了一个提交,删除了文件并试图用

从内存中删除它的痕迹
rm very-big-file.xcf
git filter-branch --index-filter 'git rm --cached --ignore-unmatch very-big-file.xcf' --prune-empty -- --all
rm -rf .git/refs/original/
git reflog expire --all
git gc --aggressive --prune=now

这些是记录的 *.tar.gz 大小:

foo.tar.gz          7,518 
foo2.tar.gz 65,735,003
foo3.tar.gz 32,777,155

大文件的压缩大小为 32,955,246 字节,这使得它完全有可能仍然完整地存在于 .git 下,甚至可能以未压缩的形式存在。

你这么固执吗??

没有任何 git purge 扩展可以做到这一点吗?我的意思是,git filter-branch --index-filter 'git rm --cached --ignore-unmatch very-big-file.xcf' --prune-empty -- --all 不是当我有轻微的宿醉时,正是我凭内存输入的内容。

最佳答案

一个快速的方法是让历史看起来完全像你想要的那样,添加 repo 作为一个新的空的 remote,然后只获取。您只会获得它们所代表的历史记录中的引用和对象。

您现在可以将其推送到新的 GitHub 存储库。

关于git - 如何从 git 存储库中完全删除数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9855226/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com