Hi Guido, there is no reasonable provision to reapply the diffs (at least not with a three way merge) with SVN. Also, the cost models are differently for DSCMs and a central system as subversion. Disk space on the server isn't really a point with SVN but a huge one for DSCM as all history lives locally.
Please note that the big diffs appear *only* on paths that are representing CWSs. Once a CWS is integrated they will only eat up disk space on server but do have any influence on performance. When we switch to a DSCM the big diffs will not inflate the "master" repository size at all. I think SVN 1.6 which has been released a few days ago implements a smarter merge algorithm for the rebase operation which will reduce this kind overhead. Have not yet had a look at it (I think it requires a server update) Heiner Guido Ostkamp wrote: > Hello, > > out of personal interest I created a mirror of the complete OOO repo on > my local system using 'svnsync synchronize'. > > I noticed that within the newer SVN commits there are quite a number of > very huge changes which turned out to be 'CWS rebase' commits in most > cases. > > Being familiar with DVCS like 'git' I am wondering if 'CWS rebase' is > implemented efficiently. > > The current implementation looks like if when a 'rebase' is attempted, > all changes which have happened in the mainline (a.k.a. trunk) since the > branch creation/rebase are copied file by file into the CWS directory. > This seems to be a very expensive operation compared to the > cheap/lightweight creation of a branch. > > The way a DVCS like 'git' handles this is different. At first the > changes in the branch since branch creation are determined. Then the > branch is more or less recreated on top at the new branch point and the > former branch changes are reapplied. > > In SVN terms I think this should look like > > # initial CWS creation > svn cp trunk cws/c1 # at e.g. r200000 > <hack inside c1> > svn commit # do the branch changes in multiple commits > ... # meanwhile trunk is also changed a lot > # rebase > <determine diffs between tr...@r200000 and current cws/c1> > svn rm cws/c1 # delete branch > svn cp trunk cws/c1 # recreate branch at e.g. r210000 > <re-apply diffs> > svn commit > > What are the reasons for doing the rebase this expensive way? > > Best regards > > Guido > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
