当前位置:  开发笔记 > 开发工具 > 正文

如何在filter-branch --subdirectory-filter之后从我的repo中删除不需要的对象

如何解决《如何在filter-branch--subdirectory-filter之后从我的repo中删除不需要的对象》经验,为你挑选了1个好方法。

我正在使用

git filter-branch --subdirectory-filter dir/name -- --all

建立一个仅具有与该目录/名称相关的历史的回购.在我进行过滤之前,我将原始repo(非常大)复制到tmp目录中.在filter-branch之后,repo看起来就像我想要的那样,有一个例外:它似乎仍然包含原始repo中的所有对象,即使它们没有显示在"git log"中.

如何完全删除所有不需要的对象?

我尝试过这样的事情:

git reflog expire --expire=now --all
git gc --aggressive --prune=now

我很清楚,我不知道他们为什么还在那里或者删除它们意味着什么,但我肯定愿意.与我有关的一些可能相关的信息是我在我的源代码库上做了一个git repack -a,它似乎将该packfile复制到新的repo.好像我应该仍然能够做我想做的事情.



1> Pieter..:

filter-branch还保留.git/refs/original中的备份引用,你必须在gc'ing之前删除它们


如果这很简单,我会有点生气.我真的只是rm .git/refs/original吗?
`rm`只有在没有执行GC的情况下才有效,因为GC将`refs`移动到`packed-refs`.删除由git-filter-branch备份的原始引用的正确方法是`git for-each-ref --format ="%(refname)"refs/original/| xargs -n 1 git update-ref -d`,如[git-filter-branch documentation](http://git-scm.com/docs/git-filter-branch)中所述.@jettero
推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有