23
Using Subversion for Source Code Control Michael McLennan Software Architect Network for Computational Nanotechnology

Using Subversion for Source Code Control

  • Upload
    babu

  • View
    60

  • Download
    0

Embed Size (px)

DESCRIPTION

Using Subversion for Source Code Control. Michael McLennan Software Architect Network for Computational Nanotechnology. Client/Server model:. Subversion repository. Clients. Server. What is Subversion?. CVS on steroids Created by developers at CollabNet In development since 2000 - PowerPoint PPT Presentation

Citation preview

Page 1: Using Subversion for Source Code Control

Using Subversionfor Source Code Control

Michael McLennanSoftware Architect

Network for Computational Nanotechnology

Page 2: Using Subversion for Source Code Control

Client/Server model:

Subversionrepository

ServerClients

What is Subversion?

• CVS on steroids• Created by developers at CollabNet• In development since 2000• In production (version 1.0) since Feb 2004• Open source (Apache/BSD-style license)• Unix/Linux, Win32, BeOS, OS/2, MacOS X• Home page: http://subversion.tigris.org/

Upload:add/commit

Download:checkout

Page 3: Using Subversion for Source Code Control

working

x1x2

Why bother with Subversion?

Does this sound familiar?

NCSAhamlet

test

CPU: 420s CPU: 340s

v1 = 3.125v2 = 9.987

x2 output

v1 = 3.12498v2 = 9.9901

x3.1a output

x2

x2.1x2.1

x2.2

x2 x3x3

x3.1x3.1 ?

Page 4: Using Subversion for Source Code Control

Top 5 reasons why you should use Subversion

• It’s better than CVSsvn commands are nearly identical to cvs commands

• You’ll feel more secureSSL transport between client/server; repository is backed up

• Where did I put that…It’s in the repository

• Who broke the build?Look at the revision history

• Your hard drive just diedNo problem, your code is in the repository

Subversionrepository

SSL

hamlet NCSA

Page 5: Using Subversion for Source Code Control

Getting Started

If you’re using Subversion on your own machine…• Get your files together

mkdir initialmkdir initial/trunkmkdir initial/branchesmkdir initial/tagsmv /home/src/*.c initial/trunkinitial/trunk put all of your files in the trunk

trunk branches tags

• Create a repository and import your filessvnadmin create --fs-type fsfs /usr/local/svn/reposvn import initial file:///usr/local/svn/repo -m "initial content"

Subversionrepository

Page 6: Using Subversion for Source Code Control

Getting Started… the nanoHUB way

Once you register your tool,your repository is created automatically

trunk

Subversionrepository

yourtool

branches

tags

Page 7: Using Subversion for Source Code Control

svn checkout https://repo.nanohub.org/svn/app-yourtool/trunk app-yourtoolA app-yourtool/rapptureA app-yourtool/docA app-yourtool/srcA app-yourtool/binA app-yourtool/dataA app-yourtool/middlewareA app-yourtool/examplesChecked out revision 1.

mkdir examples/ex1vi examples/ex1/README

svn add examples/ex1A examples/ex1A examples/ex1/README

Check out your code

Instructions in your project areaat wiki/GettingStarted

From any machine…

Page 8: Using Subversion for Source Code Control

Commit your changes

cd app-yourtool svn statusA examples/ex1A examples/ex1/README? a.out

svn commitAdding examples/ex1Adding examples/ex1/READMETransmitting file data .Committed revision 2.

Instructions in your project areaat wiki/GettingStarted

brings up your favorite editor:Created ex1 directory and added the README file.

--This line, and those below, will be ignored--

A examples/ex1A examples/ex1/README

commit at the top level, so you don’t miss anything

Page 9: Using Subversion for Source Code Control

Like any other file on yourDesktop, but icon shows

Subversion control

What about Windows?

More info:http://tortoisesvn.tigris.org/

Puts svn commands onto the right-mouse-button menu:

Page 10: Using Subversion for Source Code Control

cd examples/ex1svn mv README README.txtA README.txtD README

cd ../..svn delete docD doc

svn statusD docA + examples/ex1/README.txtD examples/ex1/README

svn commit

Moving and removing files

brings up your favorite editor:Moved some files around.

--This line, and those below, will be ignored--

D docA examples/ex1/README.txtD examples/ex1/README

What are these secret codes? See this page.

Page 11: Using Subversion for Source Code Control

Editing and updating

svn commit

svn checkout https://repo.nanohub.org/svn/app-yourtool/trunk app-yourtool

edit: Makefilesvn update

svn commit

• Copy code around• Move code to new machines with “svn checkout”• Move changes around with “svn commit” and “svn update”

all: gcc -O hello.c

all: gcc -g hello.c gcc -O hello.c

Page 12: Using Subversion for Source Code Control

Looking for differences and reverting

svn statusM src/hello.csvn diff src/hello.cIndex: src/hello.c===================================================================--- src/hello.c (revision 4)+++ src/hello.c (working copy)@@ -4,6 +4,7 @@ int main(int argc, char **argv) {- printf("Hello, World!\n");+ /* say hello to everyone */+ printf("Hello, Universe!\n"); exit(0); }svn revert hello.cReverted 'hello.c'

