>>> On 9 Mar 2012, Timothy Pearson told this: >>>> UPDATE: GIT is actually smart enough it seems, but it is taking many >>>> hours >>>> for it to merge everything correctly. >>> >>> This makes no sense, I'm afraid. git merging is done on the client >>> side, >>> always, and at pull time, never at push time (really at 'git merge' >>> time, which is the second of two steps carried out by 'git pull'). >>> >>> Pushing never does a merge of any kind. You can only push on top of a >>> remote branch containing content you haven't pulled if you do a push >>> -f, >>> and that *deletes* the content you haven't pulled (hence the need for a >>> -f 'force' argument). >>> >>> -- >>> NULL && (void) >> >> Not quite. I recognized some problems in GIT that could cause issues, >> so >> I wrote "babysitting" software that constantly combs through the GIT >> tree, >> making sure that all submodule references are up to date with the latest >> code and similar housekeeping tasks. That babysitting software can and >> does trigger commits to the tree, and it is these fixup commits that are >> taking a long time to carry out. >> >> Whatever Darrell did would have effectively wiped out my changes if it >> weren't for the babysitting code. :-) >> >> Tim > > Oh, and I forgot to mention: you can in fact push to a tree that contains > content that you have not pulled, and do it without deleting anything. :-) > I and others have done it many times, and you can see the results here: > http://git.trinitydesktop.org/cgit/tde-packaging/log/ > > Each one of those "Merge branch 'master' of > http://scm.trinitydesktop.org/scm/git/tde-packaging" was initiated and > computed on the server, not on the client, as a direct result of pushing > to a tree that was newer on the server than it was on the client. This is > actually one of GIT's strengths; the fact that multiple developers can > work on their own local branches, and then GIT can merge them all together > in a project's master repository at a later date. > > Tim Ah, nevermind, it looks like those merges are done transparently on the client side. Sorry for the noise; GIT is a very complex system that I do not have a complete grasp of (and I suspect most people don't either). :-) So that leaves the main server resources being utilized for: 1.) Submodule babysitting, due to GIT not having a "real" remote submodule feature like SVN does 2.) Patchset generation Both of those are CPU and disk intensive operations. Tim