Introduction

SmartSVN is a graphical Subversion client which is available for all platforms (Windows, Mac and Linux). Using SmartSVN allows developers to get straight to work rather than having to learn all the command line terms first.

There are versions of SmartSVN available to support all versions of Apache Subversion from 1.6 to the latest stable 1.8 release. SmartSVN has two available editions, Foundation (free) and Professional (paid), which has more powerful features and includes WANdisco support for the duration of your license period.

SmartSVN is aimed at developers of all levels and abilities, from the complete beginner on a one-person project, to the enterprise developer juggling several repositories of varying complexity and size.

To use SmartSVN you'll need to have Subversion installed (you can get certified binaries from our website). Other than that you're good to go!

Please note: These docs apply specifically to SmartSVN 8.5.

For previous versions, see our SmartSVN docs archive.

Known Issues

The following is a list of the known issues affecting the general release version of SmartSVN 8.5:

Getting started

First up you'll need the SmartSVN install file. You can find it for your chosen OS on the SmartSVN website.

Installation

Linux

Extract the installer file to a location of your choice. Navigate into the new SmartSVN 8.5 folder and select the 'bin' folder. Then Select the smartsvn.sh file. This screen will then appear. Click Run.

You need to make sure Java Runtime Environment version 1.7 is installed on your system. (Some Linux systems, e.g. Ubuntu or Fedora, let you install the Java Runtime Environment with their usual installation tools.)

On the Program Edition select whether you are going to immediately register your copy or elect to try the Professional edition on a 31-day trial. If you register right away you'll need to enter the location of your License File. You'll also need to agree to the terms and conditions.

Finally you'll see the 'First Steps' screen. Here you can choose whether you set up a new or run with an existing Subversion repository. If you select to set up a new Repository you'll need to ensure that Subversion is already installed. Select finish and the installation is complete.

Mac

Extract the installer archive file to a location on your hard drive. Navigate into the new SmartSVN 8.5 folder and run the 'SmartSVN 8.5' App.

Click Open to begin the installation.

On the Program Edition select whether you are going to immediately register your copy or elect to try the Professional edition on a 31-day trial. If you register right away you'll need to enter the location of your License File.

You'll next see the 'First Steps' screen. Here you can choose whether you set up a new or run with an existing Subversion repository. If you select to set up a new Repository you'll need to ensure that Subversion is installed on your Mac. Click Finish and the installation is complete.

Windows

Extract the installer zip archive file to a location on your local drive.

Double-click on the installer program "setup-8_5-jre.exe".

The installer will start. Click "Next".

On the Custom Setup screen, unless you have a need to reduce the installation footprint, go with the default setup, click "Next".

You'll now see a "Ready to install SmartSVN 8.5" screen. Click the "Install" button.

On the "Completed the SmartSVN 8.5 Setup Wizard" screen, click "Finish".

Check Out

When you open SmartSVN for the first time you'll see the Project screen, giving you a number of options to get your files into SmartSVN ready for working with.

Select the required option and click 'OK'

Usually you'll want to perform a new checkout from an existing repository:

Next, enter the URL for your Subversion repository:

