As of July 2012, FreeBSD uses Subversion (svn) as the primary version control system for storing all of FreeBSD's source code, documentation, and the Ports Collection.
Subversion is generally a developer tool. Most users should use FreeBSD Update to update the FreeBSD base system, and Portsnap to update the FreeBSD Ports Collection.
In Subversion, URLs are used to
designate a repository, taking the form of
protocol://hostname/path
. Mirrors
may support different protocols as specified below. The first
component of the path is the FreeBSD repository to access. There
are three different repositories, base
for
the FreeBSD base system source code, ports
for
the Ports Collection, and doc
for
documentation. For example, the URL
svn://svn0.us-east.FreeBSD.org/ports/head/
specifies the main branch of the ports repository on the
svn0.us-east.FreeBSD.org
mirror,
using the svn
protocol.
Subversion must be installed before it can be used to check out the contents of any of the repositories. If a copy of the ports tree is already present, one can install Subversion like this:
#
cd /usr/ports/devel/subversion
#
make install clean
If the ports tree is not available, Subversion can be installed as a package:
#
pkg_add -r subversion
If pkgng is being used to manage packages, Subversion can be installed with it instead:
#
pkg install devel/subversion
The svn
command is used to fetch a
clean copy of the sources into a local directory. The files
in this directory are called a local working
copy.
If the local directory already exists but was not
created by svn
, rename or delete it
before the checkout. Checkout over an existing
non-svn
directory can cause conflicts
between the existing files and those brought in from the
repository.
A checkout from a given repository is performed with a command like this:
#
svn checkout svn-mirror
/repository
/branch
lwcdir
where:
svn-mirror
is a URL for one
of the Subversion mirror
sites.
repository
is one of the
Project repositories, i.e., base
,
ports
, or
doc
.
branch
depends on the
repository used. ports
and
doc
are mostly updated in the
head
branch, while
base
maintains the latest version of
-CURRENT under head
and the respective
latest versions of the -STABLE branches under
stable/8
(for
8.x
) and
stable/9
(9.x
).
lwcdir
is the target
directory where the contents of the specified branch
should be placed. This is usually
/usr/ports
for
ports
,
/usr/src
for
base
, and
/usr/doc
for
doc
.
This example checks out the Ports Collection from the
western US repository using the HTTPS
protocol, placing the local working copy in
/usr/ports
. If
/usr/ports
is already
present but was not created by svn
,
remember to rename or delete it before the checkout.
#
svn checkout https://svn0.us-west.FreeBSD.org
/ports/head /usr/ports
Because the initial checkout has to download the full branch of the remote repository, it can take a while. Please be patient.
After the initial checkout, the local working copy can be updated by running:
#
svn update lwcdir
To update
/usr/ports
created in
the example above, use:
#
svn update /usr/ports
The update is much quicker than a checkout, only transferring files that have changed.
An alternate way of updating the local working copy after
checkout is provided by the Makefile
in
the /usr/ports
,
/usr/src
, and
/usr/doc
directories.
Set SVN_UPDATE
and use the
update
target. For example, to
update /usr/src
:
#
cd /usr/src
#
make update SVN_UPDATE=yes
For other information about using Subversion, please see the “Subversion Book”, titled Version Control with Subversion, or the Subversion Documentation.
All FreeBSD documents are available for download at http://ftp.FreeBSD.org/pub/FreeBSD/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.