我在使用git仓库时遇到了问题。最近几天,每当我向服务器进行推送时都会出现以下信息:“为了获得最佳性能而自动压缩仓库”,并且似乎无法消失并返回shell。
我还尝试切换到新分支,然后对以前的分支进行变基,再使用 git gc
命令删除未使用的历史记录对象,但仍然出现上述信息。请告诉我我的仓库发生了什么问题。
我在使用git仓库时遇到了问题。最近几天,每当我向服务器进行推送时都会出现以下信息:“为了获得最佳性能而自动压缩仓库”,并且似乎无法消失并返回shell。
我还尝试切换到新分支,然后对以前的分支进行变基,再使用 git gc
命令删除未使用的历史记录对象,但仍然出现上述信息。请告诉我我的仓库发生了什么问题。
git gc --auto
。如果有足够的松散对象(默认情况下至少为6700个),然后它将调用git repack -d -l
来打包它们。如果有太多单独的 pack,则还会将它们重新打包成一个 Pack。git gc --auto
定期打包它们。
如果你让 Git 完成重新打包,则一段时间内不会再次发生。 这确实需要一些时间,特别是如果你有很多大型二进制对象,但如果它触发了,那么它很可能会显着减少存储库占用的磁盘空间。如果你真的不想让它发生,可以更改配置参数gc.auto
。如果你将其增加到远远大于6700的值,它将更不频繁地发生,但当它发生时需要更长时间。如果你将其减少,则仍然必须完成当前的重新打包,但随后会更频繁地发生并更快地完成。如果你将其设置为 0,则会禁用自动重新打包。man git-gc
(在--auto
下)和man git-config
(在gc.auto
下)。虽然Jefroni是对的,有时候自动打包只需要时间完成,但是如果像OP描述的那样自动打包消息在多个日子里持续存在,git清理掉悬空对象的功能可能失效了,正如这个问题所描述的。
为了查看悬空对象是否触发了关于自动打包正在进行的持续消息,请尝试运行git fsck
。如果您得到了一个长列表的悬空提交,可以使用以下命令进行清理:
git gc --prune=now
当自动打包消息在单次拉取后未消失时,我通常需要每2-3个月在我的存储库上运行此命令。
git pull
时都会收到提示信息,而 fsck
确实显示了大量的悬空提交。 - Jörn Zaefferergit gc --prune=now
,请确保所有的IDE、Git bash和Git UI程序都已关闭。否则,它将无法工作,因为资源/文件被“锁定”。我曾经因为忘记关闭我的GitKraken工具而遇到过这种情况。 - Han K禁用一个项目:
cd your_project_dir
git config gc.auto 0
要全局禁用:
git config --global gc.auto 0
Git正在运行git-repack命令,将许多对象(即文件、提交和树)打包成一个包文件。Git有时会这样做,当启发式算法指出可能节省空间时(一个包文件包含压缩的对象增量,而objects / 目录中的每个文件都包含压缩的完整文件内容)。
git gc --auto
步骤更加高效。pclouds
)提交的提交 62aad18。
gc --auto
: 不要在后台锁定引用9f673f9 (
gc
: 在配置选项中运行--auto以减少用户等待时间-2014年2月8日,Git 2.0.0) 将 "gc --auto
" 放在后台以减少用户的等待时间。
垃圾回收的一部分是打包引用和修剪 reflog。这些需要锁定某些引用,并可能会中止尝试锁定相同引用的其他进程。如果在脚本的中间触发
gc --auto
,则 gc 在后台持有锁可能会导致脚本失败,这在之前是不可能发生的。9f673f9。继续在前台运行
pack-refs
和"reflog --prune
"以停止并行引用更新。剩下的后台操作(重新打包、修剪和rerere)不应影响正在运行的git进程。
Git 2.22(2019年第二季度)进一步优化了git gc
。
git config gc.autoDetach
将禁用此行为。 - Bachsau