从git中完全删除文件夹[duplicate]

4zcjmb1e  于 2023-03-28  发布在  Git
关注(0)|答案(3)|浏览(125)

此问题在此处已有答案

How to remove/delete a large file from commit history in the Git repository?(22个答案)
六年前关闭了。
要从git中删除名为build的文件夹,我用途:

git rm --cached -r build

我从这个answer中学到的。
但是,IIUC,目录仍然在git的数据库中。
我测试了一下:
1.初始化一个新的git仓库。
1.添加了一个名为build的新目录,其中包含一个大文件(7MB)并已提交。
1.执行日期:

git rm --cached -r build

.git目录的大小仍然是7mb,这意味着取消跟踪和删除并没有改变git的历史记录,这是应该的。

有什么方法可以完全清理一个错误提交的目录,这个目录是在几次提交之后提交的?
在我的情况下,因为我只是在我的第三次提交,很少关心项目的历史,我删除了**.git**文件夹并重新开始,但我想知道是否有更好的方法。

nuypyhwy

nuypyhwy1#

答案与从所有历史记录中删除单个文件相同(具有所有相同的警告),除了不是引导过滤器删除一个文件,而是引导它删除以该路径开始的所有文件,例如,git rm --cached -rf path/to/directory作为您的--index-filtergit filter-branch。参见,例如,this answerHow to remove/delete a large file from commit history in Git repository? See also Completely remove file from all Git repository commit history
请注意,在使用git filter-branch(你应该在克隆上这样做)之后,最简单的方法来 * 收缩 * 存储库-现在有多达 * 两倍 * 的提交,因为过滤器不能改变现有的提交,只能将它们复制到正确的新提交-是克隆过滤后的克隆。

uoifb46i

uoifb46i2#

git filter-branch --tree-filter 'rm -rf src/folder' HEAD

git rm仅从工作树中删除

fcg9iug3

fcg9iug33#

通常,你需要重写提交的历史记录,以便从所述提交中清除大文件。
一个很好的工具是BFG Repo cleaner:它比原生git filter-branch更快

java -jar bfg.jar --strip-blobs-bigger-than 5M some-big-repo.git

一旦你过滤了你的提交,你仍然需要应用git gc/repack/prune,以使大小实际上下降。
现在(2020年以后),您可以将git filter-repo用作I did here

git filter-repo --strip-blobs-bigger-than 5M

相关问题