当我运行'git gui'时,我会弹出一个对话框
该存储库当前有大约1500个松散对象。
然后建议压缩数据库。我之前已经做过,它可以将松散的对象减少到250个左右,但这并不能抑制弹出窗口。再次压缩不会更改松散对象的数量。
从Perforce过渡时,当前的工作流程需要大量使用“变基”,而Perforce仍然是规范的SCM。一旦Git是规范的SCM,我们将进行常规合并,并且应该大大减轻松散对象的问题。
同时,我真的很想让这个“有用的”弹出窗口消失。
当我运行'git gui'时,我会弹出一个对话框
该存储库当前有大约1500个松散对象。
然后建议压缩数据库。我之前已经做过,它可以将松散的对象减少到250个左右,但这并不能抑制弹出窗口。再次压缩不会更改松散对象的数量。
从Perforce过渡时,当前的工作流程需要大量使用“变基”,而Perforce仍然是规范的SCM。一旦Git是规范的SCM,我们将进行常规合并,并且应该大大减轻松散对象的问题。
同时,我真的很想让这个“有用的”弹出窗口消失。
Answers:
由于尚无人提供答案,因此我查看了代码,以了解如何删除显示该对话框的代码。我找到了hint_gc
执行该操作的过程以及调用它的地方。同时,我注意到2011年底添加了用于禁用对话框的配置选项。此更改(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
行,或者编辑/usr/share/git-gui/lib/database.tcl
并删除该hint_gc
过程的主体。(这些文件路径位于Cygwin上-在其他环境中,文件可能位于不同的位置。对于Windows,则为c:\Program Files\Git\mingw64\libexec\git-core\git-gui.tcl
)
after 1000 hint_gc
以便在10000
松动的物体之后发出警告吗?
after 1000
等待显示对话框之前要等待的毫秒数。通过将其增加到“ 10000”,对话框仍然会出现,但是要花10秒钟。
database.tcl
中所述,包含限制的定义,可以增加限制以减少对话的频率。
更新:git prune
将“解决”该问题,因为它将删除那些松散的对象
(git gc
调用git prune
,但默认情况下仅适用于两周以上的松散对象)。
但是,正如OP Michael Donohue在评论中提到的那样:
我确实喜欢将松散的物体放置两周左右的安全性,如果我想回过头来看看一些旧的修订版,那么我真的不喜欢这种解决方案。
我对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
,则该操作将花费一段时间,并且所使用的块和索引节点的数量将显着增加。它们将在“
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
需要在config变量中使用“ now” ,才能实现上述行为)。
您还拥有(来自同一线程):
repack -a -d -l
注意小写字母“ a”。
git-gc
调用以大写字母“ A”重新打包,这是导致无法访问的对象被拆包的原因。小“ a”是给知道自己在做什么并且希望git丢弃不可达对象的人的。
当弹出“松散对象”时,我知道该运行git的垃圾收集器了:
git gc
之后,弹出窗口消失。
更新:(由于TED的建议)
我从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
}
}
}
git gc
,从命令行运行可以解决问题...只是ok
在git gui中单击却无法解决问题...