 ------
 Introduction
 ------
 Pete Marvin King
 ------
 2008-08-13
 ------

~~ Licensed to the Apache Software Foundation (ASF) under one
~~ or more contributor license agreements.  See the NOTICE file
~~ distributed with this work for additional information
~~ regarding copyright ownership.  The ASF licenses this file
~~ to you under the Apache License, Version 2.0 (the
~~ "License"); you may not use this file except in compliance
~~ with the License.  You may obtain a copy of the License at
~~
~~   http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing,
~~ software distributed under the License is distributed on an
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~~ KIND, either express or implied.  See the License for the
~~ specific language governing permissions and limitations
~~ under the License.

~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/doxia/references/apt-format.html

Maven SCM Plugin

 The SCM Plugin offers vendor independent access to common scm commands by offering a set
 of command mappings for the configured scm. Each command is implemented as a goal.

* Goals Overview

The SCM Plugin has 16 goals:

 * {{{branch-mojo.html}scm:branch}} - branch the project

 * {{{validate-mojo.html}scm:validate}} - validate the scm information in the pom

 * {{{add-mojo.html}scm:add}} - command to add file

 * {{{unedit-mojo.html}scm:unedit}} - command to stop editing the working copy

 * {{{export-mojo.html}scm:export}} - command to get a fresh exported copy

 * {{{bootstrap-mojo.html}scm:bootstrap}} - command to checkout and build a project

 * {{{changelog-mojo.html}scm:changelog}} - command to show the source code revisions

 * {{{list-mojo.html}scm:list}} - command for get the list of project files

 * {{{checkin-mojo.html}scm:checkin}} - command for commiting changes

 * {{{checkout-mojo.html}scm:checkout}} - command for getting the source code

 * {{{status-mojo.html}scm:status}} - command for showing the scm status of the working copy

 * {{{update-mojo.html}scm:update}} - command for updating the working copy with the latest changes

 * {{{diff-mojo.html}scm:diff}} - command for showing the difference of the working copy with the remote one

 * {{{update-subprojects-mojo.html}scm:update-subprojects}} - command for updating all projects in a multi project build

 * {{{edit-mojo.html}scm:edit}} - command for starting edit on the working copy

 * {{{tag-mojo.html}scm:tag}} - command for tagging a certain revision

 []

* Usage

  Instructions on how to use the SCM Plugin can be found {{{usage.html}here}}.

* Examples

  To provide you with better understanding on some usages of the Maven SCM Plugin,
  you can take a look into the following examples:

 * {{{examples/bootstrapping-with-pom.html}Bootstrapping using a POM file}}

 * {{{examples/scm-advance-features.html}Other advanced scm commands}}

 []
