【问题标题】:how can I remove the unwanted objects from my repo after filter-branch --subdirectory-filter在 filter-branch --subdirectory-filter 之后如何从我的仓库中删除不需要的对象
【发布时间】:2010-10-17 02:28:36
【问题描述】:

我正在使用

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

构建一个仅具有与该目录/名称相关的历史记录的存储库。在进行过滤之前,我将原始存储库(非常大)克隆到 tmp 目录中。在过滤器分支之后,repo 看起来就像我想要的那样,除了一个例外:它似乎仍然包含原始 repo 中的所有对象,即使它们没有显示在“git log”中。

我怎样才能完全删除所有那些不需要的对象?

我尝试过类似的方法:

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

我很清楚,我不知道为什么它们仍然存在,也不知道删除它们意味着什么,但我肯定愿意这样做。一些可能对我不利的相关信息是,我不久前在我的源代码库上做了一个 git repack -a ,它似乎将该包文件复制到新的代码库中。看来我应该仍然可以做我想做的事。

【问题讨论】:

    标签: git


    【解决方案1】:

    filter-branch 还将备份引用保存在 .git/refs/original 中,您还必须在 gc'ing 之前将其删除

    【讨论】:

    • 如果就这么简单,我会有点生气。我真的只是 rm .git/refs/original 吗?
    • 嗯,rm-ing 确实有效(即使有更好的方法),这完全回答了我的问题,谢谢。
    • rm 仅在未执行 GC 时有效,因为 GC 将 refs 移动到 packed-refs。删除由 git-filter-branch 备份的原始 refs 的正确方法是 git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d,如 git-filter-branch documentation 中所述。 @jettero
    猜你喜欢
    • 1970-01-01
    • 2013-03-29
    • 2014-06-06
    • 2020-07-22
    • 2011-12-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 2011-08-06
    相关资源
    最近更新 更多