[svk-devel] Need help merging two SVN repostories with SVK

Christophe Guillon guillonc at free.fr
Thu Oct 11 15:33:42 EDT 2007


Dear "dev null",

I use the scenario 2 (* see below) that you mention to mirror two distant repositories that are contributed on both side as you describe.
It works.
But... there are some problems that you may want to be aware of. In particular I experienced:
1. problem with sync, some repositories revisions simply can't be sync due to pending SVK/SVN:Mirror problems. This is a problem that may block you to mirror the entire repository history. It's ok until you see the problem.
2. problem with smerge. On some particular scenarios, for instance a directory copy followed by a deletion of some files/directory inthe same commit, smerge does not properly replay the commit. This is silent, the symptom is that the two repositories diverged, and on the //secondary you have "undeleted" files for instance.
3. when you have conflicts on a merge, you have to resolve it with a lot of care as every of your commit will then be mirror back to the other side, potentially creating conflicts again, in this case it is very "easy" to make the repositories diverge (i.e. you end with apparently synchronized repositories, but the files are different).
 
Thus as soon as you use SVK to mirror back and forth repositories, you end up with  repositories that are not equivalent and sometime you can have hard time correcting things. 

If you have a lot of developements on both side, you should be aware that you can not fully guarantee an equivalence of the repositories.
Though, if you have for instance most branch creations and merge activity on one side only, the //primary for instance, it is ok. It is the way I use it.

For the scenario you describe, and in particular point 4, I use a slightly different mechanism:
>4) There is problem when SVK merges code changes from //secondary back to //primary.  It merge every revision starting with revision 2.  The process took couple >hours and all of them are empty merges except for the last two.
>     svk sync //primary
>    svk sync //secondary
>   svk smerge --log --incremental --baseless //secondary //primary
I do not use  --baseless (unless for the very first smerge). I guess it would avoid you the first batch of empty merges. 
Thus after the first synchro from //primary to //secondary and then from //secondary to //primary, I use:
update //secondary:
  svk sync //primary
  svk sync //secondary
  svk smerge --incremental //primary //secondary

update //primary:
 svk sync //primary
 svk sync //secondary
 svk smerge --incremental //secondary //primary

    Regards,

    -- C.Guillon

  ----- Original Message ----- 
  From: dev null 
  To: svk-devel at bestpractical.com 
  Sent: Thursday, October 04, 2007 8:34 PM
  Subject: [svk-devel] Need help merging two SVN repostories with SVK


  Hi,

  I need help to figure out the proper way to setup SVK to keep two SVN repositories in sync.  Currently, we have one group of developers working from the primary SVN repository using SVN clients.  There will be another group of developers that will be working on the same project at another location and they will prefer to use SVN clients too.  Therefore, my goal is to maintain two identical SVN repositories with the help of SVK.  I've been testing the following setup scenarios:

  Scenario #1:
  1) First location hosts primary SVN repository (svn://primary-repos/)
  2) Second location mirrors the primary repository with SVK and makes a local copy.
      svk mirror svn://primary-repos/ //mirror
      svk sync //mirror
      svk cp -m "Create a local branch" //mirror //local
  3) Developers at the second location work on SVK branch(//local) using SVN clients.  But then according to SVKTool webpage, it indicates that there are consequences when using SVN clients on a SVK depot.  Therefore this scenario will not work.

  Scenario #2:
  1) Second location hosts the secondary SVN repository (svn://secondary-repos/).
  2) First location hosts the primary SVN repository (svn://primary-repos/)  On the same server, SVK mirrors the primary repository and the secondary repository.
      svk mirror svn://primary-repos/ //primary
      svk sync //primary            # This repos contains all the source codes
      svk mirror svn://secondary-repos/ //secondary
      svk sync //secondary        # This repos is completely empty at the moment
  3) SVK merges the code from //primary to //secondary and it went well.  The primary SVN repos and the secondary SVN repos are indentical now.
      svk smerge --log --incremental --baseless //primary //secondary
  4) There is problem when SVK merges code changes from //secondary back to //primary.  It merge every revision starting with revision 2.  The process took couple hours and all of them are empty merges except for the last two.
      svk sync //primary
      svk sync //secondary
      svk smerge --log --incremental --baseless //secondary //primary

  Is scenario #2 the proper setup for the job? If so, is there a way or svk command that can make merging between two mirrors happen faster? because i'm thinking of using SVN hooks to trigger SVK merging on every user commit.  Any advice will be greatly appreciated and i'm so sorry the long post.

  Thanks,
  Eric


------------------------------------------------------------------------------
  Pinpoint customers who are looking for what you sell. 


------------------------------------------------------------------------------


  _______________________________________________
  svk-devel mailing list
  svk-devel at bestpractical.com
  http://lists.bestpractical.com/cgi-bin/mailman/listinfo/svk-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.bestpractical.com/pipermail/svk-devel/attachments/20071011/c4ce8a7d/attachment.htm


More information about the svk-devel mailing list