NewsFeaturesDownloadsDevelopmentSupportAbout Us

Merging with Subversion

From LifeType Wiki

Question

I am using SVN now. But I still don't know how to merge my code with the latest plog code. For example, I checked out plog 1.0.2 and control it by SVN, then I added some of my code to it, so the question is how can I merge my new files with the newly updated plog1.0.2 got from plogworld?

Answer

It works best if you have the code somewhere that it doesn't matter if the server is down for a bit, but if you do it often, and pay attention to what changes are going to affect you, you can do it on a production server.

'svn status -u' will show what you have modified locally, and what files have been modified remotely.

If there aren't lines that were modified locally and remotely, presumably, there shouldn't be any problems, and you just run 'svn update', and all of the code will be merged (and then erase wizard.php quick...)

The potential for problems occur when you have modified something that someone else modified. subversion will do a decent job of merging them together, but if you modified the same line, it will fail, and if you modified something really close to another line, it probably won't be able to figure out the right thing to do.

In that case, during the update, instead of outputting 'G' (meaning merGed) it will output 'C' for conflict. It will then create a couple files:

  index.php     <- merged file, with both changes, split by <<< and >>> and you manually edit it.
  index.php.r123   <- latest remote file
  index.php.r122   <- version that your changes were based off of.
  index.php.mine   <- your file

You decide what to do:

  • merge the changes manually (just edit index.php)
  • accept the new changes and throw away your own (move index.r123 to index.php)
  • keep your changes (move index.php.mine to index.php)

When you are happy with everything, run 'svn resolved index.php' and subversion will clean up the old files.

I usually run a 'svn update -u', and see if there will be any conflicts. If there have been lots of updates, sometimes I will run 'svn update class' and then 'svn update templates', and then a root directory svn update, because the wizard.php will be updated first, and you don't want that hanging around very long.

The more often you do the updates, the easier the merging is.