如何在运行'git gui'时跳过“Loose Object”popup窗口
当我运行'git gui'时,出现一个popup窗口
这个版本库目前有大约1500个松散对象。
然后build议压缩数据库。 我之前做过这件事,它将松散的对象减less到大约250个,但是这不会抑制popup。 再次压缩不会改变松散对象的数量。
我们目前的工作stream程需要在从Perforce转换时大量使用“rebase”,而Perforce仍然是规范的SCM。 一旦Git是规范的SCM,我们会定期合并,松散对象问题应该大大减轻。
与此同时,我真的想让这个“有用的”popup窗口消失。
由于没有人有答案,我查看了代码,看看如何删除显示该对话框的代码。 我发现了hint_gc
过程,它和它被调用的地方。 同时我注意到,2011年末,添加了禁用对话框的configuration选项 。 这个变化(git-gui 0.16.0的一部分)在2011-12-14被合并到了Git的主线上。
所以如果你使用Git v1.7.9或更新的版本,你可以使用下面的命令禁用警告对话框:
git config --global gui.gcwarning false
如果您使用的是旧版本,那么您可以编辑/lib/git-core/git-gui
并删除after 1000 hint_gc
行after 1000 hint_gc
行,或者编辑/usr/share/git-gui/lib/database.tcl
并删除主体的hint_gc
过程。 (这些文件path在Cygwin上 – 在其他环境下,这些文件可能位于不同的位置,对于Windows,它是c:\Program Files\Git\mingw64\libexec\git-core\git-gui.tcl
)
更新: git prune
将“解决”这个问题,因为它将删除那些松散的对象
( git gc
调用git prune
,但仅适用于两周以前的松散对象)。
然而,正如OP的Michael Donohue在评论中提到的那样:
我喜欢将松动的物体放置两周的安全方面,如果我想回头看看一些旧版本,所以我不太喜欢这个解决scheme。
我对git的大小和性能没有任何问题,即使在压缩数据库的时候,也会坚持要求我压缩数据库,这就是'git gui'。
原始答案:
之前已经报道过“ git gc
”不能去除所有松散物体的问题(2008年末, “ git gc
”似乎不再去除松散物体 “
git gc
只能删除两周以上的松散对象,如果你真的想删除它们,运行git prune。
但是确保在运行时没有其他的git进程是活动的,否则它可能会踩到一些东西。“
git gc
”将解压缩已经变成不可用的对象,并且当前处于打包状态。
因此,git仓库使用的磁盘空间量实际上会在“git gc
”操作之后急剧上升 ,这对于在其文件系统中运行接近完全的人来说可能是令人惊讶的,从某个仓库中删除了一些分支跟踪仓库,然后做一个“git gc
”可能会得到一个非常不愉快的惊喜。
[
例如:]
通过next-20081204
等标签保留旧的分支。
如果你每天更新linux-next
版本库的本地副本,你将会积累大量的这些旧的分支标签。
如果你删除了整个系列文件,然后运行git-gc
,这个操作将会花费很长时间,所使用的块和inode数量将会大大增加。他们会在“
git prune
”后消失,但是当我做这个家务操作的时候,我常常想要--yes-I-know-what-I-am-doing-and-it's-unsafe-but-just-drop-the-unreachable-objects-cause-this-is-just-a-tracking-repository
选项改为“git gc”。
那么在你的情况下,“ git prune
”会有帮助吗?
(可能在使用gc.pruneexpire
configurationvariables中的“now”时,需要上述行为发生)。
你也有(从同一个线程):
repack -a -d -l
注意小写的'a'。
git-gc
调用用大写字母“A”来重新包装,这是导致不可达对象被解压缩的原因。 小'a',是为了知道自己在做什么的人,并希望git只删除不可访问的对象。
当“Loose Object”popup时,我知道是时候运行git的垃圾回收器了:
git gc
之后popup消失。
更新:(由于TED的build议)
我从git/share/git-gui/lib/database.tcl
提取了下面的例程
您可以修改它以满足您的需求。
proc hint_gc {} { set object_limit 8 if {[is_Windows]} { set object_limit 1 } set objects_current [llength [glob \ -directory [gitdir objects 42] \ -nocomplain \ -tails \ -- \ *]] if {$objects_current >= $object_limit} { set objects_current [expr {$objects_current * 256}] set object_limit [expr {$object_limit * 256}] if {[ask_popup \ [mc "This repository currently has approximately %i loose objects. To maintain optimal performance it is strongly recommended that you compress the database when more than %i loose objects exist. Compress the database now?" $objects_current $object_limit]] eq yes} { do_gc } } }
嗯….我没有看到在文档中的命令行参数。
我想你总是可以拉下来源,取出对话框的代码,然后重build。