SteGriff

Blog

Next & Previous

Merging across seperate repositories in SVN

We have a client who has the same product in two repositories; one repository is maintained for the main site, and the other is for developing a subset of backend features. Nevertheless, trunk changes from the site repository need to be merged across into the other. Ideally these would be set up as branch and trunk of the same repo, but sometimes Life’s Like That. I’m going to refer to them as the Main and Special repositories.

1. Find out how far behind is Special

Go into the Special directory and open the SVN log. The revision numbers won’t match those in the other repo, so look at the dates. Find the date and time that the Main changes were last merged in (or when the repository was created if there have been no merges).

Now go to Main’s log, find the number of the first revision that came after the date you found, and write it down.

Example

So, say the Special was last synced on 10th December at 14:30, and in Main, there were two commits that day:

2512	stephen.griffiths	10 December 2016 15:44	Master template style
2511	stephen.griffiths	10 December 2016 09:10	Fix logger lines null check

We know that 2511 was included in the previous merge (because 2511 happened before 14:30) but 2512 was not. So we write down 2512.

2. Create a patch for the elapsed time period

The svn diff command (which is used to create patches) isn’t allowed to diff across two separate repositories. But fortunately, both Main and Special come from the same heritage, so we can use Main as the authoritative history.

Open an Admin Command Prompt (doesn’t matter where) and run (with your repo URLs):

svn diff http://server.mysite.co.uk:8080/svn/MainProject/trunk@2512 http://server.mysite.co.uk:8080/svn/MainProject/trunk > sync-trunk.patch

This will take all the changes between rev 2512 and the present day (HEAD) and put them in a new patch file, sync-trunk.patch.

3. Apply the patch in your Special working copy

Open the patch file using TortoiseSVN Apply Patch (or whatever you normally use to apply patches), select your Special trunk working copy folder, and apply the patch.

You can now review any failed hunks (hopefully few/none), and then commit the changes to the Special repository.

Hope it works for you :)