7

使用git gcand (带有各种选项)后,我在文件夹中git repack仍然有 4825 个松散的提交.git/objects。我想把它们全部放在包文件中,其余的放在另一个包文件中。

我正在做很多提交重写(修改+变基),因此有许多无法访问的提交是完全正常的。我的 .gitconfig 包含这些参数以保持 reflogs 和无法访问的提交很长时间。

[gc]
    reflogExpire = 300 days
    reflogExpireUnreachable = 200 days
    pruneExpire = 90 days

你可能想知道这是否有意义,但我已经需要并且已经恢复了几个月前所做的一些提交。碰巧我们在一组新的高优先级分支上开发了好几个月,然后继续在旧的低优先级分支上。

这个问题的主要原因是git gui尽管我已经这样做了很多次,但仍然抱怨压缩我的数据库。如果我们无法打包那些松散的提交,那么这种“抱怨”可能是git gui.

4

2 回答 2

1

考虑到git bundle仅用于打包对象(调用fetch-pack),您是否尝试过 bundle,然后克隆您的 repo?

git bundle create aBundle --all # hopefully package everything, 
                                # the result being *one* file.
git clone aBundle newRepo       # recreate a full repo
# check if the cloned repo contains only packaged object

如果这可行,您可能会继续使用新的克隆存储库作为您的主要存储库。

于 2011-11-28T11:30:09.100 回答
1

来自 git-gui 的警告只是提示您可能需要进行一些维护。对于大多数人来说,拥有大量对象只会减慢它们的速度。在您的情况下,您应该禁用警告。有问题的函数hint_gc是从 git-gui 脚本文件的末尾附近调用的。只需将其注释如下。

if {[is_enabled multicommit]} {
        #after 1000 hint_gc
}

多提交业务是一个标志,它确定我们是作为提交工具运行还是作为通用应用程序运行。

如果您想在其他地方正常使用 git-gui,那么您可以添加一个特定于存储库的标志。就像是:

if {[is_enabled multicommit] && ![is_config_true gui.skip_gc_warning]} {
        after 1000 hint_gc
}

应该让您使用git config --bool gui.skip_gc_warning true在每个存储库的基础上禁用它。

于 2011-11-28T16:13:20.340 回答