<type>documentation</type>
<domain>versioncontrol</domain>
<id>common-operations</id>
<title>Common Version Control Operations</title>
<date>$Date: 2006-05-24 22:53:07 -0400 (Wed, 24 May 2006) $</date>
<version>$Revision: 13098 $</version>
<product>pro+</product>

Some operations are similar across all the supported version control systems. While there
are some minor variations among these, the basic idea is the same and they perform within
Wing in the same way as they would on the command line.

**Commit** copies changes in the local file system to the version control repository that
the files are associated with. The repository might be entirely local in distributed
systems such as Git or Mercurial, or it may be on a remote host in centralized systems
such as Subversion and CVS.

The view shown for a commit operation has a several tabs that contain the commit message,
the diffs for this commit, the list of files eligible for the commit, and the results once
the commit is run. The ``Files`` tab may be used to select files for the commit by
un-checking files that should not be committed.

You can press the ``AI`` icon |aisuggest| in the top right of the ``Commit`` operation
to ask Wing to suggest a commit message based on the changes made and the contents of
some or all of the files that are being committed.  This won't work unless you have 
configure an AI provider and allowed Wing to upload data to the provider.  You will
be prompted to do so if that hasn't been done.  See `Configuring AI Providers
<ref:ai/provider>`__ for details.

.. |aisuggest| image:: icon:wingide-ai-suggest
  :class: inline-image

**Diff** displays the differences between files on the local file system and files in the
repository. The diff appears as a view in the revision control tool.  Its right-click
context menu may be used to copy the diff text, go to the source for a particular section
of the diff, or re-run the diff command.

**Status** displays the status of files. The files are displayed as a tree by default, but
may also be displayed as a flat list by right-clicking and selecting ``View as List``. To
the left of the file name, there is an icon to indicate if the file has been modified (or
added or removed), has a conflict, is locked, or is not registered. Unregistered files are
omitted from the status view by default but can be shown by right-clicking on the tool and
selecting ``Show Unregistered``.

**Log** displays a list of all the revisions, with commit comments, for one or more files
or directories.

**Revert** disposes of any local changes and reverts the local files to match the revision
that they were based on in the repository.

**Commit Project** runs the commit operation against all the files in the project.

**Project Status** runs the status operation against all the files in the project.

**Add** marks a file or directory to be added to the repository with the next commit.

**Remove** requests that a file or directory be removed from the repository with the next
commit.

