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]

Reply via email to