Subversion
CLASSE supports a central Subversion repository available over HTTPS at
https://svn01.classe.cornell.edu . For a new area for your project or group, or to gain access to an existing area, please submit a
ServiceRequest.
svn01 uses Subversion 1.6.11 provided from RedHat. To ensure compatibility with the server and other clients that may interact with your repository, it's important that you use a compatible SVN client.
In addition, the Accelerator group maintains their own SVN server named accserv. accserv is configured identically to svn01, and the following documentation is applicable to both repositories. Please see
AccSVNRepository for documentation specific to the ACC repository.
Browsing the SVN repository
To access the repository, you can just use
https://svn01.classe.cornell.edu/ from any web browser or SVN client. From a non-CLASSE network, you will need to first connect to the
CLASSE VPN.
For example, from the command line you would do:
svn ls https://svn01.classe.cornell.edu/
Authentication
To gain access to the repository on svn01 or accserv, you must authenticate using your CLASSE username and password. If you already have a valid CLASSE.CORNELL.EDU kerberos ticket (for example, by logging into a CLASSE system or first typing
kinit username@CLASSE.CORNELL.EDU
, you will not be prompted to type your password again when interacting with the repository. Please see
ClasseAuthentication for more information.
Stored Credentials
If you do not have a kerberos ticket, svn will prompt you for your username and password. By default, the client will then ask if you want to store the password locally unencrypted. While the stored password would be only readable by your account, this is not recommended. It is far better to use kerberized authentication as discussed above. In order to prevent the SVN client from storing your password unencrypted, edit
~/.subversion/configand set
store-passwords = no
If you would like to delete any stored passwords or find you are unable to access a repository, you can delete any stored credentials using: rm -rf ~/.subversion/auth/svn.ssl.server/*
SSL Certificates
Both svn01 and accserv use signed SSL certificates provided by Cornell. If for some reason your client is not recognizing the SSL certificate, you can add
--non-interactive --trust-server-cert
to your svn command.
Tortoise SVN
Under construction. For assistance using Tortoise SVN from Windows, please submit a
ServiceRequest.
Documentation
The official SVN book is available online at
http://svnbook.red-bean.com/
The official SVN website is located at
http://subversion.apache.org/
SVN Client
You will need to use a Subversion client for pulling and pushing files from/to the Repository. On CLASSE Linux systems several client choices are available:
- svn is the command line client available on Linux systems (also in Mac OS X 10.8 and later). A short command summary can be found below.
- Tortoise SVN is a Windows client that integrates itself well with the Explorer shell.
- Eclipse is an integrated development environment that accepts plugins that function as subversion clients such as the Subversive plugin.
- Documentation
- To use Eclipse , version 4.3.1, on any CLASSE SL6 Linux system, type:
-
source /opt/rh/devtoolset-2/enable
-
eclipse
- To use Eclipse , version 4.6, on any CLASSE SL7 Linux system, use the installed Eclipse in the Applications menu.
- In principle, any fully-compliant Subversion client will operate with the CLASSE repositories, but the ones above are the only ones that have been tested.
Read/Write Access from the CLASSE Linux computer system
- Read/Write access is handled by an access control mechanism based on Kerberos credentials supported by a CLASSE user account.
- Note: The password for this authentication method is the same one used for your CLASSE account. To obtain fresh Kerberos credentials in the event the repository denies you access (as these credentials are set to expire after a modest period of time) run the command
kinit -f [username]
. This will prompt for your Linux login password. See our wikis for more information on the CLASSE account password or generating a CLASSE kerberos ticket.
Directory Tree Checkout
To create a local working copy of a directory tree from the Repository, first make a directory for your local copy. Henceforth this directory will be referred to as
DIR. A possible name might be:
root_dir
. Substitute the appropriate directory name for
DIR in the below steps.
The URL used in your checkout will be
https://svn01.classe.cornell.edu/REPOS_PATH To find the correct
REPOS_PATH, use the
Repository web viewer.
Using the Command Line
- To make a local copy of a repository source directory, the commands are:
-
cd
DIR
-
svn co https://svn01.classe.cornell.edu/
REPOS_PATH
Using Tortoise SVN
- Right-click inside DIR
- Select "SVN Checkout..."
Updating a Local Copy
Using the Command Line
- To update your local copy of a library and/or executable so that it has all the revisions that have been introduced into the repository, go to the directory containing the library and/or executable and use the command:
Using Tortoise SVN
- right-click on your local checked-out copy, and select "SVN Update" to make sure you have the latest version of the repository.
Committing changes to the repository
Using the Command Line
- Browse to the directory containing your copy of the repository, and execute:
-
svn commit -m "message describing the changes being committed"
Using Tortoise SVN
- right-click on your local checked-out copy, and select "SVN Commit"
Reintegrating Branches into Trunk
As of SVN 1.8 the --reintegrate
option of svn merge is now deprecated and its use is discouraged. This is because SVN 1.8 introduced a very nice automatic reintegration merge feature that will determine whether or not the merge is reintegrating a branch.
To reintegrate a branch, have a clean working copy of trunk and run the following command in its top-level directory:
$ svn merge ^/branches/my-branch
Also note that SVN 1.7 has reached it's end of life and is no longer supported by Apache. The information on reintegration below is being kept for historical purposes, should someone still be using SVN 1.7 or below.
Instructions for Deprecated Reintegration in SVN 1.7 and Below
If you choose to create an svn structure that has
a trunk and branches, you'll want to know about the
svn merge --reintegrate
command.
Essentially, it works like this. Keep your branch up to date by merging trunk to it with
svn merge
. When you are ready to merge your branch back into trunk, checkout trunk locally and merge your branch into it with
svn merge --reintegrate
. Then commit these changes to trunk.
Once you use
--reintegrate
, the branch is no longer maintainable, and it can actually be deleted as svn will maintain revision history of the branch.
For further details, see the
Basic Merging section in Chapter 4. Branching and Merging in
Version Control with Subversion.
If you are using SVN 1.8 or above, you should no longer use the
--reintegrate
option.
SVN 1.8 introduced an automatic reintegration merge feature.
A Revision Control Primer
Below is a brief primer on the commands needed to perform basic repository operations Each command must be provided with the location of the specific repository with which you would like to interact.
The general workflow from Windows is the same, but you use Explorer (right-click on folders or files) instead of using the command line.
For SVN, the repository to use is simply part of the file or directory path for the target you wish to operate upon and will always take the form of a URL.
-
http://hostname_of_repository_server/site-specific_suffix/trunk,_branch,_or_tag/path_to_file(s)
- If you are working in a checked-out directory, all SVN commands will automatically use the repository information that was obtained during checkout.
Some of the most commonly used commands: [ A
denotes an optional argument. ]
Operation |
Command |
Description |
|
Check out |
svn co |
A necessary preliminary for most cvs work: creates your private copy of the source for modules (named collections of source; you can also use a path relative to the source repository here). You can work with this copy without interfering with others' work. At least one sub-directory level is always created. |
svn checkout |
|
|
Commit / check-in |
svn ci |
Use this command when you wish to "publish'' your changes to other developers, by incorporating them into the source repository. If no filenames are provided, it will check-in all files in the current directory and its subdirectories that have changed since they were last checked out or updated. |
svn commit |
|
|
Update your working copy |
svn update |
Execute this command from within your private source directory when you wish to update your copies of source files from changes that other developers have made to the source in the repository. |
|
Add files |
svn add |
Use this command to prepare files for addition to the repository. The files will be enrolled in your working copy immediately, and only added to the repository the next time you run "commit". |
|
Remove files |
svn del |
Use this command to declare that you wish to eliminate files from the repository. The removal does not affect the repository until you run a "commit" command. |
svn remove |
|
|
Create directory |
svn mkdir |
Create a new directory under version control |
svn mkdir |
|
Reference
Version Control with Subversion is "a free book about the ubiquitous Apache Subversion® version control system and written by some of the developers of Subversion itself."