A.3. Using Subversion
Prev | Appendix A. Obtaining FreeBSD | Next

## A.3. Using Subversion

### A.3.1. Introduction

As of July 2012, FreeBSD uses Subversion as the only version control system for storing all of FreeBSD's source code, documentation, and the Ports Collection.

### Note:

Subversion is generally a developer tool. Users may prefer to use `freebsd-update` (Section 23.2, “FreeBSD Update”) to update the FreeBSD base system, and `portsnap` (Section 4.5, “Using the Ports Collection”) to update the FreeBSD Ports Collection.

This section demonstrates how to install Subversion on a FreeBSD system and use it to create a local copy of a FreeBSD repository. Additional information on the use of Subversion is included.

### A.3.2. Root SSL Certificates

Installing security/ca_root_nss allows Subversion to verify the identity of HTTPS repository servers. The root SSL certificates can be installed from a port:

    # cd /usr/ports/security/ca_root_nss
    # make install clean

or as a package:

    # pkg install ca_root_nss

### A.3.3. Svnlite

A lightweight version of Subversion is already installed on FreeBSD as `svnlite`. The port or package version of Subversion is only needed if the Python or Perl API is needed, or if a later version of Subversion is desired.

The only difference from normal Subversion use is that the command name is `svnlite`.

### A.3.4. Installation

If `svnlite` is unavailable or the full version of Subversion is needed, then it must be installed.

Subversion can be installed from the Ports Collection:

    # cd /usr/ports/devel/subversion
    # make install clean

Subversion can also be installed as a package:

    # pkg install subversion

### A.3.5. Running Subversion

To fetch a clean copy of the sources into a local directory, use `svn`. The files in this directory are called a local working copy.

### Warning:

Move or delete an existing destination directory before using `checkout` for the first time.

Checkout over an existing non-`svn` directory can cause conflicts between the existing files and those brought in from the repository.

Subversion uses URLs to designate a repository, taking the form of `protocol://hostname/path`. 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 `https://svn.FreeBSD.org/ports/head/` specifies the main branch of the ports repository, using the `https` protocol.

A checkout from a given repository is performed with a command like this:

    # svn checkout https://svn.FreeBSD.org/repository/branch lwcdir

where:

- `repository` is one of the Project repositories: `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/9` (9.`x`) and `stable/10` (10.`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 FreeBSD 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://svn.FreeBSD.org/ports/head /usr/ports

Because the initial checkout must 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

### A.3.6. Subversion Mirror Sites

The FreeBSD Subversion repository is:

    svn.FreeBSD.org

This is a publicly accessible mirror network that uses GeoDNS to select an appropriate back end server. To view the FreeBSD Subversion repositories through a browser, use https://svnweb.FreeBSD.org/.

HTTPS is the preferred protocol, but the `security/ca_root_nss` package will need to be installed in order to automatically validate certificates.

### A.3.7. For More Information

For other information about using Subversion, please see the “Subversion Book”, titled Version Control with Subversion, or the Subversion Documentation.

Prev | Up | Next
A.2. FTP Sites | Home | A.4. Using rsync

All FreeBSD documents are available for download at https://download.freebsd.org/ftp/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>.