Get
an overview of how the Eclipse Platform supports source-code
version control in software projects. We begin with
a brief discussion about the ideas for team code development,
then see how Eclipse works with CVS code repositories.
We'll also look at some of the source-code management
software tools supported through Eclipse plug-in extensions.
Most of today's applications are developed by a team
of people. Even small projects that involve only a few
developers require tight control over changes in source
code. This is a task for source-code management software.
Two core features must be supported by source-code version-control
software:
- A way to coordinate and integrate changes into the
source code
- A history of the work submitted by the team
As team members produce new work, they share this work
by committing those changes to the repository. Similarly,
when they wish to get the latest available work, they
update their local workspaces to the changes on the
repository. This means the project repository is constantly
changing as team members submit new work. In the other
words, the repository should represent the current state
of the project. At any point, team members can update
their workspaces from the repository and know they are
up to date.
Maintaining history is also important so you can compare
the current work against previous versions, and if needed,
revert to the older work. Coordinating the team's work
so that there is only one definition of the current
project state, and containing the integrated work of
the team are also essential to managing version control.
This coordination is probably the hardest goal to achieve.
An optimal model is one where any member of the team
can make changes to any resource he has access to. Because
two team members can commit changes to the same resource,
conflicts can occur and must be dealt with. This model
assumes that conflicts are rather unique. Unfortunately,
no source code exists in isolation; it typically contains
implicit or explicit dependencies on other resources.
Source code has references to artifacts described in
other source code resources. And this is the point where
source-code management software ends its work because
it isn't a substitute for project management. Project
managers must do their work: coordinating others' work,
and looking after schedules, project phases, and release
dates. Further, source-code management is not a substitute
for developer communication.
The Eclipse Platform offers the capability to share
code and work as a team on a software project. Eclipse
supports a wide range of code-management solutions,
thanks to its plug-in architecture (however, CVS support
comes out of box). The focal point of the Eclipse Platform
architecture is the workspace. The workspace
maintains everything necessary for building and testing
a software project. It contains the objects (source
code and resources). It also holds the configuration
settings for the project, the IDE, and the plug-ins.
The workspace is locally maintained on a developer's
machine, and teams collaborate through external repositories
that are meeting places for code parts from different
developers. Repositories are accessible through the
client-server architecture via the Internet.
The Eclipse Platform offers support for team development
operations directly from the workspace. This support
allows a developer to concurrently interact with several
separate repositories and versions of code or projects.
Resources within the workspace allow the team support
component to deal with version and configuration management
issues. Of course, single workspaces can access different
types of repositories simultaneously. The Eclipse Platform
does not provide its own code-management solution; it
always depends on external systems. The Eclipse Platform
has built-in support for only one (albeit the most popular)
source-code management system: Concurrent Versions System
(CVS). Other repositories are supported using the third-party
plug-ins described in
Support for third-party code management applications.
CVS started out as a collection of shell scripts in
1986, but it has evolved into the most popular source
code version management solution for software developers.
CVS is the open source client/server solution for code
versioning and is available for variety of platforms,
including Linux® and Windows® NT/2000/XP. See
Resources
for download links for CVS clients, servers, and source
code.
In general, the primary function of CVS is to record
the history of source files. When a group of developers
work on the same project, CVS insulates them from each
other. Every developer works separately, in his own
directory and merges (from time to time) the results
of the work with the CVS repository.
Eclipse has a built-in CVS client that is deeply integrated
with the Eclipse Platform IDE, which is implemented
as a separate perspective (CVS Repository Exploring
Perspective) for interacting with CVS. General Eclipse
settings for CVS are located under Window > Preferences
window > Team. After switching to the CVS Repository
Exploring Perspective, all CVS operations become available
(go to Window > Open Perspective > Other >
CVS Repository Exploring menu — see
Figure 1 and
Figure 2).
Figure 1. Switching to the CVS Repository
Exploring perspective
The first step is to set up a repository location that
defines connection parameters for the selected CVS server/repository.
Be sure to use SSH tunneling (extssh ).
Figure 2. Browsing CVS repositories
in the CVS Repository Exploring perspective
In the CVS team cooperation model, team members do
all of their work on their own workbenches, isolated
from others. Eventually, they will want to share their
work. They do this via CVS repositories. CVS uses a
branch model to support multiple courses of work that
are isolated from each other, but still highly interdependent.
Branches are where a development team shares and integrates
ongoing work. A branch can be thought of as a
shared workbench that is updated by team members as
they make changes to the source code. This model allows
individuals to work on a CVS team project, share their
work with others as changes are made, and access the
work of others as the project evolves.
A special branch, referred to as head, represents
the main course of work in the repository (a head is
often referred to as the trunk). As resources
are committed to the branch, these dependencies can
be affected. Ensuring the integrity of the dependencies
is important because the branch represents the current
project's state. Of course, at any point, a team member
could make use of the branch contents as the basis for
new work.
Those rules apply not only to the CVS: there are common
steps for source-code management within team projects
no matter what version-control software is in use. Below
is an example workflow that uses Eclipse's built-in
support for CVS:
1. Starting a new team project
Each new, empty Eclipse project can be shared through
CVS (or any other supported source code management system).
Developers can also share their existing code by migrating
it to the repository. To do this, use the Team >
Share Project option located in the context menu
that displays when you click the project main folder,
as shown below.
Figure 3. Sharing a local project
with the CVS repository
Another option is to create a new workbench project
by importing code from the selected branch of the CVS
repository. Simply select the appropriate branch (or
head), then select Checkout As Project from the
context menu in the CVS Repository Exploring Perspective,
as shown below.
Figure 4. Creating a new project
from the existing CVS repository
2. Working with code and making changes
Developers work with code locally via the Eclipse workbench,
creating new resources, modifying existing ones, writing
commentaries, and saving locally as they go.
3. Synchronizing local changes with the CVS repository
If a developer on a project is ready to commit his work,
the first step is to perform the update operation. This
will check the repository for incoming changes and add
them to that developer's local workbench. This ensures
that the developer knows the changes that might affect
the integrity of what he is about to commit. Compare
a local version against code stored in the repository
using the Compare With option in the project
context menu (see below).
Figure 5. Comparing the local version
against the repository
The next step is to resolve any conflict that eventually
appears and try to compile the code again. If everything
works, then perform the commit operation using the Team
> Commit option from the project context menu,
as shown below. This will integrate all changes into
the repository.
Figure 6. Committing changes to the
remote repository
4. Managing repositories
CVS allows developers to isolate changes into separate
lines of development, known as branches. When one developer
changes files on a branch, those changes do not appear
on the main trunk or on other branches. Those branches
are named subversions or code forks. Later,
moving changes from one branch to another branch (or
the main trunk) is performed by the merging operation.
Then revisions are committed. This effectively copies
the changes onto another branch. Eclipse makes it easy
to move between development branches using the Team
> Branch option from the project context menu.
Of course, when a development team maintains a large
repository, it is necessary to have a control over commit
and merge operations within projects. Eclipse/CVS integration
offers a special view: the CVS Repository History (see
below). It gives a quick preview on changes in the repository
performed by team members.
Figure 7. Viewing revision history
along with comments in the CVS Resource History window
The Eclipse Platform comes with a few utilities that
support code management. The most useful is the patch
function. It compares code from two sources, such as
a local workbench and the repository, then creates a
UNIX®-like patch file containing code differences
(see below). This file can be sent to developers to
upgrade source code to the newest version.
Figure 8. Creating a patch for source-code
distribution
5. Disconnecting a project from CVS
When the project development has ended and the team
wants to freeze source code, the final version
of the project can be removed from the head repository.
Disconnecting a project from CVS disables the repository
operations that can be performed on the project and
its resources, and optionally removes the CVS information
associated with the project.
Disconnecting operations can be performed from the
Team > Disconnect option in the project context
menu. By choosing this option, the Confirm Disconnect
from CVS dialog opens. When the project is disconnected
from the repository, the team must then decide what
to do with the CVS information. The first option is
"Delete the CVS meta information," which disables
the CVS team menu operations and removes the CVS folders
and their contents from the file system. The second
option is to use the "Do not delete the CVS meta
information," which disables the CVS team menu
operations, but leaves the CVS meta information.
CVS has a few crucial limitations: it is unable to
determine simultaneous changes within a single file
or across a whole collection of files, and it is unable
to detect logical conflicts between files. Its concept
of a conflict is purely textual, arising when two changes
to the same base file are near enough to spook the merge
command. CVS also doesn't offer any interactive collaboration
tools like messaging. Fortunately, CVS isn't the only
source code management software supported by the Eclipse
Platform. Developers can extend the Eclipse Platform's
functionality with plug-ins, and as of 4 Mar 2003, there
are 16 plug-ins for team development software. All were
created by the Eclipse community or by commercial software
vendors. Most of these plug-ins add support for a third-party
commercial source-code management system. The most valuable
plug-ins are those supporting popular enterprise code
management systems like Merant PVCS and Rational®
ClearCase. The CVS-SSH2 plug-in, for example, allows
access to CVS through an SSH2 session, and the Microsoft
Visual SourceSafe (VSS) team provider plug-in adds support
for the MS VSS product (also available on non-Windows
platforms, such as Linux).
However, my personal favorite plug-in is Koi (see
Resources). Even though it isn't strictly used for
source-code control, this innovative tool adds many
additional activities to collaborative development.
The current version supports workbench-to-workbench
messaging, shared markers, conflicting change notification,
shared calendar, and event notification. Koi uses XML-RPC
as the communications model in its client-server architecture.
The clients are individual Eclipse Platform instances
that communicate with a collaboration server that is
also an Eclipse plug-in. Koi uses a JDBC-accessed relational
database as data storage. A link to the full, categorized
registry of Eclipse plug-ins is available in
Resources.
Learn
- Join the Eclipse Platform community at
Eclipse.org. The Eclipse Platform source code
is licensed under the Common Public License. Eclipse.org
also has a glossary of terms and descriptions of Eclipse
projects, along with technical articles and newsgroups.
The Eclipse Platform whitepaper (at Eclipse.org) describes
in detail the major components and functions of Eclipse.
- Check out the
full categorized registry of Eclipse plug-ins.
- For background on the Eclipse Platform, see the
developerWorks article "Working
the Eclipse Platform."
- For an introduction to using the Eclipse Platform
and using Eclipse plug-ins to edit, compile, and debug
an application, see the developerWorks article "Getting
started with the Eclipse Platform."
- Read "Using the Eclipse GUI outside the Eclipse
Workbench"
Part 1,
Part 2, and
Part 3.
- Check out "Plug
a Swing-based development tool into Eclipse,"
"Create
native, cross-platform GUI applications,"
"Internationalizing
your Eclipse plug-in," and "Testing
your internationalized Eclipse plug-in."
- For an introduction to developing Eclipse plug-ins,
see "Developing
Eclipse plug-ins."
- Check out the "Recommended
Eclipse reading list."
- Browse all the
Eclipse content on developerWorks.
- Users new to Eclipse should check out
Eclipse project resources' Start Here.
- Expand your Eclipse skills by checking out IBM developerWorks'
Eclipse project resources.
- To listen to interesting interviews and discussions
for software developers, check out check out
developerWorks podcasts.
- For an introduction to the Eclipse platform, see
"Getting
started with the Eclipse Platform."
- Stay current with developerWorks'
Technical events and webcasts.
- Watch and learn about IBM and open source technologies
and product functions with the no-cost
developerWorks On demand demos.
- Check out upcoming conferences, trade shows, webcasts,
and other
Events around the world that are of interest to
IBM open source developers.
- Visit the developerWorks
Open source zone for extensive how-to information,
tools, and project updates to help you develop with
open source technologies and use them with IBM's products.
Get products and technologies
Discuss
- The
Eclipse Platform newsgroups should be your first
stop to discuss questions regarding Eclipse. (Selecting
this will launch your default Usenet news reader application
and open eclipse.platform.)
- The
Eclipse newsgroups has many resources for people
interested in using and extending Eclipse.
- Participate in
developerWorks blogs and get involved in the developerWorks
community.
|