Git:如何重新包装所有松散的提交
在使用git gc
和git 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
,以每个存储库为基础禁用它。