2017-11-17 226 views

回答

2

Git最终可能会真正销毁一些对象,包括未提交的提交;但它可能不会。为了达到这个目的,请仔细阅读。

最直接的控制可通过git prunegit repackgit prune-packed获得。运行git gc运行所有这些,以及更多。假设git prune或甚至是git gc --prune=now将会诀窍的主要问题是现在无法访问的对象可能是打包的

通常,您应该首先终止reflogs,因为删除过期的reflog条目可能会导致对象无法访问。使用git gc以相对安全的方式以正确的顺序完成所有这些工作:首先过滤reflogs,然后修剪(仔细地),然后重新打包,然后修剪打包。 prune步骤宽松未参考的对象自己过期。 之后,其他步骤重新包装正在使用的旧对象,并删除刚刚打包的对象。

这一系列事件就是为什么我们需要git repack -d或甚至-ad,其次是git prune-packed。但是,如果某些包标有.keep文件,则这些包将保留,如果包含其他未引用的对象,则这些对象也将保留。


由于多个GIT中的命令可以并行地运行,这是明智的提供,在此期间未引用的对象住,在情况下,他们将要成为引用的宽限期。请注意,它是git gc,它插入默认的14天宽限期; git prune默认为--expire=now而不是--expire=2.weeks.ago。这给Git命令336小时完成他们的工作和水泥参考:例如,git commit运行git write-tree其次是git commit-tree,并且此树和提交都未被引用,直到git commit也更新当前分支名称。通常情况下,整个过程只需要几毫秒,因此336小时应该足够的时间。

1

git-prune有删除孤儿对象的明确任务声明。

相关问题