threads / discuss / 16871

Strange large push operation.

Subject: Strange large push operation.

## tl;dr

2 messages between Dec 26, 2008 and Dec 26, 2008.

replies: 1people: 2as markdown or json

Brice Figureau· Dec 26, 2008, 12:23 UTC · lore
Hi,

I'm a git user since about a year, but I can't say I'm really familiar with its internals. I am using git v 1.5.6.5

I have a quite large bare remote repository (around 1GiB, about 86k objects), and I have a clone on my development computer (which was cloned a long time ago). I use ssh to push/pull between those repositories.

About 2 months ago, we created a remote branch (let's call it 'branch') and pursued development on this branch and also on master, with a few regular merge points from master to 'branch'.

Two days ago, I wanted to start developping a new feature, and as such created a local branch from this branch, which we'll call 'newbranch'. I cherrypicked a couple of old (4 months) commits that were in another local branch, and then added more small commits (about 10 sloc of changes on it) on top of these.

Then I wanted to push this newbranch as a remote branch with: $ git push origin newbranch:refs/heads/newbranch

and obtained the following output: Counting objects: 12767, done. Compressing objects: 100% (3816/3816), done. writing objects: 8% (935/11682), 2.40 MiB | 324 KiB/s ^C

I stopped the push because I don't get why there are so much objects to 
send while the diff between newbranch and branch is only 5 small commits 
  (and it obviously wants to push a large part of the history).

Is there a way to check what objects are sent to origin and why? What could be the cause of the issue? What's wrong with those repositories?

I tried to git gc both repositories, I also git fsck both repositories (and found 5 unreachables objects in the local one, should I care?). I also upgraded the remote git to latest 1.6.0.6 but this didn't change anything. I also tried --thin but that didn't change anything.

So what should I do to push only the changes between branch and newbranch?

Many thanks for any answer, -- Brice Figureau

Sitaram Chamarty· Dec 26, 2008, 14:48 UTC · re: Brice Figureau · lore

Re: Strange large push operation.

On 2008-12-26, Brice Figureau <brice+git@daysofwonder.com> wrote:
> Then I wanted to push this newbranch as a remote branch with:
> $ git push origin newbranch:refs/heads/newbranch
I'd have just said "git push origin newbranch" :-)
Show 5 quoted lines
> and obtained the following output:
> Counting objects: 12767, done.
> Compressing objects: 100% (3816/3816), done.
> writing objects:   8% (935/11682), 2.40 MiB | 324 KiB/s
> ^C
> I stopped the push because I don't get why there are so much objects to 
> send while the diff between newbranch and branch is only 5 small commits 
>   (and it obviously wants to push a large part of the history).

Yes but you didn't actually say that the master has "branch" -- perhaps it isn't as uptodate as you thought it was...? Or perhaps there was a rebase or something that changed a *lot* of stuff.

Try "git log -n 1 branch" on both machines to see if they point to the same hash.

[Additionally, I'm not really sure if that progress is a worst case estimate or a real estimate...]

> Is there a way to check what objects are sent to origin and why?

My all-time favourite git command is "bundle" [which should tell you I work a lot with disconnected repos!]

Try "git bundle create /tmp/temp.bdl branch..newbranch" then see how big that temp file is. That'll be about what goes to the other side (assuming the other side has the same hash for "branch").

You could even take it to the other side and do the
following:
    git ls-remote temp.bdl  # shows refs in bundle
    git fetch temp.bdl one-of-the-refs-in-the-bundle
    git merge FETCH_HEAD # merge it into current branch
> What could be the cause of the issue?
can't say.  Try the following commands also to get a birds
eye view of the various branches on both sides
    git fetch   # update your idea of what's on remote
    git branch -a -v
I also like
    git log --graph --pretty=oneline --abbrev-commit --decorate --all
which I've aliased to "lg"
> (and found 5 unreachables objects in the local one, should I care?). I 
Nope.  Lots of reasons to have unreachable objects...

← back to recent threads