Git - 为什么我的两个 Git 克隆对象的数量不同?
Git - why does the number of objects differ between my two Git clones?
我有两个从同一个远程克隆的本地存储库。我为所有分支 提取了对两个本地存储库的所有更改,但是调用 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)
我的两个本地存储库的对象数量不应该相同吗?(因为它们都是最新的?)
首先,您应该通过 运行ning git for-each-ref
(或类似的)检查每个存储库中的引用。一些引用,包括 stash 中的引用,将保留可能只出现在一个存储库中的对象。
除此之外,还有一个 "active" git 存储库("active" 我的意思是您可以在其中编辑 git add
和 git commit
偶尔 git rebase
、git reset
、git stash
等等)累积了一个数量——可能是一个非常大的数量——"deleted, but not yet expired" 次提交。 (它也会累积已删除和过期的提交,但是您在上面提到了 git gc
,并且实际上删除了这些,因此它们不再对对象计数有贡献。)
如果你过期了所有的 reflogs 并且 p运行e 一切(注意,这是移除你所有的安全带和安全带,把你的高线平衡杆扔到一边,抛弃所有的救生艇,并打开外气闸1 ...即,不要一时兴起这样做):
git reflog expire --expire=now --expire-unreachable=now --all
git prune --expire=now
然后运行git gc
,你应该得到最小数量的对象。 (如果两个存储库都处于活动状态,您可能必须对两者都执行此操作。)
1显然,您是在连接在汽车上的高架钢丝上执行此操作,该汽车在 space 栖息地的海洋上航行的船上行驶。哇。 :-)
我有两个从同一个远程克隆的本地存储库。我为所有分支 提取了对两个本地存储库的所有更改,但是调用 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)
我的两个本地存储库的对象数量不应该相同吗?(因为它们都是最新的?)
首先,您应该通过 运行ning git for-each-ref
(或类似的)检查每个存储库中的引用。一些引用,包括 stash 中的引用,将保留可能只出现在一个存储库中的对象。
除此之外,还有一个 "active" git 存储库("active" 我的意思是您可以在其中编辑 git add
和 git commit
偶尔 git rebase
、git reset
、git stash
等等)累积了一个数量——可能是一个非常大的数量——"deleted, but not yet expired" 次提交。 (它也会累积已删除和过期的提交,但是您在上面提到了 git gc
,并且实际上删除了这些,因此它们不再对对象计数有贡献。)
如果你过期了所有的 reflogs 并且 p运行e 一切(注意,这是移除你所有的安全带和安全带,把你的高线平衡杆扔到一边,抛弃所有的救生艇,并打开外气闸1 ...即,不要一时兴起这样做):
git reflog expire --expire=now --expire-unreachable=now --all
git prune --expire=now
然后运行git gc
,你应该得到最小数量的对象。 (如果两个存储库都处于活动状态,您可能必须对两者都执行此操作。)
1显然,您是在连接在汽车上的高架钢丝上执行此操作,该汽车在 space 栖息地的海洋上航行的船上行驶。哇。 :-)