我有两个从同一个遥控器克隆的本地存储库。我将对所有分支的所有更改都拉到了本地存储库,但是调用git gc
时显示的对象数量(或git pull
)不同...
这是否意味着两个存储库不同步?
'in-pack'对象的数量由git count-objects -v
显示:
count: 0
size: 0
in-pack: <THIS NUMBER HERE>
packs: 1
size-pack: <a size>
prune-packable: 0
garbage: 0
size-garbage: 0
或git gc
Counting objects: <HERE>, done.
Delta compression using up to 6 threads.
Compressing objects: 100% (yyyy/yyyy), done.
Writing objects: 100% (<HERE>/<HERE>), done.
Total <HERE> (delta xxxx), reused <HERE> (delta zzzz)
我的两个本地存储库的对象数量是否应该相同?(因为它们都是最新的?)
答案 0 :(得分:2)
首先,您应该通过在每个存储库中运行git for-each-ref
(或类似)来检查您拥有的引用。某些引用(包括stash中的引用)将保留可能仅出现在一个存储库中的对象。
git add
和git commit
以及偶尔git rebase
,git reset
,git stash
,等等)累积一个数字 - 可能是一个非常大数量的&#34;已删除,但尚未过期&#34;提交。 (它也会累积已删除和过期的提交,但您在上面提到了git gc
,并且实际上删除了这些提交,因此它们不再对对象计数做出贡献。)
如果你过期所有reflogs并修剪所有东西(注意,这是移除你所有的安全带和安全带,抛弃你的高线平衡杆,抛弃所有救生艇,并打开外部气闸 1 ...即,不要随心所欲地这样做:
git reflog expire --expire=now --expire-unreachable=now --all
git prune --expire=now
然后运行git gc
,您应该获得最少数量的对象。 (如果两个存储库都处于活动状态,则可能必须在两者上执行此操作。)
1 显然,你是在一条高空的电线上做这件事的,这条电线是在一艘在太空栖息地内的海洋上航行的船上驾驶的。哇。 : - )