63
An Introduction to CVS An Introduction to CVS By Durai Raj By Durai Raj

An Introduction to CVS

  • Upload
    manning

  • View
    31

  • Download
    0

Embed Size (px)

DESCRIPTION

An Introduction to CVS. By Durai Raj. Why CVS ?. Has one of your projects ever experienced this ?. Which is the latest version ?. God only knows (sometimes myself too!!). A brief History of CVS. - PowerPoint PPT Presentation

Citation preview

Page 1: An Introduction to CVS

An Introduction to CVSAn Introduction to CVS

By Durai RajBy Durai Raj

Page 2: An Introduction to CVS

Has one of your projects ever experienced this ?

Which is the latest version ?.

God only knows (sometimes myself too!!)

Why CVS ?

Page 3: An Introduction to CVS

A brief History of CVS

• CVS started out as a bunch of shell scripts written by Dick Grune, posted to the newsgroup `comp.sources.unix' in December, 1986.

• In April, 1989, Brian Berliner designed and coded CVS. Jeff Polk later helped Brian with the design of the CVS module and vendor branch support.

• Since then CVS has been used to develop software by many programmers across the internet

Page 4: An Introduction to CVS

Requirements for VC

• Multiple Developers - concurrent Access • History • View diffs • Rollback changes • Release Management

Page 5: An Introduction to CVS

So what is CVS ?

It’s like having your source files on a File server and coordinate with your colleagues on the version number you’re working on.

Page 6: An Introduction to CVS

How Does CVS Work?

• CVS uses a Client / Server Architecture• A Sys Admin Would Normally Install the Server • The Server Maintains the Repository• Developers Use the Client• The Client Allows for Checking in/out, and Updating,

etc..

Page 7: An Introduction to CVS

Client-server architecture

Central Repository

(sdgserver in our organization)

• separate server (UNIX or NT)• no shared file systems• a server process per connection

Ganapathy

Nagaraj

Durai & mansoor

Page 8: An Introduction to CVS

How Does CVS Version?

• CVS maintains a set of diffs that define the changes between each version

• Any version can be checked out from the repository by specifying the date:

cvs checkout -D yesterday <proj>; orcvs checkout -D “12 days ago.” <proj>; orcvs checkout -D “23 August 2002” <proj>;

Page 9: An Introduction to CVS

Idea of CVS

• The idea of the CVS is to create a file system, where each file has remembers all the modifications made to it. In other words it is all the versions of it at the same time.

• File system resides in a repository, that can be stored to local or remote host.

• All the files are edited outside of the repository in some working directory and in some phase synchronized with the repository.

• Files are moved to, from and updated from repository with special tool called cvs, which is available for most platforms

Page 10: An Introduction to CVS

• CVS 簡介 for Linux• CVS 安裝 for Windows• CVS 設定 for MAC• CVS 指令 Port it to your desired platform環境的應用

Platform Support

Page 11: An Introduction to CVS

CVS Features

• Concurrent access by multiple developers• Multiple development lines in a single repository• Grouping sources into modules• Symbolic source tagging• Diffs between versions• Configurable logging support• Binary files support• Repository event triggers

Page 12: An Introduction to CVS

Concurrent Versions System

• Overview of CVS architecture.• Repository structure.• Basic development tasks in WinCvs.• Branching and merging.• Other CVS interfaces• CVS internals

Page 13: An Introduction to CVS

Versioning Systems allow:

• multiple users to modify the same code

• To store one master copy of the source code

• To automate the update between versions

• Access to any previous state of the source code

Versioning Systems

Page 14: An Introduction to CVS

Handling Binary Files

• Line Feed Format: Repository vs. Client• Keyword Substitution• Wrappers• cvs admin -kb

Page 15: An Introduction to CVS

Web Access

• Look at CVS tree in the repository• Browsing of a CVS repository

– ViewCVS• http://viewcvs.sourceforge.net/

– CVSweb• http://people.freebsd.org/~fenner/cvsweb/

Page 16: An Introduction to CVS

CVS do’s and don'ts ……

• Facilitates bug detection when software is modified

• Economy in disk space while saving versions

• Prevents code over-writing in a team project

• Not a build system• Not a substitute for

communication between developers or for management

• It will not create any magic for you.

Page 17: An Introduction to CVS

Limitations

• Best if you have an investment in *nix environments• Designed for programmers• Concepts are hard to grasp• Alien concept to designers

Page 18: An Introduction to CVS

Where it can be used ?

• Software Development • Website Management • Documentations • Synchronization of distributed effort • ... anywhere digital data evolves

Page 19: An Introduction to CVS

What Is CVS Used For?

• Open Source Projects• Projects With a Large Number of Developers• Storing Files That Benefit From Version Control (

/etc/ config files, or web pages )• Taking Advantage of a Sandboxed Development

Environment

Page 20: An Introduction to CVS

So What is it good for ?

• Version control and connecting multiple developer together in one project, of course :)

• Document management and archiving • Nice way to do one project with multiple machines

and still manage the versions • Allows free experimenting on project • Following the growth of the project • Backupping - it forces one to take backups with

neglible work very often

Page 21: An Introduction to CVS

Benefits of CVS

• Automatic, constant and forced backupping • When programming, frees the development • Gives freedom to choose afterwards, when the

program is ready • Saves all the versions for later use • Clean way of saving only the necessary files and

managing projects • Gives freedom to develop on multiple machines

simultaneously

Page 22: An Introduction to CVS

Fancy Features

• Multiple developer support (file locking, etc.) • Bonsai - www-interface (for example see Gnome

project) • Keyword substitutions • Development of several version at the same time • Multiplatform-support (works even on obscure

platforms like Windows)

Page 23: An Introduction to CVS

Concurrent checkoutMaster Repository

foo.c

WorkingCopyV1.7

WorkingCopy V1.1

WorkingCopy V1.2

WorkingCopyV1.7

WorkingCopy

V1.2.2.1

checkout branch rel_1_fix checkout latest

checkout latest

checkoutV1.2

checkoutV1.1Ganesh

Subbu MansoorSundar

(Code walkthrough)

Checkout does not lock the files in repository

X XV1.8 or 1.9

V1.8 or 1.9V1.2.2.2

checkincheckin

checkin

checkin prohibited

Gopinath

Page 24: An Introduction to CVS

CVS and the Development Cycle1. Check out source files in working directory.2. Edit source files.3. Unit test your code.4. Update working files to merge in changes from other

developers (if necessary).5. Test again if the sources were merged on step 4.6. Commit changes.7. Repeat from step 2 until you have a new release.8. Tag the release.9. Submit the module name and release tag for integration

build.

Page 25: An Introduction to CVS

checkoutupdatecheckindevelopment

Ideal development with CVS

repository

Developer A

Developer B

Page 26: An Introduction to CVS

checkin

X

Real development with CVS

repository

Developer A

Developer B

updateconflict resolutioncheckin

conflict

Page 27: An Introduction to CVS

How Do You Setup CVS?

• Most current *nix distribution come with CVS installed from the get go

• Setting up the server basically just requires specifying where the repository will be housed

• In Linux Install gcvs for gui interface• In Win* Install Wincvs • Tortoise CVS is also good

Page 28: An Introduction to CVS

Setting Up the Client

• CVS relies on two main environment variables• CVS_ROOT specifies where the repository is located.

This can be a network address, i.e.. //sdgserver/sdgrepo

Page 29: An Introduction to CVS

Essential CVS Terminology - Repository

CVS stores all files in a centralized directory called the repository. The directory is defined by the environment variable $CVSROOT.

Page 30: An Introduction to CVS

Essential CVS Terminology - Module

Modules are just the top level directories in the Repository. You can combine multiple modules in your own directory

structure. See documentation for CVSROOT/modules incorporate generic libraries in your own source tree, but be

able to maintain them individually. The files in the repository are organized in modules. Each

module is made up of one or more files, and can include files from several directories. A typical usage is to define one module per project.

Page 31: An Introduction to CVS

Version Numbers

• Every file in a CVS repository can contain many versions, which are given version numbers in form x.y[.x.y[...]].

• The history of each file is tracked with an incrementing revision number

• For each revision there is a log entry • Revision numbers have the format 1.25 if they're on

the main trunk, branches have something like 1.33.2.16

Page 32: An Introduction to CVS

Revision numbers

Page 33: An Introduction to CVS

Version Numbers

• Version numbering is automatic i.e. number y is automatically increased every time file is changed:

1.1 1.2 1.3 1.4 1.5

Page 34: An Introduction to CVS

Tags

• A Tag is simply a symbolic name for a specific revision • Tagging all files in one directory or module marks the current

stage. • Can be used as synonym for a revision in any CVS-command • cvs tag <tagname> applies the tag to the current revision of

each file • Version numbers can be treated as a internal information in

CVS and only symbolic names - tags for version used to mark releases.

Page 35: An Introduction to CVS

Branches

• Version number can contain more than two numbers to mark branches.

• Branch can start from any version and start developing independently from the rest of the software.

• In some point of the development of a branch, it can be merged to main trunk in necessary.

Page 36: An Introduction to CVS

Interaction with the repository

• Check out • Syntax : cvs checkout [options] module ...

• Add • Syntax : cvs add [options] file ...

• Remove • Syntax : cvs remove [options] [file ...]

• Examine status • Syntax : cvs status [options] [file ...]

Page 37: An Introduction to CVS

Interaction with the repository – cont.

• Update • Syntax : cvs update [options] [file ...]

• Check in (commit) • Syntax : cvs commit [options] [file ...]

• Release module • Syntax : cvs release [options] module ...

• Import module • Syntax : cvs import [options] repository_dir

vendor_tag release_tag

• Export module Syntax : cvs export [options] module ...

Page 38: An Introduction to CVS

Branches

• Tag – symbolic name for revision of file• ‘-v’ flag in status : see tags and rev. nos.• Tag all files at strategic points – release• ‘-r’ flag in checkout : checkout a rev. no.• Need for branches : good for bug-fixing• Put modified code in branch and later merge with main

trunk

Page 39: An Introduction to CVS

Modules

• modules are alias names to projects kept in the repository.

• More convenient to call a module name rather than a long pathname

Example:If repository is in \\Sdgserver\SDGREPO\FCS DRIVERS V1A module could declare this simply as “DRIVERS”

Page 40: An Introduction to CVS

Defining the module

• Get working copy of ‘modules’ file• Edit file to define new module• Commit changes to ‘modules’ file• Release the working copy• E.g. - $ cvs checkout CVSROOT/modules

new line : newdir newcode/newdir $ cvs commit –m “Added module” modules $ cvs release –d modules

Page 41: An Introduction to CVS

cvs Status

• Status : gives the state of the file• Up-to-date : latest revision• Locally modified : not committed changes• Locally added : added but not committed• Locally removed : removed, not committed• Needs checkout, Needs merge• Unresolved Conflict – update conflict• Unknown

Page 42: An Introduction to CVS

What is WinCVS?

– WinCVS is a MS Windows GUI CVS client.– WinCVS is an Open Source product, written in MS Visual

C++. Architecture supports different front ends.– Latest version is 1.2.x is stable release– Latest beta version is 1.3b8

Page 43: An Introduction to CVS

WinCVS on your desktop• Configuration• Main screen• Checking out the sources• Viewing source history• Diff• Commit• Update• Tag

Page 44: An Introduction to CVS

Guided Tour / Demo

• Importing an existing project to the repository• Checking out a project to your work area• Updating your work area• Editing files, checking in/committing new versions to the

repository• Comparing changes between versions (‘diff’ing)• Advanced features• Customising CVS

Page 45: An Introduction to CVS

Guided Tour / Demo

• Importing an existing project to the repository• Checking out a project to your work area• Updating your work area• Editing files, checking in/committing new versions to the

repository• Comparing changes between versions (‘diff’ing)• Advanced features• Customising CVS

Page 46: An Introduction to CVS

Guided Tour / Demo

• Importing an existing project to the repository• Checking out a project to your work area• Updating your work area• Editing files, checking in/committing new versions to the

repository• Comparing changes between versions (‘diff’ing)• Advanced features• Customising CVS

Page 47: An Introduction to CVS

Guided Tour / Demo

• Importing an existing project to the repository• Checking out a project to your work area• Updating your work area• Editing files, checking in/committing new versions to the

repository• Comparing changes between versions (‘diff’ing)• Advanced features• Customising CVS

Page 48: An Introduction to CVS

Guided Tour / Demo

• Importing an existing project to the repository• Checking out a project to your work area• Updating your work area• Editing files, checking in/committing new versions to the

repository• Comparing changes between versions (‘diff’ing)• Advanced features• Customising CVS

Page 49: An Introduction to CVS

Guided Tour / Demo

• Importing an existing project to the repository• Checking out a project to your work area• Updating your work area• Editing files, checking in/committing new versions to the

repository• Comparing changes between versions (‘diff’ing)• Advanced features• Customising CVS

Page 50: An Introduction to CVS

Guided Tour / Demo

• Importing an existing project to the repository• Checking out a project to your work area• Updating your work area• Editing files, checking in/committing new versions to the

repository• Comparing changes between versions (‘diff’ing)• Advanced features• Customising CVS

Page 51: An Introduction to CVS

WinCVS: Configuration

Your login

Page 52: An Introduction to CVS

WinCvs: Main screen

file view

status view

modulesst

ate

icon

revi

sion

num

ber

file

type

Page 53: An Introduction to CVS

Checking out the sources

Page 54: An Introduction to CVS

Source history & diff

Page 55: An Introduction to CVS

Commit, Update & Tag

Page 56: An Introduction to CVS

When to commit

• Commit to mark a working state that you might want to return to later.

• Commit related files in a single operation. Use a common log message for all the files.

• Commit to backup your sources.• Commit from an office desktop to be able to

access the files from home much faster than through filesystem sharing.

Page 57: An Introduction to CVS

Working on branches

1.1 1.2 1.3

release_1

cvs tag release_1

cvs up -r rel_1_fix

1.4

release_2

cvs tag release_2

1.2.2.1 1.2.2.2

patch

rel_

1_fixcvs tag -b rel_1_fix

Page 58: An Introduction to CVS

Branch if you need ...

• to create sustaining (patch) releases• to have multiple development lines from a

single repository• to do experimental development to merge

later or forget about it• to keep temporary state of development

without affecting builds

Page 59: An Introduction to CVS

Common CVS commandscvs [cvs-options] command [cmd-options]

[files]cvs checkout Check out source for editing.cvs add Add new file/directory to repository.cvs remove Remove an entry from the repository.cvs status Show status of checked out files.cvs log Show revision history for files.cvs diff Compare working files to version in repository or

versions inside the repository.cvs update Bring working files into sync with repository.cvs commit check files into the repositorycvs tag Label the sources.

Page 60: An Introduction to CVS

Advisory locksDeveloper A

Developer B

CVS serveredit/watch

Editors:

Developer A

Editors:

Developer A

Developer B

edit

email alert

Page 61: An Introduction to CVS

Links

• Official CVS site: http://www.cyclic.com

• CVS Bubbles: http://www.loria.fr/~molli/cvs-index.html

• CVS for Web development: http://durak.org:81/cvswebsites

• WinCvs: http://www.wincvs.org

• jCVS: http://www.jcvs.org/

• Netscape’s Mozilla under CVS: http://cvs-mirror.mozilla.org/webtools/tindertest/showbuilds.cgi?tree=SeaMonkey

• FreeBSD CVS repository: http://www.freebsd.org/support.html#cvs

Page 62: An Introduction to CVS

Q&A

Q&AYour Time

Page 63: An Introduction to CVS

About

For suggestions : [email protected]

Thanks to Open Source CommunityThanks to all my team members for their comments and suggestions.A special thanks to Vijay Ananth K for his motivation.