Can also revert directory changes (adding/deleting files)

Page 13: Using Subversion for Source Code Control

Merging changes

• Whoever checks in first has no problem• Next “svn update” integrates compatible changes

CC=gccall: $(CC) -O hello.csvn commit

edit: Makefileall: gcc –O hello.cclean: rm –f *.o a.out

Page 14: Using Subversion for Source Code Control

Merging changes

• Whoever checks in first has no problem• Next “svn update” integrates compatible changes• Use “svn commit” to commit the merged changes

svn update

edit: Makefileall: gcc –O hello.cclean: rm –f *.o a.out

CC=gccall: $(CC) -O hello.cclean: rm –f *.o a.out

svn commit

Page 15: Using Subversion for Source Code Control

Resolving merge conflicts

• Whoever checks in first has no problem• Next “svn update” integrates changes

CC=gccall: $(CC) -O hello.csvn commit

edit: Makefileall: gcc –O hello.c –o helloclean: rm –f *.o a.out

gcc –O hello.c –o hello

$(CC) -O hello.c

Problem here:both changethe same line

Page 16: Using Subversion for Source Code Control

Resolving merge conflicts

svn updateC MakefileUpdated to revision 6.

svn commitsvn: Commit failed (details follow):svn: Aborting commit: 'Makefile' remains in conflict

svn status? Makefile.r5? Makefile.r6? Makefile.mineC Makefile

conflict!

best guess at integrated changes

Page 17: Using Subversion for Source Code Control

Resolving merge conflicts

vi Makefile

CC=gccall:<<<<<<< .mine $(CC) -O hello.c======= gcc -O hello.c -o hello clean: rm -f *.o a.out>>>>>>> .r6

Page 18: Using Subversion for Source Code Control

Resolving merge conflicts

vi Makefile

CC=gccall:<<<<<<< .mine $(CC) -O hello.c======= gcc -O hello.c -o hello clean: rm -f *.o a.out>>>>>>> .r6

Page 19: Using Subversion for Source Code Control

Resolving merge conflicts

vi Makefile

svn resolved MakefileResolved conflicted state of 'Makefile'

svn commitSending src/MakefileTransmitting file data .Committed revision 7.

CC=gccall: $(CC) -O hello.c -o hello clean: rm -f *.o a.out

Page 20: Using Subversion for Source Code Control

Retrieving an old version

• Get the whole distributionsvn checkout –r 3 https://repo.nanohub.org/svn/app-yourtool/trunk app-yourtool

get revision 3

• Get a particular filesvn cat –r 5 Makefile

svn cat –r 5 Makefile > Makefile

show me revision 5replace current file with revision 5

• Which revision?svn log Makefile

svn logshow me revisions for this fileshow me revisions for current directory

Page 21: Using Subversion for Source Code Control

Binary files

Good defaults. Subversion usually does the right thing:cp diagram.jpg examples

svn add examples/diagram.jpgA (bin) examples/diagram.jpg

svn commitAdding (bin) examples/diagram.jpgTransmitting file data .Committed revision 8.

When it fails, set properties yourself:cp demo.dat examples

svn add examples/demo.datA examples/demo.dat

svn propset svn:mime-type application/octet-stream examples/demo.datsvn propdel svn:eol-style examples/demo.dat

Recognized as a binary file:• no CR/LF translation• no merges, only replacements

more about properties on this page

Page 22: Using Subversion for Source Code Control

Branching and Tagging

trunkCreate a branch:svn checkout https://repo…/app-yourtool app-yourtool-allcd app-yourtool-allsvn copy trunk branches/mclennansvn commit –m “created private branch for mclennan”

svn checkout https://repo…/app-yourtool/branches/mclennan app-yourtool-mcl

Think of your source code repository as a tree…

instead of /trunk

Tag important versions: svn copy trunk tags/release1.0

Merging between branches is a pain!If you need that, use svk.

no /trunk

Page 23: Using Subversion for Source Code Control

More Information

• Web site: http://subversion.tigris.org/• Subversion Book

From O’Reilly & Associates, and also online

• Quick-start guide for your project:https://developer.nanohub.org/projects/app-yourtool/wiki/GettingStarted