Download - Version Control with SVN
![Page 1: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/1.jpg)
Version Control with SVNby Michelangelo van Dam
1
PHPBelgium meeting 22/10/2008Cafe Sport Leuven
1
![Page 2: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/2.jpg)
About me
2
Michelangelo van Dam
Enterprise PHP ConsultantZend Certified EngineerCo-founder PHPBelgiumContributor Zend FrameworkPHP Advocate
E-mail: [email protected]: http://dragonbe.comTwitter: http://twitter.com/DragonBe
2
![Page 3: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/3.jpg)
About this presentation
• Concepts of version control• Management with subversion• Life cycle of a project in subversion• Parts and structures within subversion• Advanced subversion tools• New in release 1.5
33
![Page 4: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/4.jpg)
What is version control ?
4
“Revision control (also known as version control ...) is the management of multiple revisions of the same unit of information.”(source: Wikipedia:RevisionControl)
4
![Page 5: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/5.jpg)
Version Control for PHP devs...
• version control provides–management of versions of information
•code/tests• configuration files•documentation
– in a structured, standardized way–with repositories
• centralized (SVN, CVS)•decentralized (GIT)
55
![Page 6: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/6.jpg)
Why need version control ?
• enables collaboration between developers• centralized “main code” (trunk)• custom code alongside main code (branching)• eases release management (tags)• rollback to previous revisions• integration with other tools
66
![Page 7: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/7.jpg)
Subversion (SVN)
• Subversion (http://subversion.tigris.org)• more advanced than CVS• less complex than GIT• integrates well with other tools
(trac, gforge, jira, ...)• supported by many tools
(Zend Studio, TurtoiseSVN, Subversion CLI)
77
![Page 8: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/8.jpg)
An example project in trac
88
![Page 9: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/9.jpg)
SVN browser in Zend Studio
99
![Page 10: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/10.jpg)
Code management with SVN
• many developers create much code• code is committed to a central repository
–conflicts trigger warnings
• user and groups can be defined• different versions can co-exist• access management for named and
anonymous access rights
1010
![Page 11: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/11.jpg)
Subversion authentication
• svnserve daemon$ svn svn://server/project/trunk
• svnserve daemon over SSH$ svn svn+ssh://server/project/trunk
• Apache webserverhttp://svn.server/project/trunk
1111
![Page 12: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/12.jpg)
Version management
• all code resides in “trunk”• code version are detached in “branches”• snapshots for releases are “tagged”
1212
![Page 13: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/13.jpg)
Release management
• a release is a snapshot of a version branch• are being deployed to server environments• for live or production environments
don’t check out in document root !–use release folders svn co svn://server/myproj/tags/rel-1.0 /web/myproj-rel-1.0
–create symlink to itln -s /web/myproj-rel-1.0 /web/myproj
1313
![Page 14: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/14.jpg)
SVN life cycle
v1.0 v1.1
rel-1.1.1 rel-1.1.2
rel-1.0.1 rel-1.0.2
custom dev branch
bug fixTrunk
1414
![Page 15: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/15.jpg)
Trunk
• trunk is where all code resides–except custom development
• has always the latest version• is not always the most stable version
1515
![Page 16: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/16.jpg)
Branch
• two kind of branches exists–custom development branches–version branches
1616
![Page 17: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/17.jpg)
Custom development
• code that changes many things in trunk• are best put in a separate branch• maintained by their developer(s)• and merged back into trunk
–after the merge, the branch is removed
• when changes are done and tested
1717
![Page 18: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/18.jpg)
Versions
• are maintained in branches• have a long lifetime cycle (several years)• differ from each other
–because of new code base, framework, language
• have a common base = trunk• fixes from versions go into trunk• back port fixes go from trunk into version
1818
![Page 19: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/19.jpg)
Tags
• tags are snapshots• usually made on version branches• can also be made on “trunk”• are deployed (exported) to staging
environments• are used to keep track what’s happened
between releases (change log)
1919
![Page 20: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/20.jpg)
More than just version control
• Subversion provides more features–File portability–Keyword substitution–Locking–Externals–Peg and Operative revisions–Network model–Hooks
2020
![Page 21: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/21.jpg)
File portability
• Line endings differ on different OSses–are ignored when checking modifications
• Mime-types differ from their extensions–binary and non-binary files are tested on content
2121
![Page 22: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/22.jpg)
Keyword substitution
• Only a few keywords are substitute–$Date:$ › $Date: 2008-10-22 20:00:00 +0100 (Wed,
22 Oct 2008) $–$Revision:$ › $Revision: 144 $–$Author:$ › $Author: svnusername $–$HeadUrl:$ › $HeadUrl: http://svn.test.be/trunk $–$Id:$ › $Id: file.php 148 2008-10-22 20:00:00Z
svnusername $
2222
![Page 23: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/23.jpg)
Locking
• working copy locks–exclusive right to a working copy–clears with “svn cleanup”
• database locks–ensures database integrity–only admins can remove this lock
2323
![Page 24: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/24.jpg)
Externals
• Externals provide an easy way to–include other internal or external projects–without having to care about there revisions
• Examples:–Zend Framework as svn:externals on library path–project that includes many smaller projects
2424
![Page 25: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/25.jpg)
Peg and Operative revisions
• automated handling of–moving files–deleting and creating new files with same name
• Using specific syntax–$ svn command -r OPERATIVE-REV item@PEG-REV
2525
![Page 26: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/26.jpg)
Network model
• Can run it’s own svnserve–pros: no dependencies, works with ssh for extra
security–contras: need svnclient to connect
• Or in combination with Apache webserver–pros: works with any http-client–contras: overkill for small projects, requires
mod_dav_svn, more difficult to set up
2626
![Page 27: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/27.jpg)
Hooks
• Hooks facilitate actions to be taken–before a commit starts (validate rights)–after a commit (send e-mail, update tracker, ...)–before or after a revision change (notifications)
• Can easily be incorporated with tools–tracking tools– integration tools (Lorna Jane’s Nabaztag)–mailing and logging systems
2727
![Page 28: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/28.jpg)
Hooks execute moments
• basic commit moments:–start-commit:
• runs before commit transaction started
–pre-commit:• runs right before commit transaction is promoted
–post-commit:• runs after the commit transaction is finished
–...
2828
![Page 29: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/29.jpg)
Cool things with SVN hooks
29
Lorna Jane’s Nabaztag
Responding on SVN commits
http://www.flickr.com/photos/lornajane/2592602734/
29
![Page 30: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/30.jpg)
New features in Subversion v1.5
• Merge tracking (foundational)• Sparse checkouts (via new --depth option)• Interactive conflict resolution• Changelist support• Relative URLs, peg revisions in svn:externals• Cyrus SASL support for ra_svn and svnserve• ... (more on http://subversion.tigris.org/
svn_1.5_releasenotes.html)
3030
![Page 31: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/31.jpg)
Summary
• manageable file change history• better collaboration between developers• clearer release management• more then one version of same code base• easier to rollback in case of emergency
3131
![Page 32: Version Control with SVN](https://reader034.vdocuments.mx/reader034/viewer/2022042601/5404e2808d7f729e768b4963/html5/thumbnails/32.jpg)
Thank you...
32
Questions ?Michelangelo van Dam - [email protected]://slideshare.net/PHPBelgium/version-control-with-svn-presentation
32