From 4d84040a043f7c2be3353098786d1c4b334e6b25 Mon Sep 17 00:00:00 2001 From: gferg <> Date: Thu, 29 Nov 2001 15:26:55 +0000 Subject: [PATCH] updated --- .../CVS-BestPractices/CVS-BestPractices.sgml | 311 ++++++++++++++---- 1 file changed, 250 insertions(+), 61 deletions(-) diff --git a/LDP/ref/docbook/CVS-BestPractices/CVS-BestPractices.sgml b/LDP/ref/docbook/CVS-BestPractices/CVS-BestPractices.sgml index b2d9de5c..e89d282a 100644 --- a/LDP/ref/docbook/CVS-BestPractices/CVS-BestPractices.sgml +++ b/LDP/ref/docbook/CVS-BestPractices/CVS-BestPractices.sgml @@ -1,7 +1,7 @@ - + @@ -12,7 +12,7 @@ - + ]> @@ -25,10 +25,16 @@ Vivek Venugopalan -
vivekv@users.sourceforge.net
+
vivekv at users.sourceforge.net
+ +0.2 +2001-11-27 +vv +Incorporated first round of feedback and some minor fixes + 0.1 2001-11-20 @@ -53,8 +59,9 @@ projects. Introduction
-unknown -A tool is only as good as you use it +Henry David Thoreau (1817-1862) + +Men have become the tools of their tools.
@@ -72,7 +79,7 @@ a viable alternative to other commercial &SCM; tools. practices for deploying &CVSAB; as the backbone &SCMAB; tool for large software development projects. Having answered this question many times verbally as a bunch of gotchas on &CVSAB;, it was time to put -down on paper some of the best practices that I have adopted while managing +down on paper some of the best practices that will work well for &CVSAB; based projects. @@ -80,17 +87,16 @@ down on paper some of the best practices that I have adopted while managing Copyright Information - This document is Copyright © 2001 Vivek Venugopalan. - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free - Documentation License, Version 1.1 or any later - version published by the Free Software Foundation with no Invariant - Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the - license can be found in . - + This document is Copyright © 2001 Vivek Venugopalan. Permission +is granted to copy, distribute and/or modify this document under the terms of +the GNU Free Documentation +License, Version 1.1 or any later version published by the +Free Software Foundation with no Invariant Sections, no Front-Cover Texts, and +no Back-Cover Texts. A copy of the license can be found in . - This document may be reproduced and distributed in whole or in part, -in any medium physical or electronic, as long as this copyright notice is + This document may be reproduced and distributed in whole or in part, in +any medium physical or electronic, as long as this copyright notice is retained on all copies. Commercial redistribution is allowed and encouraged; however, the author would like to be notified of any such distributions. @@ -99,16 +105,13 @@ however, the author would like to be notified of any such distributions. this document must be covered under this copyright notice. That is, you may not produce a derivative work from this document and impose additional restrictions on its distribution. Exceptions to these rules may be granted -under certain conditions; please contact the author at the -address given below. +under certain conditions; please contact the author at the address given +below. In short, we wish to promote dissemination of this information through as many channels as possible. However, we do wish to retain copyright on the -document, and would like to be notified of any plans to redistribute -the same. - - If you have any questions, please contact -linux-howto@metalab.unc.edu +document, and would like to be notified of any plans to redistribute the same. + @@ -121,9 +124,9 @@ course be damaging to your system. Proceed with caution, and although this is highly unlikely, the author(s) do not take any responsibility for that. - All copyrights are held by their respective owners, unless -specifically noted otherwise. Use of a term in this document should not be -regarded as affecting the validity of any trademark or service mark. + All copyrights are held by their respective owners, unless specifically +noted otherwise. Use of a term in this document should not be regarded as +affecting the validity of any trademark or service mark. Naming of particular products or brands should not be seen as endorsements. @@ -136,17 +139,42 @@ major installation and backups at regular intervals. New Versions - - The version number of this document is &DOCVERSION;. - The latest version of this document can be obtained from The linux documentation project + The latest version of this document can be obtained from + + + + +My website + + + + +The linux documentation project + + + - + +Credits +The list of people who have provided inputs and information for this +paper in no particular order are. + + +Jens-Uwe Mager + + + +Jorgen Grahn + + + + + @@ -181,6 +209,10 @@ additions, comments and criticisms to the following email address : +Keep System clocks in Sync + + + Do not share the sandbox @@ -193,12 +225,35 @@ additions, comments and criticisms to the following email address : +Cleanup after completion + + + Check-in often + + +Server Configuration + + + +&CVSAB; Server side scripting + + + + +&CVSAB; Server notification + + + + + + + Branching and Merging @@ -258,7 +313,7 @@ additions, comments and criticisms to the following email address : -Institutionalizing and Process +Institutionalize in the Organization @@ -281,79 +336,174 @@ additions, comments and criticisms to the following email address : -Using GUI Tools +Using <acronym>GUI</acronym> Tools - Developers typically use integrated development environments that have +The traditional interface available for CVS is the command-line client. +There has also been a slew of GUI client applications that can +talk to a &CVSAB; server. These GUI clients provide a +point and click interface to the &CVSAB; repository. This +paper recommends using such GUI clients during the initial deployment of +&CVSAB; in an organization. + +Developers typically use integrated development environments that have the CM tools integrated into them. These tools minimize the learning for the developers about the intricacies of &CVSAB; usage and instead allow them to be productive from day one. Developers who are accustomed to other CM tools will find the &CVSAB; command-line interface daunting. The adoption and usage of -&CVSAB; can be improved by using GUI tools for &CVSAB; clients. GUI tools for -&CVSAB; are available at www.cvsgui.org. -GUI interfaces are available for most of the popular platforms (Windows, Mac -and Linux). In addition, on the Windows platform there is a SCC extension -that allows integration of &CVSAB; as the configuration control tool with -popular IDE. +&CVSAB; can be improved by using GUI tools for &CVSAB; clients. + + GUI tools for &CVSAB; are available at www.cvsgui.org. GUI interfaces are available for +most of the popular platforms (Windows, Mac and Linux). In addition, on the +Windows platform there is an SCC extension that allows +integration of &CVSAB; as the configuration control tool with popular +IDE. + Developer Sandbox The developer sandbox is where each developer keeps his -or her working copy of the code base. This is where they build, test and -debug the modules that they are working on. A sandbox can also be the area -where the staging build or the production build is done. Changes made in -the work area are checked into the &CVSAB; repository. In addition, changes -made in the repository by others have to be updated in the sandbox on a -regular basis. +or her working copy of the code base. In &CVSAB; this is referred to as the +working directory. This is where they build, test and debug the modules that +they are working on. A sandbox can also be the area where the staging build +or the production build is done. Changes made in the work area are checked +into the &CVSAB; repository. In addition, changes made in the repository by +others have to be updated in the sandbox on a regular basis. The best practices related to developers sandbox are: + + +Keep System clocks in Sync +&CVSAB; tracks change to source files by using the timestamp on the +file. If each client system date and time is not in sync, there is a +definite possibility of &CVSAB; getting confused. Thus system clocks must be +kept in sync by use of a central time server or similar mechanism. + + + + +Can CVS handle clients situated in different timezone? This is an area +that is not very familiar to me. I would like to hear some thoughts on the +same. + + + + Do not share the sandbox Sandboxes have to be unique for each developer or purpose. They should not be used for multiple things at the same time. A sandbox can be a working area for a developer or the build area for the final release. If such -workspaces are shared, then the developers themselves will not be aware of the +sandboxes are shared, then the developers themselves will not be aware of the changes made to the files resulting in confusion. In &CVSAB;, the sandbox is created automatically when a working copy is checked out for a &CVSAB; project using the cvs checkout {project-name} command. +In very large projects, it does not make sense for the developers to +check-out the entire source into the local sandbox. In such cases, they can +take the binaries generated by the build team on a regular basis for all those +components of the application that is not changed by them and only check-out +the parts that are built by the developer. + +For example, in a Java project, the build team can keep the results of +their last successful build in a standard location in the form of JAR files on +the network file servers. Individual developers will use a standard classpath +setup that has the network drives mounted on standard paths. Thus the +developers will automatically get the latest version of the files as required +by them. + Do not work outside the sandbox +The sandbox can be thought of as a controlled area within which &CVSAB; +can track for changes made to the various source files. Files belonging to +other developers will be automatically updated by &CVSAB;. Thus the developer +who lives within the sandbox will stand to gain a lot of benefits of +concurrent development. This benefit cannot be achieved for work done outside +a sandbox. -The sandbox can be thought of as a controlled area within which -&CVSAB; can track for changes made to the various source files. Files -belonging to other developers can be automatically updated by &CVSAB;. Thus -the developer who lives within the sandbox will stand to gain a lot of -benefits of concurrent development that cannot be done if work is done -outside a sandbox. + + Stay in Sync with the repository - To gain the benefits of working within a sandbox as mentioned above, -the developer must keep his or her workspace in sync with the main +the developer must keep his or her sandbox in sync with the main repository. A regular cvs update with the appropriate -tag will ensure that the sandboxes are kept up to date. +tag or branch name will ensure that the sandboxes are kept up to date. + + +Cleanup after completion + +Make sure that the sandbox is cleaned up after completion of the change. +This can be done in &CVSAB; by using the cvs release +command. This ensures that no old version of the code exists in the +development sandbox. As explained previously, pre-built binaries from the +build team can be used to ensure that all the parts of the application are +available to the developer without the need for a complete compilation in the +sandbox. + + + Check-in Often To help other developers keep their code in sync with your code, you -must check-in your code often into the &CVSAB; repository. As soon as a -piece of code is completed and tested, check-in the changes using a -cvs commit to ensure that your changes are committed to -the &CVSAB; repository. +must check-in your code often into the &CVSAB; repository. The best practice +would be to check-in soon as a piece of code is completed, reviewed and +tested, check-in the changes using a cvs commit to ensure +that your changes are committed to the &CVSAB; repository. + + &CVSAB; promotes concurrent development. Concurrent development is +possible only if all the other developers are aware of the ongoing changes on +a regular basis. + + +One of the bad practices that commonly occur is sharing +of source code files between developers by email. This works against most of +the best practices mentioned above. To share source code updates between two +developers, &CVSAB; must be used as the communication medium. This will +ensure that &CVSAB; is aware of the code change and can track +them. Thus, audit trail can be established if necessary. + + + + + + +Server Configuration +This section deals with best practices for &CVSAB; server side setup and +configuration. + + + +Server side scripting +Server side scripting refers to the ability to make &CVSAB; server +execute certain scripts when an event occurs. I am currently not aware of any +best practices in this area. Suggestions are welcome. + + + + +Server Notification + +The &CVSAB; server can be configured to notify through e-mails in the +event of a commit happening. This can be used to verify if code commits are +occurring during the course of a release build. If such commits occur, based +on the project policy, such commits can be ignored or the entire build +automatically restarted. @@ -378,6 +528,20 @@ applies those differences to the project at the tip of the trunk. owner assigned who will be responsible for. + + +Keep the list of configurable items for the branch or trunk. + + +The owner will be the maintainer of the contents list for the branch or +trunk. This list should contain the item name and a brief description about +the item. This list is essential since new artifacts are always added to or +removed from the repository on an ongoing basis. This list will be able to +track the new additions/deletions to the repository for the respective branch. + + + + Establish a working policy for the branch or trunk. @@ -485,7 +649,7 @@ release tagging practice (see ). Change Propagation -Change propagation practices explores how changes made to one version of +Change propagation practices explore how changes made to one version of the application are migrated to other living versions of the application. @@ -504,6 +668,20 @@ After the merge, the trunk code base must be tested to verify that the application is in proper working order. This must be kept in mind while preparing the project schedule. +In the case of changes occuring on branches for a long period of time, +these changes can be merged to the main branch on a regular basis even before +the release is made. The frequency of merge is done based on certain logical +points in the branch's evolution. To ensure that duplicate merging does not +occur, the following practice can be adopted. + + +In addition to the branch tag, a tag called {branch_name}_MERGED should be +created. This is initially at the same level as the last release tag for the +branch. This tag is then moved after each intermediate merge +by using the -F option. This eliminates duplicate merging +issues during intermediate merges. + + @@ -548,6 +726,9 @@ ensures that the build process is completely repeatable and consistent. In addition, the chances of a build with the wrong version of the application source files are reduced to a large degree. +By automating the build process, the task of building often becomes +less burdensome. + @@ -568,6 +749,10 @@ will surface during the build process itself (makefiles etc.,) or during the regression testing of the product (older version of the file checked in). +A penalty based system can be setup to handle wrong check-in. Having a +kitty for a post project party to which each person who makes a wrong check-in +will contribute a fixed amount will act a good penalty system. + @@ -593,6 +778,9 @@ the organization, tools such as &CVSAB; will be looked at as aiding this process instead of acting as a general development overhead. +Change management is quite a vast topic that cannot be done justice +here. Please look up some websites on change management. + @@ -635,3 +823,4 @@ evolving document. Please send your comments and ideas to &GFDL-FILE; +