Version Control With CVS


Published on is dedicated to software configuration, build and Release management. This covers CVS, VSS (Visual Source Safe),Perforce, SVN(Subversion) MKS Integrity, ClearCase,TFS,CM Synergy, Best Practices ,AnthillPro, Apache Ant, Maven, Bamboo, Cruise Control and many more tools.

File Can be downloaded from:

Published in: Technology

Version Control With CVS

  1. 1. Version control with CVS scmGalaxy Author: Rajesh Kumar [email_address]
  2. 2. Objectives <ul><li>Be able to setup an SCM tool (CVS) </li></ul><ul><li>Be able to setup WinCVS client </li></ul><ul><li>Be able to setup an IDE like eclipse against the CVS </li></ul><ul><li>Be able to administer a CVS repository </li></ul><ul><li>Understand how tagging, branching and merging works </li></ul>
  3. 3. Expectations <ul><li>My expectation </li></ul><ul><ul><li>Be able to configure an SCM tool in any project from the scratch </li></ul></ul><ul><ul><li>Ensure that you get a good handle to various administrative features of CVS </li></ul></ul><ul><ul><li>Ensure that you understand how authorization and authentication can be setup for a project </li></ul></ul><ul><ul><li>Ensure that we discuss various strategies of tagging, branching and releasing code from CVS </li></ul></ul><ul><ul><li>Give you an overview of other tools and their features </li></ul></ul><ul><li>Your expectations? </li></ul>
  4. 4. Agenda <ul><li>Introduction to CVS </li></ul><ul><li>Installation and configuration of CVS </li></ul><ul><li>Administration of a repository </li></ul><ul><li>Authentication and authorization </li></ul><ul><li>CVS client configuration </li></ul><ul><li>Integration with Eclipse </li></ul><ul><li>Tagging, Branching and merging </li></ul><ul><li>Integrating eclipse with multiple branches </li></ul><ul><li>Integration with ANT </li></ul><ul><li>SCM tools comparison matrix </li></ul>
  5. 5. CVS – concurrent versioning system
  6. 6. Version management tools <ul><li>The primary features supported by most version management tools are </li></ul><ul><ul><li>Version management </li></ul></ul><ul><ul><li>Concurrent development (lock or merge) </li></ul></ul><ul><ul><li>Client server model </li></ul></ul><ul><ul><li>Branching </li></ul></ul><ul><ul><li>Tagging </li></ul></ul><ul><ul><li>Multiplatform support </li></ul></ul><ul><ul><li>Integration with IDE </li></ul></ul><ul><ul><li>Multiple authentication modes </li></ul></ul>
  7. 7. Selection criteria <ul><li>Criteria </li></ul><ul><ul><li>Locking and merging </li></ul></ul><ul><ul><li>Authentication and authorization mechanism </li></ul></ul><ul><ul><li>Need for distributed repositories / distributed clients </li></ul></ul><ul><ul><li>Web interface </li></ul></ul><ul><ul><li>Licenses (cost and ease of setup) </li></ul></ul><ul><li>Mostly the client / organization standard will be used as the default for a project </li></ul><ul><li>However, in case we are presented with a ground up scenario, then the criteria listed above can be used for selection of the tool </li></ul>
  8. 8. Selection criteria – lock and merge <ul><li>Locking and merging </li></ul><ul><ul><li>Some tools allow multiple concurrent edits and a first come first serve check in. </li></ul></ul><ul><ul><li>Others work on a lock and check-in mode. </li></ul></ul><ul><ul><li>Some tools can be configured to function is either of the 2 ways </li></ul></ul><ul><ul><li>The feature being supported by the tool should be well understood before the choice is made </li></ul></ul><ul><ul><li>More important than concurrent editing is the conflict management and merge support </li></ul></ul><ul><ul><li>Most tools support good merge features for text files </li></ul></ul><ul><ul><li>Distributed development across locations may mandate a lock base editing </li></ul></ul>
  9. 9. Selection criteria – Authentication mechanism <ul><li>Authentication and authorization mechanism </li></ul><ul><ul><li>The key question is how will users authenticate themselves and at what level can the authorization be provided </li></ul></ul><ul><ul><li>Most tools support a simple text file based user repository creation and a simple name password based authentication </li></ul></ul><ul><ul><li>Integrating the same with the organization wide security controller (windows PDC, UNIX user accounts etc.) could be advantageous </li></ul></ul><ul><ul><li>Authorization at a file / directory level would be good to have, but administering the same will be an additional task </li></ul></ul><ul><ul><li>Often within each folder, it may be imperative to setup file level permissions. In such cases a separate repository or a separate module within the same repository could be used </li></ul></ul>
  10. 10. Selection criteria - distributed repositories <ul><li>Need for distributed repositories / distributed clients </li></ul><ul><ul><li>With the advent of distributed development the need for multiple teams accessing the same set of files from different locations arises </li></ul></ul><ul><ul><li>Distributed locations brings with it the challenges of single repository (speed) and multiple repositories (synch up) </li></ul></ul><ul><ul><li>Some tools like clear case support automated replication, while others like CVS only support repository synch up using a scheduled job </li></ul></ul><ul><ul><li>The cons of one over the other needs to be understood while making the choice </li></ul></ul><ul><ul><li>Dual repositories could bring with it issues when merging code </li></ul></ul>
  11. 11. About CVS <ul><li>Written in the early 1990s as CVS for UNIX platform </li></ul><ul><li>Built on top of an earlier popular SCM tool called RCS </li></ul><ul><li>CVSNT is an offshoot from CVS and was created specifically for the NT platform </li></ul><ul><li>It has more features such as PAM (pluggable authentication modules), integration with Windows authentication, binary files merge etc. </li></ul>
  12. 12. Advantages of using CVSNT <ul><li>Free and open source </li></ul><ul><li>Large community of users </li></ul><ul><li>Simple and easy to administer </li></ul><ul><li>Rich basic level features – tagging, branching, revision control, scripts etc </li></ul><ul><li>Allows authentication with windows domains </li></ul><ul><li>Multiple connectivity options –ssh, ssl, plain sockets </li></ul><ul><li>Supports notifications on commit </li></ul><ul><li>Good documentation on the internet </li></ul>
  13. 13. What CVS does not support <ul><li>Fairly old code base and therefore comes with a few inefficiencies </li></ul><ul><li>Renaming files and changes to directory structure are hard to manage </li></ul><ul><li>Batch commits are not atomic (not transactional) </li></ul><ul><li>Single central repository and does not support distributed repositories or auto-synch up etc. </li></ul>
  14. 14. Installation and setup of CVS
  15. 15. Exercise <ul><li>Exercise 1 – install CVS </li></ul>
  16. 16. Demonstrate <ul><li>Demonstrate setting up of a repository </li></ul><ul><li>Setup users in the passwd file </li></ul><ul><li>Demonstrate importing a module into the repository </li></ul><ul><li>Demonstrate adding a module into the repository </li></ul><ul><li>Setup WinCVS to access the repository </li></ul>
  17. 17. Internals of a repository
  18. 18. Internals of a repository <ul><li>Each file of the project is stored as a ‘xxx,v’ file in the repository. </li></ul><ul><li>The CVS folder in each directory has a file called fileattr.xml to help in file and directory level authorization </li></ul>
  19. 19. Internals of a repository - CVSROOT <ul><li>The CVSROOT is the directory where CVS stores all the administrative files </li></ul><ul><ul><li>Passwd – stores the pserver user IDs and passwords </li></ul></ul><ul><ul><li>Email notification files </li></ul></ul><ul><ul><li>History information files </li></ul></ul><ul><ul><li>The config file has a few modifiable configurations </li></ul></ul><ul><ul><ul><li>LogHistory – used to configure the various log levels </li></ul></ul></ul><ul><ul><ul><li>SystemAuth – used to specify the use of pserver auth mode </li></ul></ul></ul><ul><ul><ul><li>Useradminoptions – used to specify if admin commands can be executed by all users </li></ul></ul></ul>
  20. 20. Internals of a repository – project files <ul><li>File storage </li></ul><ul><ul><li>The project directory is where the actual project files are stored in RCS format. </li></ul></ul><ul><ul><li>This format ensures that the same file is used to store multiple versions of the file </li></ul></ul><ul><ul><li>Historical, tag related, branch related data is stored in a single file </li></ul></ul><ul><li>Authorization </li></ul><ul><ul><li>File and directory level permission to various users can be controlled using OS level permissions – group and user level permissions </li></ul></ul><ul><ul><li>CVS also provides utilities to manage file level authorization </li></ul></ul>
  21. 21. How CVS works <ul><li>The CVSNT service listens to a port on the server for CVS commands </li></ul><ul><li>One of the many protocols like SSH is used to send across commands from the client to the server </li></ul><ul><li>The repository root, user information has to be sent each time one needs to execute a command </li></ul><ul><li>The command executes on the local machine and as a part of the execution communicates with the server </li></ul>
  22. 22. CVS commands <ul><li>C:Documents and Settingsmanojk>set CVSROOT=C:softwareCVS_MainRepositoriesClient_one </li></ul><ul><li>C:Documents and Settingsmanojk>cvs --help </li></ul><ul><li>Usage: cvs [cvs-options] command [command-options-and-arguments] </li></ul><ul><li>where cvs-options are -q, -n, etc. </li></ul><ul><li>(specify --help-options for a list of options) </li></ul><ul><li>where command is add, admin, etc. </li></ul><ul><li>(specify --help-commands for a list of commands </li></ul><ul><li>or --help-synonyms for a list of command synonyms) </li></ul><ul><li>where command-options-and-arguments depend on the specific command </li></ul><ul><li>(specify -H followed by a command name for command-specific help) </li></ul><ul><li>Specify --help to receive this message </li></ul>
  23. 23. CVS – authentication and authorization
  24. 24. AT and AZ <ul><li>Authentication (AT) – the process of identifying a user and checking the password against the store </li></ul><ul><li>Authorization (AZ) – the mechanism of granting certain roles / permissions to an authenticated user </li></ul><ul><li>CVSNT (and CVS on Unix), support various authentication mechanisms such as </li></ul><ul><ul><li>Pserver – cvs manages the user IDs </li></ul></ul><ul><ul><li>SSPI – CVS uses NT permissions </li></ul></ul><ul><ul><li>Ext / ssh – cvs uses Unix users </li></ul></ul><ul><li>Authorization can be managed using file permissions or at a repository level </li></ul>
  25. 25. CVS protocols - pserver <ul><li>Pserver </li></ul><ul><ul><li>allows users to connect to CVS server using usernames and passwords stored in the CVS repository </li></ul></ul><ul><ul><li>Each user has an alias NT user (can be reused for multiple users) </li></ul></ul><ul><ul><li>Authorization is based on the alias NT user </li></ul></ul><ul><ul><li>Password is stored on the server in an encrypted format </li></ul></ul><ul><li>:pserver:[[ user ][: password ]@][ hostname :[ port ]]/ path </li></ul><ul><li>By adding users to the readers and writers file under the CVSROOT directory, users with read-only and read-write permissions can be defined </li></ul><ul><li>Disadvantages for pserver protocol </li></ul><ul><ul><li>Password encryption is weak and over the network the password can be read and broken easily </li></ul></ul><ul><ul><li>Generally advised not to use pserver protocol </li></ul></ul>
  26. 26. CVS protocols - sserver <ul><li>Sserver </li></ul><ul><ul><li>Uses the passwd file as the store for user names and password </li></ul></ul><ul><ul><li>The sserver protocol uses SSL as the communication layer and ensures that the password is communicated over SSL </li></ul></ul><ul><li>:pserver:[[ user ][: password ]@][ hostname :[ port ]]/ path </li></ul>
  27. 27. CVS protocols - SSPI <ul><li>SSPI </li></ul><ul><ul><li>Allows authentication using an NT user/password </li></ul></ul><ul><ul><li>If the user is logged into the client machine then the user need not even send credentials to the server machine </li></ul></ul><ul><ul><li>Different domain logins can be used </li></ul></ul><ul><li>:sspi:username@servername:/test </li></ul><ul><li>The passwd file can list a subset of the NT domain users who should be allowed access </li></ul><ul><li>NT file permissions can be used to authorize file / directory level permissions </li></ul>
  28. 28. CVS protocols - others <ul><li>Ext and ssh </li></ul><ul><ul><li>used more on the UNIX platforms </li></ul></ul><ul><ul><li>Uses rsh mode of executing cvs commands </li></ul></ul><ul><ul><li>Depends on UNIX authentication and user store </li></ul></ul><ul><li>Gserver </li></ul><ul><ul><li>Uses a GSS-API to support authentication </li></ul></ul><ul><li>Kserver </li></ul><ul><ul><li>Uses kerbros server for authentication </li></ul></ul><ul><li>Local </li></ul><ul><li>Fork </li></ul>
  29. 29. Suggested ways to authentication Ssh, gserver, sserver Non-windows Non-windows Ssh Non-windows Windows sserver Windows Windows Protocol for authentication Server platform Client platform
  30. 30. Authorization and CVS <ul><li>In CVS, automatically the file and directory level permissions will be used to manage the authorization </li></ul><ul><li>The permission given to the alias user (pserver) or the real users (sspi) will reflect on the cvs client </li></ul><ul><li>At a repository level it is possible to control read and read-write access to the repository </li></ul><ul><li>Using cvs commands a more fine grain ACL can be setup for each file if need be </li></ul>
  31. 31. AZ - Readers, writers and admin <ul><li>CVS allows setting up of users as read-only, read-write and admin users </li></ul><ul><li>The CVSROOT in the repository has 3 files that define the roles of read-only, read-write and admin users </li></ul><ul><li>At a repository level CVS allows the ability to setup 3 files </li></ul><ul><ul><li>Readers – userids appearing in this file will be given read-only access to the repository </li></ul></ul><ul><ul><li>Writers – userids appearing in this file will be given read-write access to the repository </li></ul></ul><ul><ul><li>admin – userids appearing in this file will be given rights to execute admin commands </li></ul></ul>
  32. 32. Authorizing CVS administrators <ul><li>CVS administrators are a set of users who can execute the “cvs admin …” commands </li></ul><ul><li>If the property SystemAuth in the config file is set to yes , then all users in the admin file and the systems administrators group will be given admin rights </li></ul><ul><li>If the property SystemAuth in the config file is set to no , then only users in the admin file will be given admin rights </li></ul><ul><li>In this file a list of users can be authenticated against pserver or the domain needs to be listed, 1 per line </li></ul>
  33. 33. AZ files and directories <ul><li>CVS allows setting up of file and directory level authorization </li></ul><ul><li>Command: Cvs lsacl <filename> </li></ul><ul><ul><li>lists the file / directory level access control </li></ul></ul><ul><li>Command: cvs chacl –a <read,write> -u <userid> <resource – file / dir> </li></ul><ul><ul><li>Changes the acl for a file </li></ul></ul><ul><li>A combination of file permissions using NT user permissions and the acl commands can be used to control access at a file level </li></ul>
  34. 34. Exercise <ul><li>Exercise 2 </li></ul>
  35. 35. CVS client operations
  36. 36. Files in the repository
  37. 37. Demo <ul><li>Demonstrate check-in, update, commit </li></ul><ul><li>Demonstrate the storage mechanism of text and binary files </li></ul><ul><li>Demonstrate integration with external diff tool </li></ul><ul><li>Demonstrate merge of files </li></ul><ul><li>Demonstrate reserved edit </li></ul><ul><li>Demonstrate graph </li></ul><ul><li>Demonstrate conflict management </li></ul>
  38. 38. Exercise <ul><li>Exercise 3 </li></ul>
  39. 39. Demo <ul><li>Demonstrate setting up of eclipse with CVS </li></ul>
  40. 40. Exercise <ul><li>Exercise 4 </li></ul>
  41. 41. Keywords in CVS <ul><li>CVS is capable of examining the source file for a few keywords and replacing them with real time values </li></ul><ul><li>E.g. </li></ul><ul><ul><li>$Author$ will be replaced with $Author: manoj$ with each check-in </li></ul></ul><ul><ul><li>It makes the files capture the comments, time of check-in etc. </li></ul></ul><ul><ul><li>It can help in tracing the need for the change and the user responsible for the change etc </li></ul></ul>
  42. 42. Keywords - list <ul><li>Keywords list </li></ul><ul><ul><li>Author – user name </li></ul></ul><ul><ul><li>Date – time of check-in </li></ul></ul><ul><ul><li>Header – all header values, including author, date, path revision info etc. </li></ul></ul><ul><ul><li>Name – name of the tag / branch into which the check occurred </li></ul></ul><ul><ul><li>Log – the message given at the time of check-in </li></ul></ul><ul><ul><li>Revision – the version number </li></ul></ul>
  43. 43. Tagging CVS <ul><li>The number of versions that each file take is dependent on each owner </li></ul><ul><li>However, when a delivery needs to be done, all files across multiple versions need to be taken. </li></ul><ul><li>One needs to take these files and have the ability to recreate the version to solve a bug if need be </li></ul><ul><li>Tagging allows us to set a string as the “tag” to various files each with different versions </li></ul><ul><li>A tag is like a snapshot that can be recreated </li></ul>
  44. 44. Rules in tagging <ul><li>HEAD and BASE are reserved tag names </li></ul><ul><ul><li>HEAD – refers to the most recent version of a file in the trunk branch </li></ul></ul><ul><ul><li>BASE – refers to the most recent version the client has synchronized with the repository </li></ul></ul><ul><li>Tag names is usually used to describe a release and is either the same or has a correlation to a release number too </li></ul><ul><li>When a code base is tagged the BASE versions of the client will be tagged with the tag name </li></ul><ul><li>A tag can also be moved with versions – same tag is used with each check-in to denote the latest file </li></ul>
  45. 45. Demonstrate <ul><li>Setting up tags </li></ul><ul><li>Retrieving files based on a tag </li></ul><ul><li>Diff between 2 tags </li></ul><ul><li>Reusing the same tag name across versions </li></ul>
  46. 46. Note on tags <ul><li>Uses </li></ul><ul><ul><li>A tag can be used to retrieve files belonging to a particular release </li></ul></ul><ul><ul><li>A tag can be used to check the number of modifications as compared to the previous release </li></ul></ul><ul><li>A tag can be given to a file, group of files, a directory or a module </li></ul><ul><li>It is usually effective only at a module level </li></ul><ul><li>It has very little impact on the space consumed, so it is a good practice to tag the repository often </li></ul>
  47. 47. Exercise <ul><li>Exercise 5 </li></ul>
  48. 48. Branching <ul><li>Branching provides us with a way to work on 2 separate branches of the same code repository </li></ul><ul><li>It is aimed at providing an option to allow a repository multiple evolution cycles </li></ul><ul><li>Each branch there on becomes a separate repository </li></ul><ul><li>On a need basis branches can be merged with one another </li></ul><ul><li>Branching as a feature is very powerful and needs to be exploited with care and a thorough strategy needs to be evolved before one proceeds with it </li></ul>
  49. 49. Use of branches <ul><li>Bug fix management - Use long branches for bug fixes, and merge the changes to the trunk. </li></ul><ul><li>Experimental work , such as experimental code or a new web page design </li></ul><ul><li>Major changes , such as a complete code rewrite </li></ul><ul><li>Release candidates for testing - Use long branches, and merge changes to the trunk. You can convert the branch to a bug fix-management branch after release. </li></ul><ul><li>Multiple versions of a product – use a branch to mark a release of a product version so that the same version can be recreated or supported after release </li></ul>
  50. 50. Branching in CVS
  51. 51. Demonstrate <ul><li>Demo branching </li></ul><ul><li>Demo retrieval of code from a particular branch using win cvs and eclipse </li></ul><ul><li>Demonstrate merging back of files between 2 branches </li></ul>
  52. 52. Branching strategies <ul><li>There is no single way to approach branching strategies </li></ul><ul><li>However a few philosophies help in the strategy phase </li></ul><ul><li>Primarily address the following questions </li></ul><ul><ul><li>When to branch? </li></ul></ul><ul><ul><li>What should each branch be used for? </li></ul></ul><ul><ul><li>Which branch should be sticky to which environment? </li></ul></ul><ul><ul><li>How should merges be done? </li></ul></ul>
  53. 53. Branch strategy 1 – Basically stable <ul><li>The basically stable philosophy advises that the trunk should have the stable version of code </li></ul><ul><li>Here only release candidate code is merged with the trunk and the production environment takes a snapshot of the trunk </li></ul><ul><li>Each time a release or a fix needs to be done, the trunk is branched off. Once QA certifies the stability of the code the branch is merged back to the trunk </li></ul>
  54. 54. Branch strategy 2 – Basically unstable <ul><li>Here the trunk has the latest code and not necessarily the most stable version. </li></ul><ul><li>All development happens on the trunk and </li></ul><ul><li>Each release is branched off separately for support </li></ul><ul><li>The production version refers to one of release candidates </li></ul>
  55. 55. Merges <ul><li>Any 2 branches can be merged </li></ul><ul><li>Freeze development and then begin a merge </li></ul><ul><li>Use cvs tools / command line to get a list of conflicts </li></ul><ul><li>Tag both branches before you merge </li></ul><ul><li>Tag again after you have merged </li></ul><ul><li>A merge does not mean that a branch is physically dead </li></ul><ul><li>Think about merge frequency </li></ul><ul><ul><li>Always merge a support branch and the trunk before the trunk is branched off for a new release </li></ul></ul><ul><ul><li>Each new release branch may need to synch up with the trunk at regular intervals </li></ul></ul>
  56. 56. Exercise <ul><li>Exercise 6 </li></ul>
  57. 57. CVS continuous maintenance tasks <ul><li>Back up of the repository </li></ul><ul><ul><li>The repository directory can be backed up as though it were another directory </li></ul></ul><ul><ul><li>Ensure that CVS server is stopped to avoid any access to the CVS server during backup </li></ul></ul><ul><ul><li>In order to restore a repository, the restored directory can be setup as a new repository on a new server </li></ul></ul><ul><li>Using admin commands it is possible to remove particular versions of a file. </li></ul><ul><li>Cleanup a few versions of binary files </li></ul><ul><li>Use a SAN or a RAID disk to store repositories and reduce risk of disk crash </li></ul>
  58. 58. Other SCM tools Projects in Mindtree Consulting
  59. 59. Comparison of various SCM tools <ul><li>Parameters for comparing SCM tools </li></ul><ul><ul><li>Cost and licensing model </li></ul></ul><ul><ul><li>Richness of client and command line tools </li></ul></ul><ul><ul><li>Integration with IDE of choice </li></ul></ul><ul><ul><li>Atomic commits </li></ul></ul><ul><ul><li>Architecture </li></ul></ul><ul><ul><li>Repository size and optimal storage </li></ul></ul><ul><ul><li>Adaptability to name and structural changes </li></ul></ul><ul><ul><li>Distributed and synchronous repositories </li></ul></ul><ul><ul><li>Reliability </li></ul></ul><ul><ul><li>Stability </li></ul></ul>
  60. 60. CVS <ul><li>Free license and extensive online help  </li></ul><ul><li>Many CVS clients – WinCVS, Tortoise CVS, CVSWeb etc  </li></ul><ul><li>Excellent command line tools  </li></ul><ul><li>Integrates with most IDEs – eclipse, etc  </li></ul><ul><li>Commits are not atomic  </li></ul><ul><li>Based on a client-server model  </li></ul><ul><li>Stored text files in an incremental fashion. Repository size is less than other tools  </li></ul><ul><li>Does not support renaming / copying of files  </li></ul><ul><li>Does not support distributed and synchronous repositories. Repository itself can be replicated and setup afresh  </li></ul>
  61. 61. CVS (contd) <ul><li>Very reliable and is being used in most projects  </li></ul><ul><li>Stable code base and good support for UNIX and Windows platforms   </li></ul><ul><li>Works on a concurrent edit model. </li></ul><ul><li>Widely accepted and still the most popular SCM tool </li></ul>
  62. 62. VSS <ul><li>Needs to be purchased separately. Usually comes along with MSDN, etc.  </li></ul><ul><li>Proprietary client. No official web client </li></ul><ul><li>Command line tool is satisfactory  </li></ul><ul><li>Integrates well with Plug-in to integrate it with eclipse. Not widely used by non-MS projects  </li></ul><ul><li>Commits are not atomic  </li></ul><ul><li>Based on a file share model. This means a check-in needs direct access (network share) to the repository. Access primarily intended over the intranet  </li></ul><ul><li>File and internal DB is used. Repository size is usually larger than CVS </li></ul>
  63. 63. VSS (contd..) <ul><li>Partial support for file renaming and directory movement  </li></ul><ul><li>Does not support distributed repositories </li></ul><ul><li>Not known to be reliable (huge issues with version history loss)  </li></ul><ul><li>The internal DB seems to have issues with large data and large teams. Corruption of the DB is widely reported  </li></ul><ul><li>No support for UNIX clients   </li></ul><ul><li>Works on a lock and edit model in most cases </li></ul><ul><li>Used mostly in MS projects. Loss of data is an accepted fact across users   </li></ul>
  64. 64. Clear case <ul><li>Expensive and with enterprise features the cost goes up. Licensing is per seat  </li></ul><ul><li>Proprietary client but the client is rich in features  </li></ul><ul><li>Web views are supported  </li></ul><ul><li>Integrates with leading IDEs  </li></ul><ul><li>Commits are atomic  </li></ul><ul><li>Proprietary RPC model of communication. Preferable to use it in the same LAN  </li></ul><ul><li>Supports renaming and changing of repository structure  </li></ul><ul><li>Excellent support for distributed repositories   </li></ul><ul><li>Reliable and stable.  </li></ul><ul><li>Support could be expensive  </li></ul>
  65. 65. Clear case <ul><li>Works on a lock and edit model. Users workspace can also be a shared folder managed by cc  </li></ul><ul><li>One of the best tools with a rich feature list. </li></ul><ul><li>Complexity and ramp-up time is high. Administrators are hard to find.  </li></ul>
  66. 66. Sub version <ul><li>Open source and free to use  </li></ul><ul><li>Variety of clients. Most of them are under development  </li></ul><ul><li>No web interface yet  </li></ul><ul><li>Rich command line tool  </li></ul><ul><li>Integrates with Eclipse. Other IDEs will follow suit  </li></ul><ul><li>Commits are atomic  </li></ul><ul><li>Client server model  </li></ul><ul><li>Renames and structural changes are supported   </li></ul><ul><li>Supports distributed repositories, using a 3 rd party utility  </li></ul><ul><li>No reports of any major issues with reliability or stability  </li></ul><ul><li>Has been created to deliver in areas where CVS is weak.  </li></ul><ul><li>Most new projects in the non-MS arena choose Subversion  </li></ul><ul><li>Support for more IDEs and rich online documentation will take it a long way  </li></ul>
  67. 67. In Summary <ul><li>If you have distributed teams and need to support multi-site then choose clear case. Cost could be high but administration will be easier </li></ul><ul><li>If you have single shore team and need a reliable SCM – go for CVS or SVN. SVN may need more acceptance before it gets rich tools </li></ul><ul><li>If you are working on a MS platform and team size is relatively small, choose VSS for ease of use with </li></ul>
  68. 68. References <ul><li> </li></ul><ul><li> </li></ul><ul><li> </li></ul><ul><li> </li></ul>
  69. 69. Thank You ! Author: Rajesh Kumar [email_address]