oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

93
 P ractical SVN for PHP Developers Matthew Weier O'Phinney Project Lead Zend Framework Lorna Jane Mitchell Software Engineer Ibuildings

Upload: shambalic

Post on 02-Apr-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 1/93

 

Practical SVNfor PHP Developers

Matthew Weier O'PhinneyProject Lead

Zend Framework

Lorna Jane MitchellSoftware Engineer 

Ibuildings

Page 2: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 2/93

 

What isVersion Control?

Page 3: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 3/93

 

• What did you change from the previous

revision?• What changes have others recorded

since your last local update?

Change Management

Page 4: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 4/93

 

 Types of Version Control

Page 5: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 5/93

 

• Each checkout is a fully functional repository

• Anybody may accept patches from anyone

else• Anybody may send patches to anyone else

• Ideal for projects with parallel feature

developement

Distributed

Page 6: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 6/93

 

• One canonical repository

• All changes are submitted to the repository

• All changes are retrieved from the repository• Ideal when:

 – a canonical version is required,

 – access to the repository should be controlled

Non-Distributed

Page 7: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 7/93

 

What isSubversion?

Page 8: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 8/93

 

• Non-Distributed Version Control System

• Successor to CVS

• Stores and versions: – source code

 – documentation

 – anything, really

Subversion is...

Page 9: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 9/93

 

InstallingSubversion

Page 10: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 10/93

 

Choose a Protocol

Page 11: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 11/93

 

• give repo access to local users

• give users and/or groups read/write on therepo to grant access

• file:///home/lorna/svn-repos/main/trunk/

Local filesystem

Page 12: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 12/93

 

• give repo access to users with sshcredentials

• give users and/or groups read/write onthe repo to grant access

• svn+ssh svn://rivendell/home/lorna/svn-

repos/main/trunk

svn+ssh

Page 13: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 13/93

 

• make repo web-browseable and haveapache handle credentials

• basic or digest HTTP authentication(e.g., .htpasswd)

• mod_authz_svn - an Apache module togive finer access control

• http://svn.example.com/main/trunk

WebDAV via HTTP/S

Page 14: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 14/93

 

Installingon Linux

Page 15: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 15/93

 

• Debian/Ubuntu:

aptitude install subversion• Fedora/RedHat:

yum install subversion

Distribution packages

Page 16: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 16/93

 

• download fromhttp://subversion.tigris.org

• check dependencies (install apache,mod_dav, etc., first)

• compile

From source

Page 17: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 17/93

 

Setting up arepository

Page 18: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 18/93

 

What is arepository ?

Page 19: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 19/93

 

• The place all changesets are stored

• A black box; you may only interact with itusing svn tools

A repository is...

Page 20: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 20/93

 

Creating therepository

U “ d i ”

Page 21: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 21/93

 

Use “svnadmin create”

C t i iti l t t

Page 22: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 22/93

 

Create initial content

C it i iti l t t

Page 23: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 23/93

 

Commit initial structure

Alt t i t i t th

Page 24: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 24/93

 

Alternate way: import into the repo

Page 25: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 25/93

 

About

repositorystructure

Repository Structure

Page 26: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 26/93

 

• Trunk – the main code version

• Branches – copies of code which can be

modified• Tags – copies of code which are never

changed

All are “cheap” copies

Repository Structure

Page 27: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 27/93

 

Using Subversion

Checkout: svn checkout (co)

Page 28: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 28/93

 

Checkout: svn checkout (co)

svn directory

Page 29: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 29/93

 

.svn directory

Status: svn status (st)

Page 30: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 30/93

 

Status: svn status (st)

Common status codes

Page 31: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 31/93

 

• ' ' no modifications

'A' Added• 'C' Conflicted

• 'D' Deleted

• 'M' Modified• '?' item is not under version control

• '!' item is missing (removed by non-

svn command) or incomplete• 'X' external resource managed by svn

(svn:externals)

Common status codes

Add to repo: svn add

Page 32: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 32/93

 

Add to repo: svn add

Commit to repo: svn commit (ci)

Page 33: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 33/93

 

Commit to repo: svn commit (ci)

Changelog: svn log

Page 34: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 34/93

 

Changelog: svn log

Page 35: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 35/93

 

Dealing withmissing files

Missing files - ! in the status

Page 36: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 36/93

 

• “!” in the status listing

• Usually because something was moved

or deleted without using the svn tools• Always use svn rm and svn mv

• To fix: update (svn up) and try again

Missing files ! in the status

Page 37: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 37/93

 

What and Whento commit

Bad practices

Page 38: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 38/93

 

hourly, semi-daily, daily checkins• code only, tests only, docs only

Bad practices

The Best Practice:

Page 39: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 39/93

 

