[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