我使用的是本地Git仓库,该仓库使用我们公司的SVN仓库作为来源。
我经常收到以下消息:
错误:上一次gc运行报告以下内容。请更正根本原因并删除.git / gc.log。 在删除文件之前,不会执行自动清理。
警告:有太多无法到达的松散物品;运行“ git prune”将其删除。
实际上,删除.git/gc.loc
并调用git prune
可解决此问题。
但是,在VonC对answer的How to skip "Loose Object" popup when running 'git gui'至Michael Donohue的评论中,Michael Donohue指出:
[...]我喜欢将松散的物体放置两周的安全性,如果我想回过头来看看一些旧版本[...]
在answer(也由VonC)到Whole team gets 'too many unreachable loose objects' messages中–一个关于gitlab从SVN移到git后带有松散对象的问题–由{{3} },jlengrand写道:
- 跑了git prune并祈祷它没有破坏事情(幸运的是它没有破坏)
因此,我认为VonC是一种危险的操作,它会破坏事物。
为了安全处理“太多无法到达的松散物体”消息,我有以下问题:
是什么原因导致这些松散的对象(有关无法访问的对象,请参见git prune
;有关git对象和哈希的内部工作原理,请参见man git-fsck
的torek; { {1}}和git gc
—由answer到What does git do when we do : git gc - git prune)?
只是Lyes CHIOUKH:
这确实会导致松散的提交吗?
会导致所有松散的提交吗(我还会对SVN中尚未使用的东西(例如git prune
,git repack
,git stash
和git cherry-pick
进行一些git树操作)?>
我什么时候需要这些松散的物品?
在我的个人git repo上使用git svn push
有什么好的政策?
答案 0 :(得分:1)
在Git中,所有个新对象开始都是“松散”对象。 (我根本不清楚为什么您会收到太多错误。)
有一个管道命令git hash-object
,可以创建任何类型的新对象。其他命令实际上是根据git hash-object
内置所需的对象类型的,例如,git write-tree
使用索引创建了一些树对象,而git commit-tree
创建了一个提交对象。使用git add
为每个添加的文件创建一个松散的对象;显然在某些情况下,这可能是很多对象。
因此,创建大量的松散对象非常容易,但是通常,执行 的Git命令,还要运行git gc --auto
来打包 他们自动。一旦安全地将它们收拾好,git prune
会除去松散的东西:
因此,我认为
git prune
是一个危险的操作,它会破坏事物。
这并不特别危险,只要您在不执行其他任何操作的情况下运行它即可(即,不运行任何可能正在主动创建或创建松散对象的Git命令)。添加--expire 14.days.ago
使其保留最近创建的松散对象,这就是git gc
所做的-好吧,它使用您的gc.pruneExpire
设置,但是默认为14.days.ago
。
如果您正在积极研究Git本身,并将错误引入打包程序中,那么然后会很危险。 :-)基本上,每次删除冗余时,都需要确保它是实际上是冗余的。