Tuesday, December 14, 2010

CVS Ignore Files

How To Ignore Files from Release?
When synchronizing resources, it is possible that there are some resources that you do not want to release to the stream.  There are two ignore facilities provided, allowing the user to specify which resources should be excluded from catch up and release operations.
The first is a global ignore facility, provided by the workbench. The second is the CVS ignore facility, which reads the contents of a special file .cvsignore to determine what to ignore.

Why Ignore Files When Synchronizing?
There are many files that a user may not want to release to the repository.  For example, external editors may create temporary files in your project.  Compilation of .java files creates .class files, and
likewise many build operations result in binary files. These files, when taken together, may be quite large.  In addition, they may be re-generated whenever a build is performed, resulting in many  outgoing changes. Typically these are not files that one wants to share with other members of a team or persist in the repository. 

Global Ignore Facility
A global ignore facility is provided by the workbench via the Team preference page. There is a list of file patterns against which resources will be matched before they are considered as version control candidates.  These patterns may contain the wildcard characters "*" and "?".  "*" represents any sequence of zero or more characters.  "?" represents any one character.  For example, you can specify a pattern of "*~", which would match any temporary files that end with "~".   Any file or directory that matches any one of the patterns will be ignored during  catch up or release operations.  When you specify a file pattern to ignore, you can temporarily disable ignoring the file pattern by de-selecting it from the list; you do not have to remove the specified file pattern from the list.
The patterns in the global ignore facility are matched against resource names during a synchronize operation.  It is important to note that the path leading up to the resource name is not included in the matching.  For example, for the file "/path/to/file.txt", only the string "file.txt" is matched against the patterns.  This facility is not intended for specifying fully-qualified path names but for specifying globally-applicable patterns.

CVS Ignore Facility
The Eclipse CVS client recognizes a file named ".cvsignore" in each directory of a project.  This is a standard CVS facility and many existing CVS projects may contain this file.
This text file consists of a list of files, directories, or patterns.  In a similar way to the global ignore facility, the wildcards "*" and "?" may be present in any entry in the .cvsignore file.  Any file or subdirectory in the current directory that matches any one of the patterns will be ignored.  It is important to note that the semantics of this file differs from that of the global ignore facility in that it applies only to files and  directories in the same directory as the .cvsignore file itself.  A project may contain one .cvsignore file in each directory.  For more information, please visit  http:\\www.cvshome.org. 

When is a Resource Ignored?
Once a resource is under version control, it cannot easily be subsequently be ignored.  A resource comes under version control in the first place when a synchronize operation is performed on a resource or any of its parent folders.  You should consider, prior to performing your first  synchronize operation, which files and directories you wish to ignore, and add them to the appropriate ignore facility.  For example, consider the following scenario:
1. Create file "file.txt".
2. Synchronize "file.txt" with the server.
3. Add "file.txt" or a matching pattern to .cvsignore or to the global ignore facility.
4. Change file.txt.
5. Synchronize "file.txt" with the server.
6. Observe: file.txt is listed as an outgoing change.

Ignoring Resources that Appear in the Synchronization View
If you have selected the Team > Synchronize with Stream operation, but not yet released, you can still ignore them.  This despite the fact that the workbench already considers these files as being under version control.  You first have to delete the files that you want ignored (this is usually is not a problem since ignored files are either temporary or build results of your important files, the source).  Then add the ignore pattern using either the global or CVS ignore mechanism.  At this point you can rebuild your project so that the ignored files return and then synchronize your project with the stream. The files will now be ignored.

No comments: