threads / discuss / 30264

git-push sent too many objects

Subject: git-push sent too many objects

## tl;dr

5 messages between Apr 17, 2012 and Apr 27, 2012.

replies: 4people: 3as markdown or json

Mark Jason Dominus· Apr 17, 2012, 16:53 UTC · lore

I had a master ref, pointing to commit 231e284, which I branched to make a "coupon" ref. My remote, "origin" had a copy of commit 231e284.

I modified one file and committed it on "coupon", yielding commit 03b6489. Then I pushed coupon to origin. I expected that git-push would send about five objects, but instead it reported sending 1,315.

Command output is pasted at http://nopaste.info/a866bb00e0.html . You can verify that:

1. I pushed only coupon, not any other ref.
2. origin already had a copy of coupon's predecessor commit, 231e284.
3. 03b6489 was identical to 231e284 except for changes in one file.
4. I was not doing anything obviously strange.
What happened here?  Why did git-push send 1,315 objects instead of 5?
Mark Jason Dominus 	  			                 mjd@plover.com
Shawn Pearce· Apr 18, 2012, 07:59 UTC · re: Mark Jason Dominus · lore

Re: git-push sent too many objects

On Tue, Apr 17, 2012 at 09:53, Mark Jason Dominus <mjd@plover.com> wrote:
Show 18 quoted lines
>
> I had a master ref, pointing to commit 231e284, which I branched to
> make a "coupon" ref.  My remote, "origin" had a copy of commit
> 231e284.
>
> I modified one file and committed it on "coupon", yielding commit
> 03b6489. Then I pushed coupon to origin.  I expected that git-push
> would send about five objects, but instead it reported sending 1,315.
>
> Command output is pasted at http://nopaste.info/a866bb00e0.html .
> You can verify that:
>
> 1. I pushed only coupon, not any other ref.
> 2. origin already had a copy of coupon's predecessor commit, 231e284.
> 3. 03b6489 was identical to 231e284 except for changes in one file.
> 4. I was not doing anything obviously strange.
>
> What happened here?  Why did git-push send 1,315 objects instead of 5?
Is it possible someone else modified the repository at the same time?

We see this happen when the remote no longer has a branch pointing exactly at commit 231e284, because another user (or you in another shell?) had pushed a new commit to that branch before you pushed this new coupon branch. In these sorts of cases your Git client can't accurately determine what the server has and does not have, so it errs on the conservative side and sends a lot more than it probably needed to.

Mark Jason Dominus· Apr 18, 2012, 14:22 UTC · re: Shawn Pearce · lore

Re: git-push sent too many objects

Shawn Pearce:
> On Tue, Apr 17, 2012 at 09:53, Mark Jason Dominus <mjd@plover.com> wrote:
> > What happened here? =A0Why did git-push send 1,315 objects instead of 5?
> 
> Is it possible someone else modified the repository at the same time?

It is extremely unlikely. This repository is controlled by gitolite and I am the only person who has push access to it. Also, although my paste doesn't show it, the repository's master reference had not moved.

I should have mentioned my git version in my original message: it is 1.7.10.rc0.1.g6fd18 .

Jeff King· Apr 26, 2012, 13:07 UTC · re: Mark Jason Dominus · lore

Re: git-push sent too many objects

On Wed, Apr 18, 2012 at 10:22:26AM -0400, Mark Jason Dominus wrote:
Show 10 quoted lines
> Shawn Pearce:
> > On Tue, Apr 17, 2012 at 09:53, Mark Jason Dominus <mjd@plover.com> wrote:
> > > What happened here? =A0Why did git-push send 1,315 objects instead of 5?
> > 
> > Is it possible someone else modified the repository at the same time?
> 
> It is extremely unlikely. This repository is controlled by gitolite
> and I am the only person who has push access to it. Also, although my
> paste doesn't show it, the repository's master reference had not
> moved.

Is the repository public? I can't reproduce the issue on a trivial test case, but it might be possible to create the original state of the client and server repos with judicious use of "reset" and "prune". If we can get a reliable case, then running with GIT_TRACE_PACKET will show the commit negotiation that we go through.

-Peff
Mark Jason Dominus· Apr 27, 2012, 00:41 UTC · re: Jeff King · lore

Re: git-push sent too many objects

Jeff King:
> Is the repository public? I can't reproduce the issue on a trivial test
> case, but it might be possible to create the original state of the
> client and server repos with judicious use of "reset" and "prune".

The repository has been heavily used since I made the report. If I notice the same behavior againb, I will try to capture the repo state for investigation.

← back to recent threads