Each commit should include all

code, tests, and docs relatedto a discrete behavior or set of functionality.

The Best Practice:

Why?

Page 40: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 40/93

 

• Easy to “cherry-pick” changesets

between branches• Trivial to identify changesets to rollback

y

Examples

Page 41: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 41/93

 

p

Examples

Page 42: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 42/93

 

p

How?

Page 43: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 43/93

 

• PLAN your project; break it into distinct units of functionality

• Use an issue tracker; issues should include

expectations, actual results, and reproducecode (these become your tests!)

• No unit of functionality should take more than3-4 hours to implement; longer, and it likely

should be broken into sub-tasks.

Page 44: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 44/93

 

Conflicts

svn blame

Page 45: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 45/93

 

svn blame / annotate / praise• shows who last edited which line

Example

Page 46: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 46/93

 

Conflicts

Page 47: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 47/93

 

• Two people change same line of same

file• svn will ask user to choose

Example: conflict adds files

Page 48: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 48/93

 

• index.php.r4 version from before either yourchanges or the commit that has conflicted

• index.php.r6 current repo version

• index.php.mine working copy before servershowed conflict

• index.php whole file with some markup to

show just the conflict(s) in place

svn resolved

Page 49: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 49/93

 

• edit index.php until correct

may copy one of the "extra" files intoplace of this one

• let SVN know you're all sorted

Avoiding Conflicts

Page 50: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 50/93

 

• Good team communication

• Update often• Commit first!

Page 51: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 51/93

 

Branchingand Tagging

Page 52: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 52/93

 

Patterns

Feature Branches

Page 53: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 53/93

 

Graph by Eli White

Page 54: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 54/93

Long-lived Branches

Page 55: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 55/93

 

Graph by Eli White

Long-lived Branches

Page 56: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 56/93

 

●Pros:−Production is always stable−Rollback by pointing to production tags

●Cons:−Long-lived feature development often lags trunk features●Difficult to determine what to merge

Difficult to do parallel feature development−More difficult to rollback specific features

Release Branches

Page 57: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 57/93

 

Graph by Eli White

Release Branches

Page 58: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 58/93

 

●Pros:−Easy to isolate features by version (parallel development)−

Possibility of keeping multiple active versions of a project●Cons:

−Harder to merge patches between branches (files may

differ widely)

Page 59: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 59/93

 

Merging

Merging

Page 60: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 60/93

 

• Moving changes between branches(including trunk)

• Merge single changes

• Merging as part of a branch lifecycle

How to merge

Page 61: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 61/93

 

• Check out the target branch• From the target directory, run svn diff 

until the output illustrates the operation

you wanted• Replace "diff" with "merge"

• Review changes to working copy and/or

test

How to merge: the easy way

Page 62: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 62/93

 

• Use “svn log” to identify discretechangesets you want to merge.

• Use the “cherry-pick” flag of “svn

merge” (-c) to merge that singlechangeset.

• Works well if you're following the best

practices outlined earlier!

Page 63: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 63/93

 

AdministeringRepositories

Page 64: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 64/93

 

Backing upyour Repository

svnadmin hotcopy

Page 65: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 65/93

 

• Copying files directly can lead tocorruption in the copy

• Use “svnadmin hotcopy” or

“svnadmin dump”

Page 66: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 66/93

 

Authentication

svnserve or svn+ssh

Page 67: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 67/93

 

●Dependent on how the OS doesauthentication:

−Local accounts−“Virtual” accounts−etc.

SSH public keys are a common solution

WebDAV (http/https)

Page 68: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 68/93

 

● Typically HTTP basic or digestauthentication

−Use htpasswd to generate user/passpairs

−Can still allow anonymous access−Configure your server to require it

Example HTTP Auth configuration

Page 69: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 69/93

 

Page 70: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 70/93

 

Authorization

T i ll f/ th i

ACL File

Page 71: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 71/93

 

● Typically conf/authz in your repo, or

“access.conf” accessible to web server●INI-style file with [sections]

−[groups] section to define users and

groups−[/path] specifies path on repo−[repo:/path] specifies path on

specific repo (if more than one repodefined)

ACL File

Page 72: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 72/93

 

●ACLs:−[user|group] = [r|rw]−“*” as group/user means any user−Groups are prefixed with “@”

ACL File: example

Page 73: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 73/93

 

ACL File: placement

Page 74: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 74/93

 

●Svnserve, file access, or svn+ssh:conf/authz in your repository●WebDAV: anywhere.

− Tell your vhost where to find it−Must setup authorization prior toauthentication

ACL File in WebDAV: vhost setup

Page 75: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 75/93

 

Page 76: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 76/93

 

Hooks

What are hooks?

Page 77: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 77/93

 