When entering a filesystem path, SmartSVN automatically offers autocomplete suggestions (e.g. type ~/ and it lists the subdirectories or type e:\foobar\baz and it will be automatically converted to file://localhost/e:/foobar/baz).

Choose which directories to check out. Use Show Revision to define the revision of your selected directory that you want to check out.

Sometimes you won't need to check out the complete trunk/branch of a project, but only a certain sub-directory. Certain features (such as tags) won't work on sub-directories, hence SmartSVN will ask you whether to check out the necessary parent directory non-recursively. Such non-recursive check outs (also called 'sparse checkouts') are efficient and recommended in a situation like this.

Select the repository directory you want to check out and click Next.

Choose where your working copy will live on your local machine.

By default SmartSVN will check out any subdirectories of the directory you've selected, you can change this setting with the 'Checkout Depth' dropdown.

Choose whether to add a new project into SmartSVN, and select a group if needed:

Once you hit 'Finish' you'll be taken to the Project Window to get to work using SmartSVN!

If you are using Windows and a file has been created on Mac/Linux with invalid characters (such as trailing spaces or colons) you will see an error when trying to check out. To fix this you'll need to delete or rename the culprit files and commit them on Mac/Linux and then checkout/update the working copy on the Windows machine.

Your other options when starting a project are:

Open existing working copy Use this option to open a working copy which already exists on your local machine (ie one you've checked out of the repository previously) and add it to your SmartSVN project list.
Import project into repository Use this option to add an unversioned local directory to your repository.
Open existing project(s) Open a project which already exists in SmartSVN.

Project Window

The project window is the default display for SmartSVN, and will give you a general overview of the status of your project:

By default unchanged files are hidden in the Project Window. To see them go to the View menu and select 'Show Unchanged Files'

Across the bottom of the project window you'll find the Status bar:

You can resize or remove any of the sections, and can double-click on a section title to maximize it.

Day to Day usage

Everyday Commands

Most of the common commands you will need are located in the SmartSVN toolbar:

Update

Get the latest changes or a specific revision from the repository for the selected files/directory.

Select HEAD to get the latest changes. To get a revision, select Revision and enter the revision number. Choosing Recurse into subdirectories will get changes made to subdirectories too.

Advanced options

For sparse working copies, the Update will not pull in files/directories of repository subtrees that haven't been checked out yet. Select Set depth to working copy to get new subtrees as well.

When selecting Allow unversioned obstructions, SmartSVN will continue to update new files from the repository for which locally unversioned files already exist. Otherwise the update will be cancelled in such situations, giving you the chance to cleanup these locally unversioned files beforehand.

Use Include Externals to descend into externals.

Commit

Commit (i.e. send) the changes in the selected files/directory to the repository.

The commit wizard will guide you through the process in a few simple steps:

Click Finish to start the commit.

>Add:

Use this to schedule files or directories to add to your repository. If you're adding a directory you have the option to Recurse into subdirectories, which, when selected, causes all subdirectories and files from subdirectories to be added too.

When a file is added, SmartSVN automatically applies certain properties to the file. Most important is the automatic detection of the file's MIME-Type, which can basically be text or binary. You can change this, or set other property defaults in the project settings.

>Remove:

Use this to schedule the removal of files or directories from your repository.

Select Remove from SVN control and delete locally to schedule the files/directory for removal and to also delete them locally. Select Just remove from SVN control to schedule for removal only. After committing the changes, the files/directories will remain as unversioned.

By default, SmartSVN refuses to remove files or directories that have local modifications, as well as directories that contain modified or unversioned files. Select Force Removal if you wish to perform the removal of such items anyway.

>Move:

Use this to move and/or rename a file or directory which is already under SVN control. The file with the old name will be scheduled for removal, the file with the new name for addition. This command will preserve the history of the moved item.

You can also use Drag-And-Drop to copy or move files and directories.

There is also a special mode of this command that can be used to tell SmartSVN 'after the fact' that a file was moved. For this to work, only two files can be selected: One that is missing or removed, and another that is unversioned, added or replaced. SmartSVN will then remove the missing file (if necessary), add the unversioned file (if necessary), and connect the history of the added file to that of the removed file.

Revert:

Use this to revert the local changes of the selected files/directories. In case of directories you have the option to Revert Recursively (i.e. to recurse into subdirectories). If deselected, only the properties of the directory itself will be reverted.

Be careful before reverting a file or directory as all local modifications will be lost.

Delete:

Use this to delete local files, or unversioned or ignored directories.

Be careful before deleting a file (or directory) as there will be no way to recover unversioned items.

Fix:

Use this to fix (or 'repair') the selected directory/files. This option is only applicable for certain, unusual working copy states:

Case-changed files:

SVN repositories and working copies are in general case-sensitive. This can cause problems when working on a case-insensitive operating system, like Microsoft Windows or certain file systems on Apple Mac OS, and changing the file name's case (upper-case to lower-case, etc.). Because of SVN's working copy format and the pristine copies, it's technically not possible to handle such a file name case change.

One solution is to avoid this situation by either only performing file name case changes on an operating system which supports case-sensitive file names, or directly in the repository by using the Repository Browser.

At any rate, a file name case change may happen on a case-insensitive operating system, e.g. because of defect software tools, etc. SmartSVN detects such invalid changes and puts the file into a case-changed file state, see Rare Primary File States. Fix will now change the file name case back to its original form as found within the pristine copy, resolving this problem.

Nested Roots

A nested root (see Primary Directory States) is a working copy within another working copy which is not related to this parent working copy. SVN commands ignore such nested roots; they are simply treated as unversioned directories.

Nested roots typically result from moving a directory from one location to another without using the proper SVN commands, like Move. This leaves a missing directory at its original location and introduces a nested root at its current location.

Fix offers the following solutions for nested roots, depending on their origin:

Added-missing directories

If a directory has been scheduled for addition and has been locally deleted afterwards (i.e. the directory and its .svn subdirectory are missing), the directory is in Added-missing state.

Such directories are actually only a leftover entry in the parent directory's metadata directory (.svn). The resolution is to Revert them, which is what this command will do.

Changes:

Changes will show you the difference between locally modified files and the pristine copy. From there you have several options:

Once you're happy with any changes made, click 'Save'.

Annotate:

Use this to view the 'history' of the selected file on a per-line basis.

On the Configuration tab, you can specifiy the date range over which to run the Annnotate operation.

On the Advanced tab, select Treat even binary revisions as text ("force") to continue the Annotate operation even when it encounters one or more binary revisions of the file. This option can be necessary if the MIME-Type of a file was changed, e.g. from binary to text in some earlier revision, and the file had text content throughout. In case the file actually had binary content in some earlier revision, parts of the annotate output might contain junk.

Log:

display the Log (i.e. the commit history) of the selected file or directory. The Log command will open the Log window. The Log window shows the history of a versioned file or directory ('entry').

Log Window

The revisions table will show you all revisions where changes were made to the file or directory in question. You can filter out certain revisions by using the Revision Filter field on the top right of the Revisions table. To the right of the Revisions table, the detailed Revision Info of the currently selected revision is displayed.

The lower part of the window shows the Directories/Files view for the selected revision. The displayed structure is restricted to the files and directories that are children of the log context root; all other files/directories which have been modified within this revision are skipped.

The log context root depends on the context from which the log has been invoked. For example, the log context root for logs performed by Query|Log from the Project Window is either the corresponding project root directory, or the Externals root directory. The context root can be enlarged to the corresponding Project Root if necessary.

If merged revisions are loaded via Log|Load Merged Revisions, they are added in a tree-like manner to their parent revision, which can then be expanded or collapsed. Because merged revisions have no direct link to the logged revisions themselves, various commands subsequently listed will not be applicable for these revisions. The context root for merged revisions is the corresponding repository root.

Graph:

Use this to open the Revision Graph for the selected file or directory. The Revision Graph is a standalone window that allows you to browse the history of a repository, which can be either the history of the entire repository, or the history of some directory or file inside the repository.

The Revision Graph essentially consists of a table of all revisions that make up the history of the selected file or directory, and a graph on the left side of that table which shows the parent-child relationships between the revisions. Included in the graph is the display of branching and merging points.

What happens when you open the Revision Graph depends on the option Show dialog to allow root selection in the Revision Graph preferences. If enabled, opening the Revision Graph will lead you to a dialog where you can select the root directory for which the Revision Graph should be produced. Additionally, the dialog allows you to specify whether you want to include modified files and directories beneath the root directory in the Revision Graph, via Report children.

The Revision Graph consists of several views: Revisions, Revision Info, Directories and Files:

Revisions View

The Revisions view lists all revisions in the repository sorted by date, with the newest revisions on top.

Each of the various table columns displays a certain revision attribute, such as Message and Revision. You can hide and unhide columns by right-clicking on the column header area and selecting or deselecting entries in the context-menu. You can also reorder the columns via drag and drop of the column headers.

The Message column contains a graph showing the parent-child relationships between the revisions. Generally, the graph will consist of vertical lines of different color, each of which represents a branch of development. These branches may split or merge to represent branching and merging operations that occurred at some point in the repository history. There are four main types of relationships, expressed by different line styles:

At the end of each branch, you will find a revision that has a colored marker attached to it, i.e. a colored box containing the name of the branch the revision belongs to, such as trunk or feature-branch. These markers will of course move along as you commit into the respective branches. In addition to the branch markers, there are also markers for tags, labelled with the names of your tags, e.g. 1.0 or 1.5-beta-1.

On the top right of the Revisions view is a Filter text field that allows you to enter expressions for filtering out some of the revisions in the Revision Graph. This filter works just like the one on the file table. Additionally, the drop-down menu on the left of the filter field allows you to include or exclude certain revision attributes from being matched against, namely Author, Branch and Message. For example, if only the Author field is selected, the filter expression entered into the filter field will only be matched against the author fields of the revisions.

To the right of the filter field is a drop-down menu for selectively including or excluding branches from being displayed in the Revision Graph. With this, you can for instance configure the Revision Graph to only display the branches branch1 and branch2.

Merge Information

The Revision Graph can display information on which revisions have been merged from other revisions in various ways. Depending on the selected visualization method, it may be necessary to fetch SVN's mergeinfo for every displayed revision from the repository, what may take a while. SmartSVN will cache this mergeinfo for the current graph, so subsequent invocations of mergeinfo-related queries are performed much faster.

Merge Coloring

By default, lines are colored by chunks, where coloring changes at forks. When using View|Merge Coloring, SmartSVN will for the currently selected revision ('target') classify (and color) every other revision into one of the following categories:

The colors can be configured in the Revision Graph settings.

Branches and Tags

Create a Branch

To create a branch first open your working copy, select the folder you want to copy to your new branch, then choose 'Tag+Branch' then 'Add Branch...'

The tag-branch-layout popout will open:

Fill in the branch name and edit the commit message if required:

Once the information's all in place, click the 'add branch' button. SmartSVN will automatically commit this change to the repository so you may need to provide your login credentials.

Once the commit is finished, update your working copy:

Your new branch folder will now show in your working copy tree, by default in the 'branches' folder.

Create Tag

Highlight the folder you want to save as your tag (typically this would be a branch that's now a complete version of your project and ready to release), then choose Tag+Branch, then Add Tag:

The Add Tag popout will appear. Add your tag name and edit the commit message as required:

Click the Add Tag button, then once SmartSVN has created the tag for you update your working copy:

You can now see your new tag in the Tags folder in your working copy!

Merging

Select the branch you want to merge from your directory listing, and choose Modify then Merge...:

The Merge popout will appear. Type in the name of the branch you want to merge in:

You can also specify a revision or range of revisions to merge if you wish. Once that's all filled in click the Merge button, and address any conflicts if they arise. Your merge is now complete!

If you want to merge two different branches into a third branch, select the branch you wish to merge the two sources into and choose Modify then Merge from 2 Sources...:

You'll see a slightly different popout appear. Type in the names of the two branches you want to merge, selecting specific revisions for either or both if needed, then click the Merge button:

Once any conflicts are resolved, your merge from two sources is complete!

Resolving Conflicts

When working with Subversion you may find conflicts - after a Merge or if a file has been changed by someone else since you last checked it out.

If it's a file conflict (for example, a file with the same name but different content exists in two branches you've merged) you'll need to choose which version of the file you want to keep.

To do this, right click on the file in the Files window at the top and choose 'Mark Resolved:

A popout will open, asking what you'd like to do with your file:

Once you've chosen whether to keep your original or overwrite it with the new file just click OK.

If it's a content based conflict, you'll need to decide which content you want to keep - your own work, the new content coming in, or a mixture of both. To sort that out you'll need to view the Conflict Solver. Right click on either the conflict warning in the Output window, or the file in the Files window:

The Conflict Solver window will open:

The working copy version of the file is shown in the left window, the new version of the file in the right, and your edits should be done in the middle window. Once you've added the content you want to keep in the middle window click the Save button in the top left, then close the window. Your conflict is now resolved - don't forget to commit your changes to the repository!

A lot of the power of SmartSVN comes from the many ways in which you can do things, and the ways you can customize SmartSVN to work the way you need to. The following is a guide to the menus in SmartSVN, and the options available to you:

About SmartSVN:

About SmartSVN contains general SmartSVN infomation, including version number, build date, and licensing information.

Preferences:

The application preferences define the global behavior of SmartSVN, regarding UI, SVN commands, etc. These settings apply to all projects in SmartSVN:

On Start-Up

You can either choose to Open last project, Show Welcome Dialog or Do nothing, i.e. start with an empty main frame.

Select Remove obsolete projects to check for every project on start-up whether the corresponding root directory still exists. In case the root paths of certain projects are not valid anymore, you will be asked whether these projects should be removed from the project tree.

Project

For Open Project you can specify the behavior when opening a project. Projects can be opened In current window (unless there are SVN operations active for the currently opened project) or In new window. By default, Ask is selected to let you choose individually.

With Confirm closing selected, you will always be asked before a project is closed.

Authentication

The Authentication page contains all the settings needed for establishing connections to repositories. This includes authentication information, such as user names and passwords.

When opening a working copy, SmartSVN automatically creates a so-called repository profile for the working copy, if no such profile exists yet. A repository profile is a collection of all the information needed to connect to the repository associated with the working copy. The profile is incomplete in the beginning and will be filled out as needed. For instance, as soon as you specify a user name and password, or a certificate, to perform operations that require access to the repository, the information you provided is stored in the profile.

If you select an incorrect certificate you will not be asked for new credentials (due to the way Subversion handles the error). To resolve this and add the correct certificate you'll need to remove the profile and reenter your credentials.

If you select an incorrect certificate you will not be asked for new credentials (due to the way Subversion handles the error). To resolve this and add the correct certificate you'll need to remove the profile and reenter your credentials.

The table on the Authentication page lists all existing repository profiles and their associated authentication information. Use the Edit and Delete buttons to edit and delete profiles, respectively.

Passwords

Use the Show Passwords button to display the passwords in the Password/Passphrase column in plain text. The Change Master Password button allows you to set, reset and change the master password used for encrypting all stored passwords. For more information on passwords refer to Passwords.

All passwords needed to access repositories can optionally be stored in SmartSVN's password store. This password store is located in the password file, which can be found in SmartSVN's settings directory (see Installation and Files).

The password store can be protected by a master password, and each time you start SmartSVN, this master password has to be entered as soon as SmartSVN tries to access the password store for the first time. The entered password is kept in memory while the program runs, so you don't have to enter it again for the rest of the current session. You may choose Don't use a master password if you don't want the password store to be protected with a master password. However, this option is only recommended if you can make sure the master password file itself is protected against unauthorized access.

By clicking on the Change Master Password button on the Authentication page in the preferences, you can set, reset or change the master password. Use Change master password to change the current password; this will preserve the stored passwords, but requires that you supply the Current Master Password. Note that you don't need to enter the Current Master Password if you are currently working without a master password. If you have forgotten the master password, select Set new master password. In that case all previously stored passwords will be discarded. Enter the New Master Password and Retype New Master Password. When leaving both fields blank, you will continue to work without a master password, i.e. as if having selected the option Don't use a master password when you were asked to set the master password.

Proxies/Tunnels

Proxies and tunnels in SmartSVN 8.5 use the Subversion configuration.

You can find more information on this here: http://subversion.apache.org/faq.html#proxy and here: http://svnbook.red-bean.com/en/1.8/svn.serverconfig.svnserve.html#svn.serverconfig.svnserve.sshauth

User Interface

Use background color in file table to indicate certain states allows you to control whether the file table on the Project Window may change its background color to indicate certain table states. For example, the table may take on a yellow background to indicate it's currently showing files that match the filter pattern entered in the filter text field on the top right of the file table.

Select Show file and directory tooltips to toggle the display of tooltips for the Directories tree and the Files table within the Project Window.

For File Name Matches you can configure the filename search and filter features in SmartSVN:

Select Nest in System Tray to have SmartSVN show a System Tray icon. It's available for Microsoft Windows, most Linux desktop managers and other operating systems for which tray icons are supported.

Configure the Date Format and Time Format to be used by SmartSVN when displaying dates and times, respectively, and combinations of both. These formats have no effect on SVN operations. It's recommended to restart the application after having changed these formats.

With Recursion options you can select whether to use Basic or Advanced recursion options. By default, SmartSVN offers a basic option Recurse into subdirectories (or a similar name) which let's you operate either only on the directory itself, or on the directory and all contained files and subdirectories, i.e. recursively.

Switching to Advanced recursion will offer the following depth levels:

Actions - Commit
Actions - Open

With Don't open or compare more than X files at once, you can specify an upper limit beyond which you will be asked before a certain set of files is opened all at once. It is recommended not to set this value too high, to prevent accidentally opening a large number of files.

Actions - Refresh
Actions - Revision Graph

If the option Show dialog to allow root selection is selected, opening the Revision Graph will initially show a dialog with various options, e.g. the root directory for which the Revision Graph will be created.

The Colors are used to colorize the Branches and Revisions of a Revision Graph. You can specify colors for both Normal (unselected) and Selected mode. Use Reset to Defaults to reset the colors to SmartSVN's default values.

Built-in Text Editor

These settings are used as a default for all text-displaying and editing views of SmartSVN, like the File Compare, the Conflict Solver, the Annotate and the Changes view.

For the Font page, choose the Font Family and the Font Size to be used by SmartSVN's text components.

On the Colors page you can customize the various colors used by SmartSVN's text components. Use Reset to Defaults to restore the default settings for Colors page.

On the Behavior page, you can configure various text editing features.

Tools - File Compare

Here you can configure external file compare tools which can be used instead of the built-in File Compare.

You can associate a specific File Pattern with a file comparator. You can either choose to use the Built-in text file comparator, an External diff tool or an External viewer.

With In case of svn:mime-type is binary, try to detect whether actually text type you can override binary svn:mime-types. In this case, SmartSVN will detect the content type text/binary itself by inspecting the file. This is the same as if svn:mime-type has not been set at all.

External Diff Tools

This is defined by the operating system Command to be executed, along with its Arguments. Arguments are passed to the Command as they would be passed from the OS command line. The optional place holders ${leftFile} and ${rightFile} will be substituted by the absolute file path of the left and right file to compare, respectively. In cases where SVN-internal files like the pristine copy is used for comparison, the content of this file is copied to a temporary location and this temporary file is passed as a parameter. The optional place holders ${leftTitle} and ${rightTitle} will be substituted by the left and right file title, respectively, which SmartSVN would use when displaying the file contents with its internal file comparator.

Furthermore, the place holders ${leftEncoding} and ${rightEncoding} will, if used, be substitued by the encoding of the left and right file, respectively.

External Viewers

An external viewer is defined by the operating system Command to be executed, and its Arguments. It's executed two times, once for the left and once for the right file to 'compare'. Arguments are passed to the Command as they would be passed from the OS command line. The optional place holders ${file} will be substituted by the absolute file path of the left and right file to view, respectively.

Tools - Conflict Solver

Here you can configure external tools which should be used instead of the built-in Conflict Solver.

You can either choose to use the Built-in Conflict Solver or an External Conflict Solver. An external conflict solver is defined using the operating system Command to be executed, along with its Arguments.

Arguments are passed to the Command as it would occur from the OS command line. The place holders ${leftFile}, ${rightFile}, ${mergedFile} and ${baseFile} can be used, which will be substituted by the absolute file path of the left, right and resulting merged file, respectively. Furthermore, the place holder ${encoding} can be used, which will be substituted by the encoding used for the file.

Transactions
Spell Checker

You can define multiple Dictionaries. Every dictionary has a Name which is used in the spell checker popup menu and a Dictionary File. In addition, there is also one optional File for My Own Words which can be extended by SmartSVN.

The Dictionary File has to be in MySpell or Hunspell format. The File for My Own Words is a simple list of words.

Depending on the number and size of the dictionary files, the memory consumption of SmartSVN can increase significantly.

If you have configured multiple dictionaries, text fields for which spell-checking is supported offer a Language pop up menu from which you can select the intended dictionary by its Name. Alternatively, you can choose whether to Use Best Matching or Use All dictionaries. Use All is useful to combine multiple dictionaries of the same language, e.g. one file with general expressions and one with domain-specific expressions. Use Best Matching is useful to build a super-dictionary containing multiple languages and have SmartSVN detect which dictionary fits better for a given text.

When you are frequently writing English as well as German commit messages, you can specify one English and one German dictionary and select Use Best Matching.

Now, when writing an English commit message, SmartSVN will detect after a few words that the English dictionary fits better and hence will check the complete commit message only with the English dictionary (as if you had manually selected the English dictionary).

On the other hand, when writing a German commit message, SmartSVN will detect to use the German dictionary and only check for German spelling correctness.

Check for New Versions

Here you can set the default behaviour for SmartSVN updates, including whether they will be downloaded and installed automatically.

Checkout

- see Checkout.

Open Working Copy

To create a project from an already versioned local directory, use Project|Open Working Copy and specify the local Versioned Directory. On the Project page, select to Open in new project for this working copy, specify the project's name and specify an optional group for the project. Select Add to current project to add the working copy to the currently open project (if present). If there is already a project which contains this working copy, select Open existing project to open this project. Alternatively, you can select Don't manage as project to just create a temporary project for this working copy.

Edit Working Copy

If the location of a working copy has changed, use Edit Working Copy to point to the new location.

Remove Working Copy

Use this to remove a working copy from the project.

Import into repository

Use Project|Import into Repository to add an unversioned local directory to the repository and to create the corresponding SmartSVN project. Only the specified directory will be put under version control using this command.

First, select the unversioned Directory which you want to import into the repository.

Choose the Repository into which you want to import.

After switching to this page, it takes a few moments until the first level of the repository is scanned. If you look into deeper levels of the repository by expanding the directory nodes, these levels will be scanned also. Use the Create Directory tool button to create new directories in the repository.

You can create directories recursively in one go, by specifying the directories separated by /. This helps to avoid cluttering up the Log, as only one revision for creating all of these nested directories will show up.

After you've created the necessary directory structure in the repository, select the directory that should be linked with the root of your local project and click Next.

On this page you can configure to which project the imported working copy will be added. Select one of the following options:

The result of this command will be a new project, for which only the local root directory is under SVN control. This gives you many possibilities to configure which files/directories of your local file system should actually be versioned in the repository. From the Edit menu you can use Add and Ignore on files and directories. Furthermore, for files you can adjust properties using the respective commands from the Properties menu. After the project has been fully configured, use Modify|Commit to do the final import into the repository.

Set up local repository

Use Project|Set Up Local Repository to set up a new local SVN repository.

First, choose the location of your local repository.

Click Finish to set up your repository.

Next, choose the repository URL.

Choose your import location.

Choose which project and group (if any) your repository will be part of.

Open or manage projects

With the Project Manager (Project|Open or Manage Projects) you can manage your existing SmartSVN projects. The set of managed projects is arranged in a tree-structure. This allows you to group related projects under a common group name, etc.

There is one special group Sorted project area which receives all new projects. This group is sorted and hence works like a sorted project list. If you don't need to group projects, simply let this group maintain the project list for you.

With Rename you can change the Name of an already managed project or a group. Use Delete to remove projects from the project tree; neither the local directory itself nor any other filesystem content will be affected by this operation.

You can rearrange the entries in the project tree with Drag-and-Drop. If a group is expanded, you can move the currently selected item into this group, otherwise it will be moved across.

Use Create Group to wrap the currently selected project in a group. Thereafter you can move other projects into this group. If you Delete a group, only this group will be deleted. Projects or groups contained within the group will not be deleted.

Close

Use this to close the current active project window.

Manage log cache

The Log Cache is the local data storage for the Transactions. It is also used by other SmartSVN commands, for instance the Log command. It stores and supplies the raw log information as received from the server and can supply them to various commands later on. This can increase log performance significantly and also leads to reduced network traffic.

When Log information is requested for the first time for a certain repository, you can choose which parts of the repository should be indexed by the Log Cache. In general it is recommended to select Create cache for whole repository to let SmartSVN index the whole repository. The reason for this is that logs of a certain 'module' can have links to other modules, due to the way Subversion's Copy mechanism works. Sometimes repositories can be very large and you may be interested only in a few modules of the whole repository. In this case it may be more efficient to select Create cache only for module at and select the corresponding module. However, this can lead to incomplete logs due to the reasons stated above. For some repositories you might want to use create no Log Cache at all. In this case choose Skip cache and perform logs directly.

SmartSVN automatically keeps the Log Cache(s) up-to-date. All log-related commands always query the repository for the latest logs, before querying the Log Cache. In the same way, every manually or automatically triggered refresh of the Transactions will update the corresponding caches.

Log results (for instance used by the Log command) from the Log Cache are in general identical to results obtained when querying the server directly. However there can be differences for following situations:

Manage Log Caches

Use Project|Manage Log Caches to manage the local Log Caches.

The list shows all known Root URLs and the corresponding Log Type. For Log Type set to Local Log Cache there exists a local Log Cache for the Root URL against which logs will be performed. Otherwise, for Direct Logs onto Repository, the logs will be performed directly against the repository.

Log Caches are created on demand for a new Root URL and the choice whether to use a Local Log Cache or Direct Logs onto Repository has to be done when a log is first requested for that URL. This choice will be remembered and typically doesn't need to be changed afterwards. If necessary, you can use Delete for the corresponding Root URL. This will discard the Log Type choice and get rid of the Log Cache in case of Local Log Cache choice. Hence, subsequent log requests for this URL (or child URLs) will bring up the Log Cache initialization dialog again.

Select Rebuild for a Local Log Cache to rebuild it from repository log information. In general it's recommended to rebuild caches completely by selecting All unless you know that only log information Starting with a certain revision had been changed.

Storage

The Log Cache information is stored in the subdirectory log-cache in SmartSVN's settings directory. For every Log Cache, there is a separate subdirectory containing the server name and repositoy path. This is typically sufficient to quickly locate the cache for a specific repository. In case there are multiple subdirectories with the same name, only differing in the trailing number, you can have a look at the contained urls files. They show the exact location for which the Log Cache has been built.

If you encounter problems when rebuilding the cache, or if you need to get rid of the cached information for a certain repository, you can remove the corresponding subdirectory. Alternatively, you can remove the whole log-cache in order to get rid of all cached log information. You should never change these files while SmartSVN is running, otherwise the results will be unpredictable.

Settings

The project settings affect the behavior of various SVN commands. Contrary to the global preferences, the project settings only apply to an individual project. You can edit the settings of the currently opened project via Project|Settings.

The top of the dialog shows the Root Paths for the current project. Use Change to modify these paths to, for example, add other root directories, or to change a root directory after the corresponding SVN working copy has been moved on your local disk.

Text File Encoding

The text file encoding affects only the presentation of file contents, for instance when comparing a file, and it will only be used for the file itself if no charset has been specified by its MIME-Type property. The text file encoding settings are not relevant for SVN operations itself, which generally work only on the byte-level.

With Use system's default encoding, SmartSVN will automatically use the system's default encoding when displaying files. When changing the system encoding later, the project settings are automatically updated.

Alternatively you can choose a fixed encoding with Use following encoding.

Scan

The Scan settings specify whether SmartSVN scans the Whole project or Only root directory when opening a project.

Generally we recommend using the Whole project option, because features like searching files in the table, etc. rely on having the whole project structure in memory. However, when you are working with large projects its sometimes better to scan the file structure on demand to avoid high memory consumption.

Working Copy

The option (Re)set to Commit-Times after manipulating local files tells SmartSVN to always set a local file's time to its internal SVN property commit-time. Especially in case of an updating command, this option is convenient to get the actual change time of a file and not the local update time.

Apply auto-props from SVN 'config' file to added files tells SmartSVN to use the auto-props from the SVN 'config' file, which is located in the Subversion directory below your home directory. These auto-props will also override other project defaults, like Default EOL Style, explained below.

Choose Keep input files after merging to always keep the auxiliary files (left, right and base) after a file has been merged by the Merge or by the Merge from 2 sources command. These files will be put into merged state which is similar to the conflict state however without having actual conflicts. For merged files you can use the Conflict Solver to review merge changes in detail and you can finally use Mark Resolved to mark the file as resolved and to get rid of the auxiliary files.

Global Ignores

The Global Ignores define global ignore patterns for files/directories which should in general be ignored within the current project. This is contrary to local ignores, which are only related to a specific directory. You can completely deactivate Global Ignores by Deactivated. With Use from SVN 'config' file, the same ignore patterns will be used as by the command line client. Independently of the command line client, you can enter your own patterns via Use following patterns. The Patterns are file name patterns, where '*' and '?' are wildcard symbols, interpreted in the usual way.

Binary Files

Choose Use MIME-type registry from SVN 'config' file to use the corresponding file which is also used by the command line client. Choose Use following patterns to specify custom Patterns, for which matching files will always be added with binary MIME-type. The wildcard symbols '*' and '?' can be used in the usual way.

EOL Style

This option specifies the Default EOL-Style, which is used when adding a file:

Locks

Use When adding files, set 'Needs Lock' for to specify for which files the Needs Lock flag should be set when they are added. With No file, the 'Needs Lock' property will not be set. With Binary files the property will only be set on files which have been detected to have binary content. With Every file the property will be set on every file.

When committing files or directories, SmartSVN will scan for locked files. Choose here whether to suggest to Release Locks or to Keep Locks for those files on the 'Locks' page of the commit wizard.

Enable Automatically scan for locks and enter the corresponding interval in minutes to repeatedly refresh the files' lock states.

Keyword Subst.

This option specifies the Keyword Substitution default, which is used when adding a file.

Conflicts

By default, conflicting files will receive new extensions like 'mine' or '.r4711'. Here you can specify extensions which should be preserved in case of conflicts. Choose either Use from SVN 'config' file or Use following extensions and enter the file name Extensions which should be preserved.

Default settings

Projects are created by various commands. For reasons of simplicity, in most of these cases, there is no configuration possibility for the corresponding project settings. Therefore you can specify default project settings (template settings), which will be applied to every newly created project. With Project|Default Settings you can configure the same properties as for a concrete project.

Table Columns

Table Columns lets you specify which file attributes will be displayed in the file table, see below for details:

File attributes with SVN counterparts
Name (same) File name
Revision (same) Current revision of the file
Local State Schedule Textual representation of the local state of the file
Lock Lock Owner Lock state of the file
Last Rev. Last Changed Rev. Revision in which this file has been committed
Last Changed Last Changed Date Time of the last commit of the file
Text Updated Text Last Updated Time of the last (local) update of the file's text; this attribute is set when the content of a file has been changed by an SVN command.
Props Updated Properties Last Updated Time of the last (local) update of the file's properties; this attribute is set when the properties of a file have been changed by an SVN command.
Last Author Last Changed Author Last author, i.e. who performed the last commit on the file
Type svn:mime-type The file's type
EOL svn:eol-style End-Of-Line Type of the file
Keyw. svn:keywords Keyword substitution options of the file
Needs Lock svn:needs-lock Whether the file should be locked before working
Executable svn:executable Whether the file has the Executable-Property set
Merge Info svn:mergeinfo Whether the file has the Merge Info-Property set: None for no Merge Info set, Empty for an empty Merge Info or Present for non-empty Merge Info.
Copy From Copy From URL/Rev Location and URL from which this file has been copied (locally). This value is only present if the file is in Copied state
File attributes without SVN counterparts
Remote State Remote state of the file
Ext. The file's extension
Relative Directory Parent directory of the file relative to the selected directory
File Time The local time of the file
Attrs. Local file attributes: R for read-only and H for hidden
Size The local size of the file
Branch The tag/branch to which the file is currently.
Change Set The Change Set to which the file belongs.

Certain table columns require access to additional file system files when scanning the file system and therefore slow down scanning. The note within the View|Table Columns dialog tells you which columns these are.

Refresh

When a project is opened, the contents of the directory tree and the file table are initialized by reading the contents of the root directory into memory. Whether or not the complete project should also be read into memory at project startup can be configured in the project settings.

The scanning and refreshing of the project's directories and files is generally performed in the background, so you can immediately start to work after opening a project, and you may continue to work while the project is refreshed. If a Refresh is currently in progress, the status bar shows a Refreshing symbol and text.

The scanning is performed breadth-first, so you will immediately have the complete root directory refreshed. When scanning a large working copy, you can force SmartSVN to give certain subdirectories higher priority in being scanned: As soon as possible select the (already scanned) directory in the Directories tree you would like to have scanned recursively. SmartSVN will then reorganize its breadth-first strategy accordingly. The same holds true for file selections: SmartSVN will give priority in scanning their common parent directory (and the path up to the root).

The initial scanning/refresh is in general much slower than subsequent refreshes due to the system disk cache. On Windows, you can enable the Status Cache to get a first 'preview' of your working copy quickly. This preview also allows most of the commands to be performed. This allows certain SVN operations to be started before the file system has been scanned.

Files From Subdirectories

This enables the recursive view showing not only files from the currently selected directory but also those from subdirectories.

Unchanged Files

With Unchanged Files unchanged files are displayed. It is often convenient to hide them, as they are of no interest for most of the SVN commands.

Unversioned Files

With Unversioned Files unversioned files (also within unversioned directories) are displayed.

The Unversioned Files option does in no way affect the unversioned files themselves or their SVN states. Certain operations, which can work on unversioned files, will include them anyway. Parent directories of unversioned files will continue to display the Direct/Indirect Local Changes state. To actually ignore such files on the SVN-level you can use the Ignore command.

Ignored files

With Ignored Files ignored files within versioned directories will be displayed. Files from ignored directories are never displayed.

Files assigned to changeset

With Files Assigned to Change Set selected, files which have already been assigned to a Change Set will be displayed. Otherwise, these files will be hidden in order to give a better overview of the files not assigned to any Change Sets. This option has no effect if the selected directory is a Change Set itself or part of a Change Set.

Remote changed files

With Remote Changed Files selected, files will be displayed which are remotely changed. Typically, this option has no effect if Unchanged Files is selected, because these files are shown anyway. An exception here are files which only exist remotely, i.e. files which are in Remote state.

Update

Use Modify|Update to get the latest changes or a specific revision from the repository for the selected files/directory.

Select HEAD to get the latest changes. To get a revision, select Revision and enter the revision number. Select Recurse into subdirectories to perform the update command not only for the current selected directory, but also for all subdirectories.

Advanced options

For sparse working copies, the Update will not pull in files/directories of repository subtrees that haven't been checked out yet. Select Set depth to working copy to get new subtrees as well (according to the selected Depth option).

When selecting Allow unversioned obstructions, SmartSVN will continue to update new files from the repository for which locally unversioned files already exist. Otherwise the update will be cancelled in such situations, giving you the chance to cleanup these locally unversioned files beforehand.

Use Include Externals to descend into externals.

Update more

Use Modify|Update More to get locally missing directories and files from the repository for a foregoing non-recursive Update or Check Out.

Update More checks for the currently selected directory whether there are subdirectories or files that haven't been checked out yet. They are presented in a list and you can select one or more of them to update. Recurse into subdirectories specifies whether the selected entries should be updated or checked out recursively.

To get rid of locally checked out directories, use the inverse operation Exclude from Working Copy.

Exclude from working copy

Use Modify|Exclude from Working Copy on one or more directories to locally exclude them from the working copy. The directories won't be removed from the repository, but will simply be ignored during subsequent Updates. To get excluded directories back, use the inverse operation Update More.

Switch

Use Modify|Switch to switch the selected directory or file to another repository location.

Select Trunk to switch back from a branch or tag to the main trunk. Select Branch or Tag and enter the branch or tag name to switch to that branch or tag. Select Other URL to switch to an arbitrary URL within the same repository.

You can either switch to the selected location At HEAD or at a specific Revision. Select Recurse into subdirectories to perform the switch command not only for the currently selected directory, but also for all subdirectories

Relocate

Use Modify|Relocate to change the repository for the selected directory (and subdirectories) of your local working copy. Typically, this command is used when the URL/structure of an SVN server has changed.

Relocate Directory shows the directory, relative to the project's root directory, which will be relocated. From URL displays the repository root URL of the selected directory, if this information is available locally. Otherwise it displays the complete repository URL of the directory. With To URL you can now specify the replacement string for From URL: Relocate will then search within the selected directory and subdirectories for URLs starting with From URL and replace the corresponding part by To URL.

Merge

Use Modify|Merge to merge changes from another source branch to the selected file/directory.

Select Trunk to merge from the main trunk. Select Branch or Tag and enter the branch or tag name to merge changes from a branch or tag. Select Other Location to merge from an arbitrary location, specifying the corresponding repository and path.

Alternatively, you may select a merge source from the History button. It shows a list of previous merge sources you have used, as well as merge sources extracted from the svn:mergeinfo property of your merge target.

Use All Revisions to merge all the revisions which have not yet been merged from the selected location. SmartSVN will detect them based on the present merge tracking information.

You will typically use this option when working with a feature branch to keep it in sync with the trunk.

All Revisions does not work with pre-1.5 servers (e.g. 1.4 servers).

Use Revision Range to manually specify multiple (ranges of) revisions to be merged from the selected location. SmartSVN will detect whether certain revisions of the specified ranges have already been merged and avoid repeating the merge. Single revisions are just specified by their revision number while ranges starting at start (inclusive) and ending at end (inclusive) are specified by start-end. Multiple revisions (ranges) can be specified with a separating colon (:). Certain revisions may be excluded by prefixing them with an exclamation mark (!).

Instead of entering the revisions manually, you can choose them from the revision browser. The revision browser will indicate with a green arrow which revisions have not been merged ('merge candidates'). From the Options button you can select Show only mergable revision to restrict the revision list to those merge candidates. By default, Show all revisions will also include revisions which have already been merged.

You will typically use this option when working with a release branch to merge only bugfix revisions from the trunk to this branch.

Select Reverse merge to reverse the changes between the selected revisions. Internally, this is achieved by swapping the start and end revisions.

Advanced options

By default, merging takes the ancestry into account, meaning that merging does not simply calculate (and merge) the difference between two files which have the same path, but also checks if both files are actually related. For the typical merging use cases, this behavior leads to the expected results and it is also required for the merge tracking to work. You can switch this behavior off by selecting Ignore ancestry, however this option is not recommended unless you have a good reason to use it.

Regarding Ignore changes in EOL-style and For Whitespaces handling, refer to Create Patch.

Deselect Recurse into subdirectories to merge only changes to the selected directory/file itself but not it's contained files, etc. In general it's recommended to keep Recurse into subdirectories selected.

With Record only no files will be touched during the merge, and only the Mergeinfo, will be adjusted accordingly, so that the core merge tracking mechanisms consider the revisions as merged. This option can be useful to 'block' certain revisions from being actually merged.

By default merging will stop when it's required to delete locally modified files, because they have been removed in the merge source. You can switch off this safety check by selecting Force deletion of locally modified files, if necessary.

Close the dialog with Merge to immediately perform the merge to the selected directory/file of the current working copy. Alternatively you may choose to Preview the changes that would result from the merge.

You can choose to keep the auxiliary merge files even for non-conflicting files in the Project Settings.

Merge from two sources

Use Modify|Merge from 2 Sources to merge changes between two different merge sources (URLs) to the selected file/directory.

Changes are merged from one Repository between From and To to the local Destination. The last 10 merge sources will be stored and can be set using the drop-down button beside the Repository drop-down list.

Most merging use cases are covered by Merge and Reintegrate Merge and if possible these commands should be used instead.

Apply patch

Use Modify|Apply Patch to apply a patch file to your working copy. Currently supported patch file formats are unidiff patches.

For the Select Patch File dialog, select the patch file which you want to apply. Typically, patch files have .patch or .diff extensions. Based on the file paths contained in the patch file, SmartSVN will try to detect the correct base directory to which the patch should be applied. It will fail if it can't find any files to patch in the working copy.

The resulting window is similar to the Merge Preview window. The Files area allows you to deselect certain files from the patch. You can apply the patch via Patch|Apply Patch.

Unpatchable files

In case the patch could not be applied to certain files, an Unpatchable files area will be displayed at the top of the window. The table contains the Path of the file and a description of the Problem. The tooltip text of the Problem column contains more details in case the expected and the actual lines did not match when trying to apply the patch to the file.

Commit

- see Commit

Add

- see Add

Remove

- seeRemove

Ignore

Use Modify|Ignore to mark unversioned files or directories as to be ignored 'locally'. This is useful for files or directories which should not be put under SVN control. These are usually temporary, intermediate or automatically generated files, like C's .obj or Java's .class files, or directories containing such files.

Local ignore patterns are stored within the working copy (in the svn:ignore property of the corresponding parent directories) and will be committed. Therefore, to have a file locally ignored, its parent directory must either be ignored as well, or be versioned, so that the necessary svn:ignore property can be stored there. Hence, when trying to ignore a file or directory within another unversioned directory, SmartSVN will ask you to add this parent directory. In addition to local ignore patterns, you can configure global ignored patterns in the project settings.

You can select Ignore Explicitly to add each selected file/directory explicitly to the ignore list. If SmartSVN detects a common pattern for the selected files/directory, it will also allow you to Ignore As Pattern.

This command is a shortcut for editing the svn:ignore property directly by Properties|Ignore Patterns.

Ignore Patterns

Use Properties|Ignore Patterns to add, change or delete local ignore patterns for a directory. Local ignore patterns define file and directory patterns to be ignored within the directory.

Local ignore patterns are stored within the working copy (in the svn:ignore property of the directory) and will be committed. Therefore ignore patterns can only be applied to versioned directories.

By default, the Patterns are only set to the selected directory. You may also choose to set the patterns to all subdirectories by Recurse into subdirectories. In case of recursive ignore patterns, you may alternatively consider specifying global ignore patterns within the project settings.

Delete physically

- see Delete physically

Create directory

Use Modify|Create Directory to locally create a directory within the currently selected directory.

Enter the Path of the subdirectory that will be created. The path may consist of multiple directory names, separated by '\' or '/' to create multiple directories at once. Select Schedule for addition to schedule the created directory/directories for addition to SVN control.

Rename

Use Modify|Rename to rename a file or directory which is already under SVN control. The file with the old name will be scheduled for removal, the file with the new name for addition. This command will preserve the file's history.

Move

- see Move

Detect moves

Use Modify|Detect Moves to convert already performed 'manual' moves (including renames) of files to 'SVN' moves. Typically, you will not perform moves within SmartSVN itself, but with system commands, through an IDE, etc. One such external move results in a missing file and a new unversioned file. Both files could then be changed and committed. This will result in the repository content being up to date, but will not preserve the relationship between both files (which is actually one moved file). This especially affects the log of the added file: It will start at the committed revision and won't include the revisions of the removed file. To preserve the relation (and hence history/log), a 'post-move' on both files has to be performed. Detect Moves can detect such already performed 'manual' moves based on the file content and displays the corresponding suggestions of which files could be 'post-moved'.

Invoke Detect Moves on a set of missing and unversioned files for which 'post-move' should be detected. Depending on the number of selected files, the operation might take a while. The results will be displayed in terms of a list of possible 'post-moved' files pairs.

Suggestion displays the detected move in a descriptive manner. If you agree that the corresponding file pair actually represents a move that has happened, keep it selected so the corresponding 'post-move' will be performed. Similarity can be helpful for this decision. It is entirely based on the comparison of the file contents and denotes the calculated likelihood for the file pair to be an actual move.

For more details, Target displays the name of the unversioned (i.e. new) file. Source displays the name of the missing (i.e. old) file. If the name of the file has not changed, i.e. Target would be equal to Source, Source is omitted. In the same manner Target Path displays the path of the new file and Source Path displays the path of the old file. Again, Source Path will be omitted if it is equal to Target Path.

There can also be more than one possible Source for a specific Target. In this case SmartSVN always suggests the best matching Source, i.e. the file for which the highest Similarity value was calculated, and Alternatives shows the number of possible alternative sources. Use Compare to compare the currently selected Source and Target file with the File Compare. Use Alternatives to select an alternative source to be used instead of the original suggestion. Finally, if you consider a particular suggestion and all available Alternatives incorrect, you may deselect the suggestion so that no 'post-move' will be performed for the respective target.

Click OK to perform the selected 'post-moves'.

Copy

Use Modify|Copy to create a copy of a file or directory which is already under SVN control. This command will preserve the history of the copied item.

Select the Target Directory under which the copy of the file/directory will be created, and specify the New Name.

There is also a special mode of this command that can be used to tell SmartSVN 'after the fact' that a file was copied. For this to work, exactly two files must be selected: One that is versioned, but not added or replaced, and another that is unversioned, added or replaced. SmartSVN will then add the unversioned file (if necessary) and connect the history of the added file to that of the other file.

Copy from repository

With Modify|Copy From Repository you can copy a file or directory from the repository to your local working copy. This command can be used for recovering deleted files and directories from earlier revisions.

Repository is the repository of your local working copy, it can't be changed as copies can only be performed within the same repository. For Copy enter the file/directory to be copied, along with its Source Revision. Specify the local directory Into Local into which the file/directory should be copied. With Name will be the name (i.e., last component of the path) of the restored file/directory.

Copy to repository

With Modify|Copy To Repository you can copy the selected local file/directory to the repository.

Repository is the repository of your local working copy, it can't be changed as copies can only be performed within the same repository. The local file/directory Copy Local will be copied to the project's Repository. The target directory is Into Directory. With Name will be the name (i.e. last component of the path) of the resulting file/directory. Because the copy is directly performed into the repository, you have to specify a Commit Message.

Use Externals Revisions to specify how to handle external revisions. This option is only relevant for externals which have their revisions set to HEAD. By default, Leave as is will not modify any external revisions. Choose Fix all to have all revisions set to their current values, as present in the working copy. Choose Fix except below to have all revisions set to their current values except externals pointing to the specified location, or some subdirectory of this location.

Only when fixing externals you can make sure that later checkouts of the copied location will produce exactly the same working copy. Otherwise, externals which have been left at HEAD will continue to bring the latest revisions of that external, which are in general not equal to it at the time of creating the copy.

Copy within repository

With Modify|Copy Within Repository you can perform copy operations that take place entirely within a repository. This is for instance a convenient and fast way to create repository tags/branches.

Select the Repository within which the copy should be performed. Copy From and the Source Revision specify the copy source. For Copy you can either select to copy To or to copy Contents Into. In the case of copy To, the source will be copied into the Directory with its name set to With Name (last component of the path). For copy Contents Into, the contents (files and directories) of the source will be copied directly into the Directory with their corresponding names. Because the copy is directly performed in the repository, you have to specify a Commit Message.

Revert

- see Revert

Mark resolved

Use Modify|Mark Resolved to mark conflicting files or conflicting directories as resolved. You have to resolve conflicts to be able to commit the files/directories.

In case of directories you have the option to Resolve files and subdirectories recursively. If selected, all conflicting files and directories within the selected directory will be resolved. Otherwise only the property conflicts of the directory itself will be resolved.

Regarding the File Content, use Leave as is to apply no further modifications to resolved files. Use Take working copy to replace the contents of resolved files with their contents as they were before the update/merge. Use Take new to replace the contents of resolved files with the contents of their corresponding pristine copies as they are now after the update/merge. Use Take old to replace the contents of resolved files with the contents of their corresponding pristine copies as they were before the update/merge.

Tree Conflicts

Certain kinds of conflicts are not directly related to the content or properties of a file (or directory) but to conflicting actions on a file/directory. Such conflicts are called tree-conflicts.

Tree conflicts are similar to normal conflicts as conflicting files/directories can't be committed before they have been resolved. The Local State column for files shows details for a tree conflict, if present. File and directory tooltips display this information as well.

You have modified file foo.txt in your working copy. Your co-worker has renamed foo.txt to bar.txt and has committed this change. When updating from the repository, you will receive bar.txt but because of your local modifications to foo.txt this file will not be deleted, but re-scheduled as copied from itself (but the revision before the update). Furthermore, bar.txt will receive your local modifications of foo.txt. This represents a tree conflict. There are different kinds of tree-conflicts, for a detailed analysis refer to: http://subversion.apache.org/docs/release-notes/1.6.html#tree-conflicts

Mark replaced

Use Modify|Mark Replaced to mark modified files or a directory as replaced.

Marking modified files or a directory as replaced does not affect the contents of the files or directories, but only the meaning of the commit and the history of the directory/files. This can be useful to show that the content of a directory/files is not related to its previous revision. The Log of such a directory/files will not go beyond the replacement revision, meaning that the directory/files has been created at that revision.

For example, we have a Java interface Person.java and one implementing class PersonImpl.java. As the result of a refactoring, we are getting rid of the interface Person.java and renaming the class PersonImpl.java to Person.java. This results in a removed file PersonImpl.java and a modified file Person.java.

When simply committing these changes, this would mean that the class PersonImpl.java has been removed and the interface Person.java has been changed to a class Person.java, with no history except that of the interface.

Taking a closer look at this situation, it would be better to do a commit meaning that the interface Person.java has been removed and the class PersonImpl.java has been renamed to Person.java. At least that was the intention of our refactoring and it would also mean to preserve the history of PersonImpl.java for Person.java.

To achieve this, we will use Mark Replaced on Person.java and then we will use Move on Person.java and PersonImpl.java, performing a 'post-move' between both files, yielding a removed PersonImpl.java and a replaced Person.java, which has its history (Copy From) set to PersonImpl.java.

Clean up

Use Modify|Clean Up to clean up unfinished SVN operations for the selected directory (and all subdirectories). Cleaning up a working copy is necessary when the working copy becomes 'internally' locked. A working copy can become locked when certain SVN operations (like commit or update) are aborted. In general, cleaning up a working copy is a safe process.

A clean up may fail for the same reasons for which the preceding SVN operation has failed. This typically happens if certain files or directories can't be read or written. In such cases, please check whether other running processes might lock the file and whether file permissions have been set adequately.

Fix

- see Fix

A Change Set is a group of committable files and directories, with a message assigned. Subversion itself supports Changelists which currently can contain only files. SmartSVN automatically synchronizes the files of a Change Set with the corresponding SVN changelist. Change Sets are also known as 'prepared commit' in other version control systems.

Change Sets are displayed in the Directory Tree below the normal project directory structure.

Change Set root node
Change Set root node, which contains the modified project root directory
A virtual Change Set directory, which does not represent an actual project directory, but is necessary to display child directories and files.
(various) A Change Set directory which represents (or is equal to) the corresponding project directory.

Move to change set

Use Change Set|Move to Change Set to change the assigned Change Set of selected, committable files/directories.

To move the selected files/directory to a new Change Set, select New Change Set and enter the Message of the new Change Set. Select Remove this Change Set once it gets empty to automatically remove this Change Set once it gets empty. Select Allow only committable entries to automatically remove unchanged and other non-committable entries from Change Sets.

When having Remove this Change Set once it gets empty and Allow only committable entries selected, the Change Set will be automatically removed after committing it because

To move the selected files/directory to another, already existing Change Set, select Existing Change Set and choose the Target Change Set.

To remove the selected files/directory from their currently assigned Change Set, select Remove from Change Set.

Move up

Moves the current changeset up

Move down

Moves the current changeset down

Delete

Deletes the current changeset (but not the files).

Edit properties

Allows you to rename the changeset message, or change any of the configurable changeset options.

Tag Multiple Project Roots.

Use Tag+Branch|Tag Multiple Project Roots on one or more project roots (working copy roots) to create a tag for all of these roots.

Enter the Tag Name and Commit Message which will be used for the creation of the tag. Select Fix external revisions to have all revisions of externals set to their current values, as present in the working copy.

This functionality is provided by the Tag Multiple Project Roots plugin.

Tag Browser

Use Tag+Branch|Tag Browser to display all tags and branches of your project in a hierarchical structure. The hierarchy denotes which tags/branches have been derived (i.e. copied) from other branches.

Tags and Branches display the tags or branches location as specified with the Configure Layout command. The subsequent table will contain tags and branches found herein. A tag or branch has a Name, a Revision at which it had been created and optionally a Removed At revision at which it had been removed.

The tag browser is built upon information from the Log Cache. With Refresh you can refresh the cache and rebuild the tag/branch-structure.

Tags/branches can be deleted by Remove which will remove the corresponding directory from the repository.

From the Options button you can select to show both Branches and Tags, Branches only or Tags only. Recursive View specifies whether the table shall also display tags/branches which have been indirectly derived from the currently selected branch in the tree. Select Removed Tags and Branches to also display tags/branches which have been deleted within the Repository. The corresponding items will contain a red minus within their icon to denote the deletion.

The Branch drop-down button allows sorting of the branches either by Name or by Revision.

You can also invoke the Tag Browser from the tag or branch name input fields by clicking the ellipsis button to the right (...) or using <Ctrl>+<Space>-keystroke.

Configure Layout

Use Tag+Branch|Configure Layout to configure the Tag-Branch-Layout for the currently selected directory. This command is only available on the working copy root directory and externals roots. For details refer to Tag-Branch-Layout:

Tag-Branch-Layout

The Tag-Branch-Layout defines the project's root URL (within the repository) and where the trunk, tags and branches of the project are stored. For various commands this will affect the presentation, and interaction, of the URLs. When invoking a tag/branch-aware command on a directory for which no layout can be found, SmartSVN will prompt you to configure a corresponding layout in the Configure Tag-Branch-Layout dialog.

A Tag-Branch-Layout is always linked with a corresponding Project Root. A Project Root is simply the URL of the top-most directory of a project. Any directory can be defined as a project root as the definition of what a project is, is completely up to you.

The first decision for a Project Root is whether to enable or disable Tag-Branch-Layouts for it. Many SVN projects are organized using tags and branches. In this case choose Use the following layout to configure the layout. If the corresponding project is not organized by tags and branches, choose Do not work with tags and branches for this project root to switch Tag-Branch-Layouts off.

Trunk specifies the root directory of the project's trunk. Branches and Tags specify the directory patterns of the branch and tag root directories, respectively. All paths are relative to the Project Root. Enter the values trunk, branches/* and tags/* here if you want to use the recommended SVN standard layout.

The Subversion project itself is located at https://svn.apache.org/repos/asf/subversion. Hence for the corresponding SmartSVN project, Project Root must be set to https://svn.apache.org/repos/asf/subversion. Subversion's Trunk URL is https://svn.apache.org/repos/asf/subversion/trunk/, i.e. trunk is the relative path and must be set for Trunk. Branches are located in https://svn.apache.org/repos/asf/subversion/branches/, e.g. https://svn.apache.org/repos/asf/subversion/branches/1.8.x/ is the root of the '1.8.x' branch. I.e. Branches must be set to branches/*. This is similar for Tags.

It's also possible to use multiple branch or tag patterns. In this case, when entering, for example, a branch, you have to specify not only the branch name, but the relative path to the common root of all branches.

SmartSVN uses the proposed standard layout for new projects. If you want to configure another default layout, open one project which contains the desired layout, select Tag+Branch|Configure Layout and use Make this configuration the default here.

Open

Opens the selected files/directory. If the directory tree has the focus, this action will only work if a Directory Command has been configured in the preferences. If the file table has the focus, the file(s) will be opened in an editor. The editor to be used to open a file can be configured in the External Tools section of the Preferences. For files, you can specify a limit on the number of files beyond which you will be asked before the files are opened at once.

Open in repository browser

Open the selected directory/file in the Repository Browser.

Repository Browser

The Repository Browser offers a direct view into the repository and basic commands to manipulate repository contents directly. The Repository Browser comes as a stand-alone frame. It can be invoked from within the Project Window by Query|Open in Repository Browser or by Window|New Repository Browser. If a tray icon is present the Repository Browser frame can be invoked by New Repository Browser. The Repository Browser can also be invoked from Project Window commands via Repository path input fields and commands like Check Out or Import into Repository.

The Repository Browser displays the repository content with a Directory tree and a File table, similar to the Project Window.

The repository file system is only scanned on demand. This happens when currently unscanned directories are expanded. The Tag-Branch-Layouts will be used to display directory icons. Directory States shows the possible directory states.

Show changes

Use Query|Show Changes to compare the selected files or directory against their pristine copies. Show Changes will correspondingly open one or more File Compare frames or the Properties Compare for a directory.

Compare with head

Use Query|Compare with HEAD to compare a single, local file with the HEAD revision in the repository.

Compare with previous

Use Query|Compare with Previous to compare a single, local file with the last but one revision in the repository (i.e. the revision before HEAD).

Compare with revision...

Use Query|Compare with Revision to compare a single, local file with another revision of the same file or even another file. Select either to Compare the Working copy or the Pristine copy. Select to compare With the Trunk or a specific Branch or Tag or an arbitrary Other Location. Select whether to retrieve the repository file At the repository HEAD or at a another Revision. The result will be a File Compare frame.

Compare 2 files

Use Query|Compare 2 Files to compare two local files with each other. No connection to the repository is required.

When having one or more missing files selected, their pristine copies will be used for the comparison instead.

Compare repository files or directories

Use Query|Compare Repository Files or Directories to compare two different repository directories for changes (either added, removed or changed files and directories). This command gives you similar information like Create Patch between URLs, but in an easier to read form. The result will be a Compare Repository Files or Directories frame.

The comparison is performed for one Repository between directories From and To.

Select Recurse into subdirectories to compare not only the directory and its immediate files, but also descend into subdirectories.

Log

- see Log

Revision graph

- see Revision graph

Annotate

- see Annotate

Create patch

Use Query|Create Patch to create a 'Unidiff' patch for the selected files/directory. A patch shows the changes in your working copy on a per-line basis, which can for instance be sent to other developers. See Apply Patch on how to apply patches with SmartSVN.

The patch will be written to the given local Output File. In case of creating a patch for a directory, you can select Recurse into subdirectories to create the patch recursively for all files within the selected directory.

Select Ignore changes in EOL-Style to ommit output for line changes in which only the line ending differs. This can be useful if, after having the line endings of a local file changed temporarily, only 'relevant' changes should be included in the patch.

With For Whitespaces you can configure to ommit output for certain changes which are only affecting whitespaces. Use No special handing include any changes regarding whitespaces. Use Ignore changes in the amount to ignore lines for which only blocks with one or more whitespace characters have been replaced by blocks with one or more other whitespace characters. Use Ignore them completely to only output lines where anything except whitespaces has changed.

Create patch between URL's

Use Query|Create Patch between URLs to create a 'Unidiff' patch between two arbitrary URLs. See Create Patch for more details on patches. Compare Repository Files or Directories is a version of this command that presents the results in a more human-friendly way.

The patch is generated from one Repository and contains the difference between From and To. The patch will be written to the local Output File.

By default, this command takes the ancestry into account, meaning it does not simply calculate (and print out) the difference between two files which have the same path, but also checks if both files are actually related. You can switch this behavior off by selecting Ignore ancestry on the Advanced page. For details regarding the other Advanced options, refer to Create Patch.

Export backup

Use Query|Export Backup to export a backup of the selected files/directory.

Export displays what will be exported. Depending on the selection of files/directory this will either be the number of files being exported or All files and directories. Relative To displays the common root of all files to be exported and the exported file's paths will be relative to this directory.

You can either export Into zip-file or Into directory. In both cases, specify the target zip file or directory, and optionally choose to Wipe directory before copying.

Select Include ignored files and/or Include ignored directories if you want to include the respective ignored items (and their contents) as well.

Remove empty directories

When selecting this option SmartSVN will scan for any empty directories and will schedule them for removal.

Conflict solver

- see Resolving Conflicts

Refresh remote state

With Query|Refresh Remote State SmartSVN will query the repository and compare the latest repository revision with your local working copy. In this way, for each file and directory the corresponding remote state is assigned and displayed in the Remote State column; it will be made visible if necessary.

Refresh Remote State can be combined with the local Refresh and the scanning for locks in the Preferences to have the Remote State automatically refreshed.

If problems during the Remote State refresh are encountered, the status bar will display an Error in the Refresh area. The tooltip for this area will show more details regarding the encountered problem.

Clear remote state

Use Query|Clear Remote State to clear and hide the remote state. This will remove all directories and files which have the local state 'Remote' (see Common Primary File States and Primary Directory States) and hide the Remote State file table column.

Edit properties

Use Properties|Edit Properties to display and edit properties of the selected file/directory.

Internal SVN properties are displayed with grey font. It's not recommended to modify SVN properties directly through this dialog. It's better to use the other property-specific commands in the Properties menu.

You can Add, Edit and Remove individual properties. Use Revert on one or more properties to reset their Current Value to their Base Value.

Set or delete property

Use Properties|Set or Delete property to change a property for multiple files/directories at once.

Enter the name of the Property; the drop-down button offers the SVN internal properties for selection. To set a property value, either select Set Value To and enter the new property value, or, in case of boolean SVN-properties, select Set boolean property. To remove the property, select Delete Property.

For directories, choose to Recurse into subdirectories and optionally to Include this directory. Choose Force to skip a couple of checks which are performed for certain property (values).

To get rid of all explicit mergeinfo from your project except from the project root, select svn:mergeinfo for Property, choose Delete Property and Recurse into subdirectories and deselect Include this directory.

MIME-type

Use Properties|MIME-Type to change the SVN MIME-type of the selected files. The MIME-type can be either a default Text, a default Binary or a Custom type. In case of a Custom type, you have to specify the corresponding MIME-type here. E.g. 'text/html', 'application/pdf' or 'image/jpeg'.

MIME-types can't be arbitrary strings but must be well-formed. For instance, a MIME-type must contain a '/'. By default, SmartSVN checks whether MIME-types are well-formed. Use Force to disable this check.

The MIME-types are relevant for some SVN operations, for instance updating, where in the case of text types, the line endings etc. can be replaced. By default, when adding files (see Add), the coarse MIME-type (either text or binary) is automatically determined by SmartSVN. In general this detection is correct, but in certain cases you may want to explicitly change the MIME-type of the file with this command.

Within the project settings you can define file name patterns which should always be treated as binary.

EOL-style

Use Properties|EOL-Style to change the EOL-Style (line separator) of the selected files. The EOL-style is used when updating or checking out a text file and results in a corresponding conversion of its line endings:

In the project settings, the default EOL-style can be specified. This will be applied to every added file. By default, this will be Platform-dependent.

When changing the EOL-style of a file, SmartSVN checks whether the file has consistent line endings. If this is not the case, it will reject the EOL-style change (other behaviors can be configured in the project settings). To skip this check, use Force.

Keyword substitution

Use Properties|Keyword Substitution to select the keywords for the selected files, which should be substituted (expanded) locally. Keyword substitution only works for text files.

For each keyword you have the option to Set or Unset it. Select Don't change to keep the current substitution for the keyword.

Executable property

Use Properties|Executable-Property to change the 'Executable-Property' of the selected files. The 'Executable-Property' is a versioned property, but is only used on Unix(-like) platforms, where it defines whether the 'Executable Flag' should be set to a file or not.

Choose Executable if the 'Executable-Property' should be assigned to the file or Non-Executable to remove the property from the selected files.

Externals

Use Properties|Externals to define or change externals. An external (officially also referred to as externals definition) is a mapping of a Local Path to an URL (and possibly a particular Revision) of a versioned resource.

In general, externals are specified by complete URLs, but there are also shorter representations which can be more flexible. The URL input field allows switching between the available representations for a given URL. For a detailed description of externals and valid URL formats, refer to http://svnbook.red-bean.com/nightly/en/svn.advanced.externals.html.

To include the external http://server/svn/foo as directory bar/bazz at revision 4711 into your project, select directory bar and invoke Properties|Externals. Click Add, enter bazz into the Local Path input field, http://server/svn/foo into the URL input field, 4711 to the Revision input field and confirm by hitting OK: After committing your property change, an update on bar will create the subdirectory bar/bazz with the content from http://server/svn/foo at revision 4711.

It is safer to always set a Revision to externals. In this way you can always be sure about which version you are actually working with. When you decide to use a more recent revision of the external, you can evaluate it beforehand and, if you are satisfied, increase the Revision number of the external definition.

Externals may refer to directories as well as to files. In case of files, the referred URL must be part of the same repository to which its local parent directory belongs. (The local parent the directory is the directory to which the svn:externals property belongs.)

Ignore patterns

Use Properties|Ignore Patterns to add, change or delete local ignore patterns for a directory. Local ignore patterns define file and directory patterns to be ignored within the directory.

Local ignore patterns are stored within the working copy (in the svn:ignore property of the directory) and will be committed. Therefore ignore patterns can only be applied to versioned directories.

By default, the Patterns are only set to the selected directory. You may also choose to set the patterns to all subdirectories by Recurse into subdirectories. In case of recursive ignore patterns, you may alternatively consider specifying global ignore patterns within the project settings.

To add an ignore pattern, you can also use the Modify|Ignore command.

Bugtraq properties

Use Properties|Bugtraq-Properties to configure the Bugtraq-Properties for the current working copy. Bugtraq-Properties are a technique for integrating Subversion with issue tracking systems.

A detailed specification for the Bugtraq-Properties can be found at: http://tortoisesvn.tigris.org/svn/tortoisesvn/trunk/doc/issuetrackers.txt, username is guest with empty password.

Mapping from core bugtraq:properties to SmartSVN UI elements
Mapping from core bugtraq:properties to SmartSVN UI elements
bugtraq:url URL
bugtraq:warnifnoissue Remind me to enter a Bug-ID
bugtraq:label Message Label
bugtraq:message Message Pattern
bugtraq:number is true exactly if Bug-ID is set to Numeric
bugtraq:append is true exactly if Append message to set to Top
bugtraq:logregex For the version with one regular expression this corresponds to Bug-ID Expression. For the version with two regular expressions, Message-Part Expr. corresponds to the first line and Bug-ID expression corresponds to the second line.

Assuming your commit messages looks like this: Ticket: 5 Some message or ticket #5: Some message and you want the 5 to be rendered as a link to your issue tracker. In this case, set Bug-ID Expression to [Tt]icket:? #?(\d+) and leave Message-Part Expr. empty.

If you want the whole Ticket #5 part to show up as a link, use the same Bug-ID expression and also set Message-Part Expr. to this value.

Let's say your commit messages look like this: CF-11: Some message, or ET-12: Some message. Then, if you want the 11 and 12 to show up as links to your issue tracker, set Bug-ID Expression to \d+ and the Message-Part Expr. to (CF|ET)-(\d+).

If you want the whole CF-11 or ET-12 part to show up as a link, set Bug-ID expression to (CF-\d+|ET-\d+) and leave Message-Part Expr. empty.

Merge info

Use Properties|Merge Info to change the svn:mergeinfo property for the selected files/directory.

Refresh

With Locks|Refresh SmartSVN will scan the selected files, or all files within the selected repository directory, for locks. The result is displayed in the file table column Lock. This column is automatically made visible, if necessary.

You can combine scanning the repository for locks with refreshing the Remote State in the Preferences. You can also schedule a repeated refresh of the repository lock information in the Project Settings.

Lock

With Locks|Lock you can lock the selected files in the repository. You can also enter a Comment to explain why you are locking these files.

The option Steal locks if necessary will lock the requested files regardless of their current lock state (in the repository). With this option it may happen that you 'steal' the lock from another user, which can lead to confusion when the other user continues working on the locked file. Hence you should only use this option if necessary (e.g. if someone is on holiday and has forgotten to unlock important files).

Keep Update to HEAD before selected to perform an update to HEAD. Only the latest revision of a file can be locked.

Unlock

With Locks|Unlock you can unlock the selected files, or all files within the selected directory (recursively) in the repository.

The option Break locks will unlock the requested files even if they are not locked locally. With this option it may happen that you 'break' the lock of another user, which can lead to confusion if that other user is still working on the locked file.

Show info

Locks|Show Info shows information on the lock state (in repository) of the selected file.

State shows the current lock state (see Lock States). Token ID is the SVN Lock Token ID, which is normally not relevant for the user. Owner is the name of the user who currently owns the lock. Created At is the time when the lock has been set. Expires At is the time when the lock will expire. Needs Lock indicates whether this file needs locking, i.e. the 'Needs Lock ' property has been set. Comment is the lock comment, as entered by the user at the time of locking.

Change 'needs lock'

With Locks|Change 'Needs Lock' files can be marked/unmarked depending on whether they require locking. This is a useful indicator to users that they should lock the file before working with it. One aspect of this indication is that SmartSVN will set files which require locking (due to this property) to read-only when checking out or updating.

Reload

Use to refresh the file contents from the file system and recalculate the differences.

Previous change

Use to navigate to the previous change within the currently selected file. If there is no previous change, SmartSVN will select the last change of the previous file (as displayed in the file table).

Next change

Use to navigate to the next change within the currently selected file. If there is no next change, SmartSVN will select the first change of the next file (as displayed in the file table).

Ignore Whitespace for Line Comparison

If Ignore whitespace for line comparison is selected, two lines are treated as equal, if they only differ in the number, but not in the position of whitespaces.

Ignore Case Change for Line Comparison

If Ignore case change for line comparison is selected, uppercase and lowercase characters are treated as equal.

Settings

The Tab Size specifies the width (number of characters) which is used to display a TAB character. With Show whitespaces whitespace characters will be displayed. With Show line numbers a line number gutter will be prepended.

Select Remember as default to have the selected options apply to all File Compare frames.

For basic settings regarding text components, refer to Built-in Text Editors.

Refresh

Use to refresh the log information for the Watched URLs.

Mark as read

Use View|Mark as Unread or View|Mark All as Read to mark revisions as unread or read.

The read/unread state of revisions is not related to a single Transactions view, but shared by all views. For instance, multiple Project Window transactions and the Transactions frame itself may show the same repositories. Marking a revision as read/unread will change their state in all of these views.

Mark all as read

Use View|Mark as Unread or View|Mark All as Read to mark revisions as unread or read.

The read/unread state of revisions is not related to a single Transactions view, but shared by all views. For instance, multiple Project Window transactions and the Transactions frame itself may show the same repositories. Marking a revision as read/unread will change their state in all of these views.

Show branches and tags

Select to display not only the working copy revisions but also revisions of the trunk, branches and tags.

Show additional watched URL's

Select to display not only the working copy revisions but also revisions which have explicitly been configured to be watched by Configure Watched URLs.

Grouping of revisions

Use the View to group the revisions by different categories:

Merge

Use to merge the selected revision to your local working copy. If you want to configure advanced options for the merge, use the default Merge command.

Rollback

Use to roll back the selected revision/file/directory locally, i.e. in your local working copy. You may then review the rolled back changes and, if acceptable, commit them. This command will only be applicable for logs which are linked to a local working copy.

Change commit message

Use to change the commit message of the currently selected revision. Enter the new Commit Message and wait, if necessary, until SmartSVN has finished rebuilding the corresponding Log Cache.

Configure watched URL's

Use Edit|Configure Watched URLs to configure the observed URLs (i.e. repositories). Every entry must have a Name which will be displayed in the 'Root' column of the revision line prefix to distinguish revisions from different repositories. All revisions below the Root URL will be observed.

With the Display revisions for the last and But at most options you can put limits on how far into the past the Transactions view will display revisions.

Settings

Select Transactions|Settings to configure the Project Transactions.

Select Repeatedly refresh transactions to refresh the working copy transactions recurrently, with the same interval as for the Transactions frame. Select Refresh after loading project to automatically refresh the working copy transactions after a project has been loaded. Select Refresh after a command changed the working copy to automatically refresh after Updates, Commits, etc.

New Project Window

Opens a new Project Window for working on another project.

New Repository Browser

Opens a new Repository Browser.

Show Transactions

Shows the standalone Transactions Frame.

The Transactions frame can be invoked from within the Project Window or from within the Repository Browser by Window|Show Transactions. If a tray icon is present the Transactions frame can be invoked by Show Transactions.

The Transactions frame can be used to observe multiple repositories at the same time. Every revision of every repository is represented by one line in the transactions tree, which can be expanded to see which files/directories have been affected by the corresponding revision.

For repositories in an older format than Subversion 1.6, the received log data does not contain information on whether a changed entry is of file or directory type. Hence, all entries modified in a revision will be displayed using file icons (even if there are directories).

A revision line primarily shows the commit message of the corresponding revision and has a prefix which shows various properties of that revision:

Full Screen

Switches the program to full-screen mode. To get back to the normal mode, click on this menu entry again.

Minimize

Minimizes the program window. On most platforms, to bring it back you have to click on SmartSVN in the task bar.

Maximize/Restore

Maximizes or de-maximizes the currently active view. This action can also be performed by double-clicking on the tab title area of the respective view.

Hide Tool Window

Hides the currently active view. This is the same as clicking on the Close button of the view. To bring the hidden view back, select the corresponding entry in this menu. For example, after hiding the Directories view, you can bring it back with Window|Directories.

Directories

Puts the focus in the Directory tree.

Directory Tree and File Table

The directory tree and the file table show the local directories/files below the project's root directory. .svn directories, ignored directories and files within other ignored directories are not displayed.

Directory States/Directory Tree

The directory tree shows the project's directories and their SVN states, which are denoted by different icons. The primary directory states are listed in Primary Directory States. Every primary state may be combined with additional states listed in Additional Directory States. In case of a versioned directory, the corresponding revision number is displayed after the name of the directory. The revision will be omitted if it's equal to its parent directory revision. If the directory hasn't been checked out with depth Fully recursive, the check out depth will be displayed in parantheses, too. The tooltip shows detailed SVN information for the corresponding directory, similar to the contents of the file table, see below.

To speed search the directory tree for a certain directory, click into the tree (so the Directories view becomes active) and start typing the directory name. A small popup will be displayed showing the characters you have already entered. Wildcard symbols '*' and '%' can be used with the usual meaning.

File States/File Table

The file table shows the project's files with their SVN states and various additional information. The primary file states are listed in Common Primary File States and Rare Primary File States. Every primary state may be combined with additional states listed in Additional File States. The rest of this section explains configuration options for the file table. They are only related to the current project and are also stored with the current project.

Name Filters

The toolbar of the file table contains the Filter input field, which can be used to restrict the displayed files to a certain file name pattern. By default, simple patterns, including the wildcard symbols '*' and '%', are supported. You can also use '!' at the beginning of a pattern to invert it. For example, '!*.txt' will show all files which don't have the .txt extension.

To clear the Filter field, click on the button right side of the field. In the drop-down menu on the left side of the Filter field, you can select Regular Expressions instead of simple patterns. For details on the supported regular expression constructs refer to http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Pattern.html. With Save Pattern you can save a pattern. Once a pattern is saved it will be displayed in the top of the drop-down menu. It can be used by selecting it and removed again by Remove Pattern.

Similar to the directory tree, the speed search is also available for the file table.

State Filters

With the menu items in the View menu, you can also set filters to display only files which meet certain criteria. Refer to the View menu for details. The filter behavior can be customized in the Preferences with Hide ignored and repository-only directories according to View-menu filters on the User Interface page.

Double Click

By default, if you double-click on a file in the file table, the file will be 'opened' in one of several ways, depending on its file state:

If, for example, you want to always open (Edit) the file independent of its state by double-clicking it, assign the <Enter>-keystroke accelerator (Accelerators) to the Query|Open menu item.

Files

Puts the focus in the File table.

See Directory Tree and File Table for details

Output

Puts the focus in the Output view.

Changes

Puts the focus in the Changes view.

Transactions

Puts the focus in the Transactions view.

Main Perspective

Switches to the Main Perspective.

Review Perspective

Switches to the Review Perspective.

Help Topics shows the online version of SmartSVN's help.

Advanced Settings

In addition to the options on the preferences dialog, SmartSVN has some advanced settings that can be set through the configuration file smartsvn.properties. How it is used is described in the following subsection. Additionally, you can change the program's memory limit, which is described here as well.

System Properties

SmartSVN can be configured by editing the file smartsvn.properties in the settings directory. The smartsvn.properties file contains further documentation about the available settings, so the latter will not be listed here. In this section, we will only show an example in order to give a general idea of how to alter settings in the smartsvn.properties file.

First, open the settings directory. In the settings directory, you will find the smartsvn.properties file. Open it with a text editor.

The default location for the settings directory is as follows:

Standard Properties

Memory Limit

The memory limit (also known as maximum heap size) specifies how much RAM the SmartSVN process is allowed to use. If the set value is too low, SmartSVN may run out of memory during memory-intensive operations. To avoid this, we recommend adjusting your maximum heap size to 3GB when adding or committing a large number of files to a repository. How the memory limit is set depends on your operating system:

Notable configuration files

Company-wide Installation

For company-wide installations, the administrator can install SmartSVN on a network share. To make deployment and initial configuration for the users easier, certain configuration files can be prepared and put into the subdirectory default (within SmartSVN's installation directory).

When a user starts SmartSVN for the first time, the following files will be copied from the default directory to their private configuration area:

The license file (for Enterprise licenses and 10+ Professional licenses) can also be placed into the default directory. In this case, SmartSVN will prefill the License field in the Set Up wizard when a user starts SmartSVN for the first time. When upgrading SmartSVN, this license file will also be used, so users won't be prompted with a 'license expired' message, and can continue working seamlessly.

JRE search order (Windows)

On Windows, the smartsvn.exe launcher will search for an appropriate JRE in the following order (from top to bottom):

Command line arguments

SmartSVN supports a couple of command line arguments:

Plugins

JIRA plugin

The JIRA Plugin provides a basic issue tracker integration for the JIRA issue tracker from Atlassian, see http://www.atlassian.com/software/jira.

The plugin adds a Get from JIRA entry to the drop-down menu of the commit message text fields. For the Commit wizard itself, it will also parse the commit message for potential JIRA issue IDs and ask whether to resolve these issues on successful commit.

Workflow

Before connecting to JIRA, SmartSVN will ask you for your Username and Password which may be optionally stored by Store password. If you are connecting to an SSL-secured JIRA server, you will have to confirm the validity of SSL-certificate fingerprints. In case SSL client authentication is required, enter the path to the Certificate file and its Passphrase which may optionally be stored by Store passphrase.

On the Files page of the Commit wizard, use Get from JIRA to display a list of JIRA issues, including their Key, Summary and Status. For reasons of clarity, the list will only contain issues which are assigned to your username and which are either in in-progress state or are contained in the next three unreleased versions (the number of unreleased versions can be changed in System Properties). If there are no unreleased versions, assigned issues for all versions will be loaded.

You can select one or more issues here which will then be set for the Commit Message. Using Refresh can be useful to reload issues from JIRA.

When proceeding with the commit the plugin will check the Commit Message for JIRA issue IDs. For every issue found, you will be prompted with a Resolve JIRA Issue dialog for which you can either select to Mark as resolved in revision and select the resolution revision. This will contact JIRA and resolve the issue correspondingly. Don't mark as resolved will leave the issue as it is.

Requirements

The availability of the plugin functionality for a certain working copy depends on whether bugtraq-properties for the working copy root directory have been configured and whether the bugtraq:url is pointing to a JIRA Issues page. Following types of URLs are recognized:

The plugin only works for recent JIRA versions which provide a SOAP interface. The SOAP interface has to be enabled for your JIRA server (what can typically only be done by the administrator).To do this, select Properties/Bugtraq-Properties. The 'Edit Bugtraq-Properties' window will then open. From here you can configure the JIRA integration. Enter the URL of a JIRA issue replacing the the numerical ID with %BUGID%. For example if the URL of the JIRA issue was:

https://jira.customer.com/browse/ME-123

You would enter:

https://jira.customer.com/browse/ME-%BUGID%

Next, edit the Bug-ID Expression text field by selecting one of the options from the menu button. Click OK and the JIRA integration is complete. The project will now show as modified because of the changes to the SVN directory.

Trac plugin

The Trac Plugin provides a basic issue tracker integration for the Trac issue tracker from Edgewall Software, see http://trac.edgewall.org.

The plugin adds a Get from Trac entry to the drop-down menu of commit message text fields (see Commit). For the Commit wizard itself, it will also parse the commit message for potential Trac ticket IDs and ask whether to resolve these tickets on successful commit.

Workflow

Before connecting to Trac, SmartSVN will ask you for your Username and Password which may be optionally stored by Store password. If you are connecting to an SSL-secured Trac server, you will have to confirm the validity of SSL-certificate fingerprints. In case SSL client authentication is required, enter the path to the Certificate file and its Passphrase which may optionally be stored by Store passphrase.

On the Files page of the Commit wizard, use Get from Trac to display a list of Trac tickets, including their Id, Summary, Status, Milestone and Version. For reasons of clarity, the list will only contain tickets which are assigned to your username and which are either in an accepted state or are contained in the next three unreleased versions respectively in the three incomplete milestones (the number of unreleased versions can be changed in System Properties). If there are no unreleased versions, assigned tickets for all versions will be loaded. If there are no incomplete milestones, assigned tickets for all milestones will be loaded.

You can select one or more tickets here which will then be set for the Commit Message. The commit message pattern depends on the property bugtraq:message. If this property is not set, the pattern can be configured individually over Configure in the ticket list dialog. Using Refresh can be useful to reload tickets from Trac.

When proceeding the Files page with Next, the plugin will check the Commit Message for Trac ticket IDs. For every ticket found, you will be prompted with a Resolve Trac Issue dialog for which you can either select to Mark as resolved in revision and select the resolution revision and milestone (this will contact Trac and resolve the ticket correspondingly), or Don't mark as resolved which will leave the ticket as it is.

Requirements

The availability of the plugin functionality for a certain working copy depends on whether bugtraq-properties for the working copy root directory have been configured and whether the bugtraq:url is pointing to a Trac ticket page. The following types of URL are recognized:

http(s)://host:port/prefix/ticket/TicketID

The plugin only works for recent Trac versions which provide a Trac XML-RPC Plugin. The Trac XML-RPC Plugin has to be installed and enabled for your Trac server (this is usually done by the administrator). For details on how to install and enable the Trac XML-RPC Plugin, refer to http://trac-hacks.org/wiki/XmlRpcPlugin.

Plugin API

SmartSVN's Plugin-API can be used to customize various aspects of SmartSVN by creating corresponding plugins. The Plugin-API currently covers following functionality:

Shell Integration

SmartSVN offers a shell integration to have the SVN functionality of SmartSVN present in certain parts of the GUI shells, like in file dialogs. The shell integration is currently present on Microsoft Windows and Apple Mac OS X. It is only available when SmartSVN is running (except the one on Mac OS X 10.6).

Commands (Windows and OS X 10.5)

For locally versioned files and directories, the most important SVN commands are available from the shell's context menu. Performing commands from the shell's context menu results in the same dialogs and windows as if performing the commands from the Project Window.

For commands performed from the shell, the same environmental settings are used as when performing them from the Project Window. This especially implies to the Project Settings, if for the current working copy directory, a corresponding project exists. If no matching Project can be found, SmartSVN will use the Default Settings.

From the context menu, use Open Project (or Open SmartSVN if no file/directory is selected) to launch the Project Window and open the corresponding project.

Commands (OS X 10.6)

Unfortunately, Apple has dropped the Finder integration API with OS X 10.6. Hence, SmartSVN can only provide a very simple alternative using socalled services. From the Finder's context menu three commands are available if files or directories are selected: Update from SVN, Commit to SVN and Open in SmartSVN. Note, that because of the limited services API these commands are available independent of the SVN state of these files or directories. They are even available for items which are not SVN-controlled. In contrast with the shell integration on Windows and OS X 10.5, SmartSVN does not need to be running to be able to invoke the commands. If necessary, SmartSVN will start automatically.

Output Window

All commands invoked from the shell integration will be executed in a special output window. You may select Close automatically on success to have the window closed automatically after all currently running operations have been completed successfully.

File Menu
Edit Menu
Overlay Icons

The overlay icons show the SVN states for the corresponding files and directories. Currently, overlay icons are only present on Windows. Because the number of possible overlay icons is limited by the operating system, only the most important SVN states have a special overlay icon. Versioned, but unchanged files and directories do not have a special overlay icon. For all other SVN states, the modified icon is used.

Modified File/directory is modified in contents/properties.
Modified recursively Directory itself of some file/subdirectory is modified (requires the Status Cache service running.
Added File/directory is scheduled for addition.
Removed File/directory is scheduled for removal.
Ignored File/directory is not under version control (exists only locally) and is marked to be ignored.
Conflicted An updating command lead to conflicting changes either in content or properties.
Unversioned File/directory is not under version control, but only exists locally.
Root Directory is a working root and is not modified.
Overlay Icons
Server Mode

To provide the shell integration without requiring SmartSVN actually being open, SmartSVN can be started with the --server-mode argument.

Windows Shell Integration

The shell integration adds overlay icons to directory and file views of Windows and SVN commands in the context menu. You will especially see them for the Windows Explorer, but also for other software which uses the native file dialogs of Windows.

Installation

You can choose to enable the shell integration for the installation of SmartSVN, when using the MSI installers. It's also recommended to have SmartSVN automatically be started with the system startup, so the shell integration is available immediately. The installers offer a corresponding option which will add SmartSVN to the Autostart section, starting SmartSVN in server mode.

Uninstall

The shell integration will be uninstalled together with SmartSVN. You can also uninstall the shell integration independently from the Control Panel, Software, using Repair there.

Mac OS X Finder integration

The Finder integration lets you perform SVN commands in the Finder using the context menu.

Installation

On the first start, SmartSVN asks whether to install the Finder integration. If you choose to install it, SmartSVN will create a symbolic link ~/Library/Contextual Menu Items/SmartSVN CM.plugin. If you choose not to install, you can install it later by selecting the option Integrate in Finder on the Shell Integration page of the Preferences.

If the installation by SmartSVN itself fails for some reason, you can install the Finder integration yourself. If the folder does not exist yet, create it. Right click the SmartSVN application in the Finder and select Show Package Contents. Copy the SmartSVN CM.plugin from within the SmartSVN application to the folder ~/Library/Contextual Menu Items. Log out and login again.

Uninstallation

Unselect the option Integrate in Finder on the Finder Integration page of the Preferences.

To manually uninstall the Finder integration, just delete ~/Library/Contextual Menu Items/SmartSVN CM.plugin and log out and relogin again.

Automatic start at login

The Finder integration will only work when SmartSVN is running. The easiest way to do that automatically, is to let SmartSVN be launched at login. Just right click the SmartSVN dock icon and select Open at Login. Alternatively, you can use the Accounts panel in the System Preferences to define SmartSVN as a Login Item. Note, that the Hide option has no effect. If SmartSVN is defined as a Login Item, it will be started in server mode.