Transcript Slide 1
Version control with Subversion how to set it up, use it, and save your sanity Introduction My life reduced to bullets • Designing / developing sites since 1996 • Independent consultant • Using ColdFusion since version 5 • Using Fusebox since version 2 • Using XHTML/CSS since 2003 • Using Subversion off/on October 2006 – More off than on… Version control in a nutshell • Central Repository of all code and changes made to it by anyone over time • Developers get the latest copy, edit, and “check it back in” to the repository • Changes made to the same file by different developers are merged • If need be, you can go back to a previous version of the code Why version control at all? • A “Time Machine” for code • Accounts for all changes • Makes multi-version management easier • The ultimate “CYA” tool Source control vs. version control • Source Code Management – More of a “total solution” that includes things like bug tracking, Wiki • Version Control / Revision Control – This is what Subversion does Not just for code, by the way… • Design comps • Project documentation • Recipes • Drafts of memos, letters, novels • Anything you want to revise over time Not just for teams, by the way • I use it for my own stuff • Revert to the previous version if I screw up • Not that I screw up • Yep. • What, what are you looking at? Version Control Concepts The “steps” of version control Version Control Steps • Create a repository of project files (code) • CHECKOUT a working copy of the code to working directory • Edit code Version Control Steps • COMMIT your changes back into the repository • If someone else changed the same file as you, resolve differences to the changed files as needed (MERGE) • UPDATE your working copy before continuing work the next time Version control models File sharing: the problem to avoid Lock-Modify-Unlock Copy-Modify-Merge Copy-Modify-Merge (cont’d) Options A quick look at what else is out there… Microsoft Visual Source Safe • Microsoft doesn’t use this • Can cause files to become lost, corrupted • Slow, not designed to work over internet • $500/developer (?) Concurrent Versioning System (CVS) • Released in 1986 • Free, open source • Relatively easy to use • Designed for a team environment CVS Limitations • Cannot move/rename files in CVS • Directory move/changes aren’t versioned • Poor unicode support – Doesn’t support non-ASCII characters well • No versioning of symbolic links • Binary files are saved in their entirety Other commercial VCS’s • Perforce – Free for up to 2 users; OSS – $800 per developer seat • SourceHaven – $295/developer seat Subversion About Subversion • Designed to replace CVS • Began in 2000 • Self-hosting in 2001 • 1.0 in Feb 2004 • Current version: 1.4.5 Subversion benefits • Directory versioning • Filename versioning • Atomic commits – all succeed or all fail • Metadata – keywords/comment • Networking support Subversion benefits (cont’d) • Delta compression – Saves differences between files (even binary) • Branching / Tagging • Well-defined API (e.g., Trac, TortoiseSVN, SCPlugin) • Free! Installation Setting it up… Access options SVNServe Daemon • Easy, quick install – 1-click setup (ok, it takes more than 1 click) • All projects under one repository – You can create sub projects under this main repository, but it’s less elegant than separate repositories • Listens on nonstandard port (3690) – Across internet, there could be a firewall issue SVNServe Daemon / 1-click setup • Ideal if you want to get up and running quick to play with Subversion • Not ideal if you want to version more than one project and/or work across a network Apache, WebDAV/DeltaV • Allows you to work with an SVN repository anywhere in the world • Uses http:// or https:// on port 80 – no firewall issues! • Use authentication to restrict to username/password holders Subversion Repository My Repository Physical repository Virtual repository Revision history One repository, multiple projects index.cfm dsp_header.cfm dsp_footer.cfm index.cfm dsp_header.cfm dsp_footer.cfm One repository for each project index.cfm dsp_header.cfm dsp_footer.cfm index.cfm dsp_header.cfm dsp_footer.cfm Interacting with Subversion Some approaches… Command line interface • General client command line svn [command ] [arguments ] • Read or update your working copy svn checkout svn update • Make changes svn add svn delete svn copy svn move • Commit your changes svn commit TortoiseSVN client SCPlugin client Subclipse Using Subversion Simple steps to save your sanity Using Subversion • Create the repository • Import files into repository • Checkout files as a working copy • Change, commit, update • Resolve conflicts (if needed) Using Subversion Demo Branching Branching notes • Branches are for the minority – Use for trying out new features, etc. • You may branch from trunk or from branch – But don’t unless you really need to • Can merge changes from the branch to trunk or vice-versa • Don’t be scared! Using Subversion and CF • Old Way – We all update files on a “dev server” • New Way – Check out code to a local working directory – Develop locally – Commit changes back – Deploy “build” from SVN to dev server Tips and Best Practices • Use version control • Don’t break the tree – Don’t commit broken code or code that is not finished • Don’t lock files unless you have a durned good reason to • Explain commits completely and in plain language (use diff!) Tips and Best Practices (cont’d) • Update early and often • Commit early and often – without breaking build • When in doubt, resolve conflicts with fellow team members • Version the stuff you control, not the stuff your code produces • Use one repository per project • Subversion != Backup Thank You! [email protected] http://christianready.com 410-382-8070 Copyright Info All Diagrams from Version Control with Subversion available from http://svnbook.red-bean.com • Copyright (c) 2002-2004 Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato. This work is licensed under the Creative Commons Attribution License. To view a copy of this license, visit http://creativecommons.org/licenses/by/2.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305,USA. Resources Sites • SVN Project – http://subversion.tigris.org/ • SVN Forum – http://www.svnforum.org/ Utilities • SVN 1-click setup – http://svn1clicksetup.tigris.org/ • Tortoise SVN – http://tortoisesvn.tigris.org/ • Subclipse – http://subclipse.tigris.org/ • CVS Dude – http://cvsdude.com/ Books • Version Control with Subversion – http://svnbook.red-bean.com/ • Pragmatic Version Control with Subversion – http://pragmaticprogrammer.com/titles/svn/ Articles on version control/branching • Subversion for Windows & Apache – http://svn.spears.at/ • Setting up a Subversion Server under Windows – http://blogs.vertigosoftware.com/teamsystem/archive/2006/01/16 /Setting_up_a_Subversion_Server_under_Windows.aspx • Subversion branching quick start – http://www.nedbatchelder.com/text/quicksvnbranch.html • http://www.cmcrossroads.com/bradapp/acme/branching/ • Source Control HOWTO – http://www.ericsink.com/scm/source_control.html