Git:如何重新包装所有松散的提交

在使用git gcgit repack (有各种选项)后,我仍然在文件夹.git/objects有4825个提交 。 我希望将它们全部放入包文件中 ,或放在其他包文件中。

我做了很多提交重写(修改+ rebase),因此有许多无法访问的提交是非常正常的。 我的.gitconfig包含这些参数来长时间保持reflogs和不可达的提交。

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

您可能想知道它是否有意义,但我已经需要并且已经恢复了几个月前的一些提交。 发生这种情况的原因是,我们在一组新的高优先级分支上开发了好几个月,然后继续在较低优先级的分支上继续工作。

这个问题的主要原因是, git gui不断抱怨压缩我已经做了很多次的数据库错误。 如果我们无法收拾那些宽松的提交,那么这个“抱怨”可能是git gui一个bug。


考虑到git包只用于打包对象(调用fetch-pack),你是否尝试打包,然后克隆你的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

如果这样做,你可以继续,使用新的克隆回购作为你的主要回购。


git-gui发出的警告只是提示您可能需要进行一些维护。 对于大多数拥有大量物品的人来说,它们正在放慢速度。 在你的情况下,你应该禁用该警告。 有问题的函数是hint_gc ,它是在git-gui脚本文件结尾附近调用的。 只是评论如下。

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

multicommit业务是一个标志,决定我们是否以committool或通用应用程序运行。

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

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

应该让你使用git config --bool gui.skip_gc_warning true ,以每个存储库为基础禁用它。

链接地址: http://www.djcxy.com/p/49029.html

上一篇: Git: how to repack all loose commits

下一篇: Push changes to github without pull