Allow extending SVN's capabilities viauserland scripts●“Hook” into specific processes:

−pre/post-commit, start-commit−pre/post-revprop-change−pre/post-lock

−pre/post-unlock

Running a linter REPOS="$1"

TXN="$2"

Page 78: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 78/93

 

PHP="/path/to/php"

SVNLOOK="/path/to/svnlook"

AWK="/path/to/awk"GREP="/path/to/egrep"

SED="/path/to/sed"

CHANGED=`$SVNLOOK changed -t "$TXN" "$REPOS" | \

$AWK '{print $2}' | \

$GREP \\.php$`

for FILE in $CHANGED

do

MESSAGE=`$SVNLOOK cat -t "$TXN" "$REPOS" "$FILE" | $PHP -l`

  if [ $? -ne 0 ]

  then

  echo 1>&2

  echo "***********************************" 1>&2

  echo "PHP error in: $FILE:" 1>&2

  echo `echo "$MESSAGE" | $SED "s| -| $FILE|g"` 1>&2

  echo "***********************************" 1>&2

  exit 1

  fi

done

Sample linter output

Page 79: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 79/93

 

***********************************PHP error in: test.phpecho $foobar ***********************************

R t it t bl ki i

Running unit tests

Page 80: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 80/93

 

• Run post-commit – prevents blocking issues

• Send email notification when tests fail

• Two approaches:

 – Run entire suite

 – Grep committed files for classes, and test just those classes

• Typically best to do this from a Continuous

Integration server, and not via subversionhooks

●Email Nabaztag TwitterSVN

Sending notifications

Page 81: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 81/93

 

●Email, Nabaztag, TwitterSVN

Email notifications post-commit●SVN::Notify:

−http://search.cpan.org/~dwheeler/SVN-

Notify-2.79/lib/SVN/Notify.pm−Can selectively determine whichpeople/lists get notifications based on

commit path−Plain text and/or HTML emails

Example notification:

Page 82: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 82/93

 

Publishing RSS Feeds

Page 83: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 83/93

 

• svn2feed.py:http://svn.collab.net/repos/svn/trunk/tools/ho

ok-scripts/svn2feed.py• Add svn2feed.py to your hooks/ directory

Adding svn2feed.py to your post-commit hook:

Page 84: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 84/93

 

path/to/python path/to/hooks/svn2feed.py \

  --svn-path /usr/bin/ \

  --max-items=100 \

  --format=atom \  --revision "$REV" –item-url \

  "http://localhost/svn/" \

  --feed-url="http://localhost/rss/svn.rss" \

  --feed-file "path/to/rss/svn.rss" \

  "$REPOS" &

Generating documentation

Page 85: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 85/93

 

• Trigger docbook build process, orPhpDocumentor

Run post-commit, so as not to block• Typically best done from a CI server, and

not subversion hooks

PHP C d S iff i l d i

Running PHP_CodeSniffer 

Page 86: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 86/93

 

●PHP_CodeSniffer includes a script,

bin/scripts/phpcs-svn-pre-commit− Edit the script to provide the path to svnlook:− define('PHP_CODESNIFFER_SVNLOOK',

'/usr/bin/svnlook');●Edit the pre-commit hook script to invoke thescript:

− /path/to/bin/scripts/phpcs-svn-pre-commit"$REPOS" -t "$TXN" >&2 || exit 1

PHP_CodeSniffer hook output

Page 87: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 87/93

 

Transmitting file data .svn: Commit failed (detailsfollow):

svn: 'pre-commit' hook failed with error output:

FILE: temp.php---------------------------------------------------------------FOUND 1 ERROR(S) AND 0 WARNING(S) AFFECTING 1 LINE(S)

---------------------------------------------------------------2 | ERROR | Missing file doc comment--------------------------------------------------------------

For more info on PHP_CodeSniffer:

Page 88: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 88/93

 

http://pear.php.net/manual/en/package.php.php-codesniffer.svn-pre-commit.php

Page 89: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 89/93

 

Deploying from SVN

Deployment Considerations

Page 90: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 90/93

 

• What else needs to happen at deploytime?

Preserve uploads• Set permissions

• Database patches

Checkout or Export

Page 91: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 91/93

 

• Checkout retains link to repo

• Meta data present on server

Inconsistent state during update• Export is clean copy, no dependencies

• Other ways to keep track of version

Best Practices

Page 92: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 92/93

 

 Tag and export from svn – includesome tag info

• Use symlinks to enable seamless

switching• Wrap in a script

• Have a rollback plan/script

Consider database strategies

Page 93: oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

7/27/2019 oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01

http://slidepdf.com/reader/full/oweierphinney-2009-05-19-svnforphpdevs-090519165923-phpapp01 93/93

 

 Thank you.