Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lirec:version_control_guide [2009-02-04 16:26] davegriffithslirec:version_control_guide [2009-02-09 11:01] (current) 81.188.78.24
Line 11: Line 11:
 This usage pattern is common to all revision control systems, languages and types of project. You avoid causing other people problems and get the most out of version control if you make it part of your daily programming routine in this way.  This usage pattern is common to all revision control systems, languages and types of project. You avoid causing other people problems and get the most out of version control if you make it part of your daily programming routine in this way. 
  
-The general idea is that code lives on a remote server, and you keep a local copy of the source on your hard drive. You edit files and compile as normal then 'commit' your changes to the remote server. You also need to periodically update your code to get changes that other people have made. +The general idea is that code lives on a remote server, and you keep a local copy of the source on your hard drive. You edit files and compile as normal then 'commit' your changes to the remote server. You also need to periodically update your code to get changes that other people have made. If someone has changed a file you have also changed and you try to commit it, the revision control system will ask you to update it first.
  
 The smaller the changes, and the more frequently you commit code, the better. This is an example day's work: The smaller the changes, and the more frequently you commit code, the better. This is an example day's work:
Line 41: Line 41:
 =====SVN Basics===== =====SVN Basics=====
  
-I've set up the lirec svn repository with a dummy project called 'sandbox' that you can play with and break to your heart's content. This guide is written for the commandline version of svnand heavily biased towards linux. If you prefer buttons to press, read through this document anyway as the concepts are the same, and then have a look at [[http://tortoisesvn.tigris.org/|Tortoise SVN]] or [[http://subclipse.tigris.org/|SubClipse]] if you use Eclipse or [[http://www.visualsvn.com/|VisualSVN]] if you use VisualStudio. [TODO - update this with a guide for using these systems.]+Firstly install svn using your favorite package manageror get it from here: [[http://subversion.tigris.org/]].
  
-Firstly svn likes to know what editor you like to use so it can launch it to add comments for your code commits. Put this environment variable in your .bashrc (set to editor of your choice, of course):+This guide is written for the commandline version of svn, and heavily biased towards linux. If you prefer buttons to press, read through this document as the concepts are the same, and then have a look at [[http://tortoisesvn.tigris.org/|Tortoise SVN]] or [[http://subclipse.tigris.org/|SubClipse]] if you use Eclipse or [[http://www.visualsvn.com/|VisualSVN]] if you use VisualStudio. 
 + 
 +Firstly svn likes to know what editor you like to use so it can launch it to add comments for your code commits. Put this environment variable in your .bashrc (set to your editor of your choice, of course):
  
 <code>export EDITOR=vi</code> <code>export EDITOR=vi</code>
Line 51: Line 53:
 ====Getting the code==== ====Getting the code====
  
-Firstly go to directory where you want to keep your code and run:+Firstly go to the directory where you want to keep your code and run:
  
-<code>svn checkout --username your-lirec-username http://svn.lirec.eu/</code>+<code>svn co --username=yourlogin https://svn.lirec.eu lirec</code> 
 +Replace "yourlogin" with your lirec [[http://trac.lirec.eu/|trac website]] login. The username is required so svn knows who changed what. Read-only anonymous access is also available. 
 + 
 +This will populate a directory called lirec with all the code. This is called your working copy.
  
-Obviously replacing "your-lirec-username". The username is required to link the changes you make to you. 
  
 ====Make some changes==== ====Make some changes====
  
-cd into 'sandbox' and edit the impressive application you'll find there. When you've saved run:+I've added an example project in svn for you to play with and break without fear. I've laid this out so that the project contains it's own directories called trunk, tags and branches. The code is contained in the trunk directory, the tags and branches are used later to store other versions of the code for this project. I'd recommend this structure for other projects. Look in lirec/example-project/trunk/example-app/ and edit the impressive application you'll find there. When you've saved run:
  
 <code>svn commit</code> <code>svn commit</code>
  
 This will pop up the editor you specified earlier. Add a nice informative message, save the file, and close the editor. If all is well, your change is now sent to the svn server. If, as sometimes happens to me, you realise at this point that you've forgotten something, close the editor without saving - svn will then ask you if you want to abort the commit. This will pop up the editor you specified earlier. Add a nice informative message, save the file, and close the editor. If all is well, your change is now sent to the svn server. If, as sometimes happens to me, you realise at this point that you've forgotten something, close the editor without saving - svn will then ask you if you want to abort the commit.
 +
 +If the editor popping up is annoying for you, then you can also specify the message like this on the command line:
 +<code>svn commit -m "your message"</code>
  
 ====Adding files==== ====Adding files====
Line 82: Line 89:
 <code>svn update</code> <code>svn update</code>
  
-This will merge everyone's changes (if any have been made) into your working directory. If there is a conflict (two people have changed the same line) it will emit an error messageand insert both lines into the source file in question with lots of <<<<<<<<< so it will be obvious what is going on.+This will merge everyone's changes (if any have been made) into your working directory, and print out the status of the files it merges. If there is a conflict (where someone has changed the same line you have) it will put a 'C' next to the filenameeg on the command line: 
 + 
 +<code>  
 +$ svn update 
 +C    GraphNode.cpp 
 +Updated to revision 150. 
 +
 +</code> 
 + 
 +If you have a look at this file, it will indicate the line affected in the following form: 
 + 
 +<code> 
 +<<<<<<< .mine 
 +void GraphNode::ProcessChildren_I_Changed_This(unsigned int bufsize) 
 +======= 
 +void GraphNode::ProcessChildren_I_Changed_This_Too!(unsigned int bufsize) 
 +>>>>>>> .r150 
 +
 + for(vector<GraphNode*>::iterator i=m_ChildNodes.begin();  
 + i!=m_ChildNodes.end(); ++i) 
 +
 + if (*i!=NULL) 
 +
 + (*i)->Process(bufsize); 
 +
 +
 +
 +</code> 
 + 
 +You can then choose which line to use, save and commit the change.
  
 ====Diffing==== ====Diffing====
Line 92: Line 128:
 This will diff the entire sourcecode, and print out a list of changes it found. You can also specify individual files to diff too. There are utilities which read the output of this command and display it graphically if it's helpful, but you don't generally need them for small changes. This will diff the entire sourcecode, and print out a list of changes it found. You can also specify individual files to diff too. There are utilities which read the output of this command and display it graphically if it's helpful, but you don't generally need them for small changes.
  
 +======More Information======
 +
 +  * "Version Control with Subversion" A complete online book > http://svnbook.red-bean.com/
  
  • lirec/version_control_guide.1233764805.txt.gz
  • Last modified: 2009-02-04 16:26
  • by davegriffiths