Mic*_*hue 115 git garbage-collection rebase git-gui git-gc
当我运行'git gui'时,我会得到一个弹出窗口
This repository currently has approximately 1500 loose objects.
然后建议压缩数据库.我以前做过这个,它将松散的对象减少到大约250,但这并不会抑制弹出窗口.再次压缩不会改变松散物体的数量.
我们当前的工作流程需要大量使用'rebase',因为我们正在从Perforce过渡,而Perforce仍然是规范的SCM.一旦Git是规范的SCM,我们将定期进行合并,并且应该大大减轻松散的对象问题.
与此同时,我真的想让这个"有用"的弹出窗口消失.
Esk*_*ola 156
由于没有人有答案,我查看了代码,看看如何删除显示该对话框的代码.我找到了hint_gc做它的程序和它被调用的地方.与此同时,我注意到2011年末添加了一个用于禁用对话框的配置选项.这个变化(git-gui 0.16.0的一部分)在2011-12-14被合并到Git的主线上.
因此,如果您使用Git v1.7.9或更高版本,则可以使用以下命令禁用警告对话框:
git config --global gui.gcwarning false
Run Code Online (Sandbox Code Playgroud)
如果您使用的是旧版本,则可以编辑/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)
Von*_*onC 48
更新: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,则操作将花费相当长的时间,并且所使用的块和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配置变量中使用"now",以便发生上述行为).
你也有(来自同一个线程):
repack -a -d -l
Run Code Online (Sandbox Code Playgroud)
注意小写的'a'.
git-gc使用大写的"A"调用repack,这是导致无法访问的对象被解压缩的原因.小'a',适用于那些知道自己在做什么的人,并希望git只是删除无法访问的对象.
Nic*_*kis 30
当"松散对象"弹出窗口时,我知道是时候运行git的垃圾收集器了:
git gc
Run Code Online (Sandbox Code Playgroud)
之后弹出窗口消失了.
更新:(由于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
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20859 次 |
| 最近记录: |