About

The coolest Interface to (Sub)Version Control
TortoiseSVN

TortoiseSVN is a really easy to use Revision control / version control / source control software for Windows. It is based on Subversion. TortoiseSVN provides a nice and easy user interface for Subversion.
It is developed under the GPL. Which means it is completely free, including the source code. But just in case you don't know the GPL too well: you can use TortoiseSVN to develop commercial applications or just use it in your company without any restrictions.
Since it's not an integration for a specific IDE like Visual Studio, Eclipse or others, you can use it with whatever development tools you like.

As a Subversion client, TortoiseSVN has all the features of Subversion itself, including:

Easy to use

Since TortoiseSVN is a Windows shell extension, it integrates in the file explorer. That means you can use it with the tool you are most familiar with.

Commit dialog

The dialog you most likely will be using the most is the commit dialog. Whenever you commit your changes, you will use that dialog. That's why we made that dialog very powerful, with a lot of features which help you write log messages and discover local changes.
  • Powerful commit dialog
  • All Subversion protocols are supported
  • The big picture

  • The big picture
  • Integration with an issue tracker

    The specifications for integrating Subversion development with your issue tracking system was cooperatively created and developed by the TortoiseSVN and Subclipse teams. Both products support these features, and since the first introduction of the specification many other tools added support for them.

    Background

    Issue trackers don't have a direct connection to a version control system. Those are usually two completely different systems (software wise). They're only logically related.
    The problem arises due to the fact that neither of these two systems provide the means to really connect them without special user interaction. For example, it's not possible to commit a bug fix and at the same time close the issue assigned to the bug. The user still has to close the issue manually after committing the bug fix.

    Subversion has the ability to run hook-scripts for every commit. Some issue trackers started providing such scripts to assign a commit to a specific issue. They usually do this by parsing the log message, looking for a specific string telling them the issue ID. This requires that the user knows how to write and format the log message so the issue tracker hook-script can parse it correctly. Of course, this is very error prone.

    Another problem was that while such issue tracker hook-scripts could assign a commit to a specific issue, that integration is only in one place: the server / issue tracker. Which means while it is possible to see all commits which belong to a specific issue, the other way around doesn't work. It's not possible to see the issue which belongs to a specific commit - the client programs haven't implemented that.

    Issue tracker integration
    With all this in mind, we put together a list of goals we wanted to address:

    1. Reduce the possibility for user errors when writing the commit log message. Don't rely on the user to know the specific format but provide the format in the client somehow.
    2. If possible, validate the format of the commit log message directly in the client to reduce possible 'reject' errors from the server hook script.
    3. Show the issue IDs which get assigned to a commit in the client (e.g. the log dialog). If possible, provide a link to the issue tracker.
    4. It must not break existing Subversion clients or issue trackers.

    The result of very long discussions and valuable feedback from developers working on issue trackers (e.g. Michael Pryor from FogBugz) finally resulted in the specification you can find here (username = 'guest' with no password).

    Details

    Now that we have gone over how and why this was implemented, let's have a look at how you actually can use this feature.
    Since Subversion doesn't provide project settings, we had to find a way around this limitation. We settled on using Subversion properties which we handle specially, and calling them project properties. Again, the exact specifications are somewhat complicated. But basically the client is required to search upwards in a working copy for those properties and use the first ones it can find. That way, if you set those properties only on the /trunk folder of your project, they still apply to all subfolders. Of course, there's a limitation here: it only works if you have your project checked out from /trunk and not a subfolder. At least one folder in your working copy path must have these properties set for them to work.

    We decided to prefix the properties responsible for configuring the issue tracking integration with bugtraq:. We chose bugtraq with the slightly odd spelling just to avoid any potential current or future namespace conflicts. Here are the properties and an explanation of each, worded slightly differently from the original specification to make it more clear for the average user.

    bugtraq:url
    Set this to the URL pointing to the issue tracker. The URL should contain the string "%BUGID%" as a placeholder for the issue ID. For example, the URL http://issues.tortoisesvn.net/?do=details&id=%BUGID% would get transformed in the client to http://issues.tortoisesvn.net/?do=details&id=123 .
    Issue tracker url in log dialog
    bugtraq:warnifnoissue
    if this is set to "true" or "yes", then the client program will show a warning if the user has not entered an issue ID, i.e. if (s)he forgot to assign the commit with an issue.
    bugtraq:logregex
    this defines a regular expression which is used to parse the commit log message. The client then indicates the regex matches in some way so the user can recognize if (s)he assigned the commit successfully with an issue. TortoiseSVN does this by coloring the entered text differently.
    bugtraq:label
    set this to a string describing the text box where the issue ID can be entered. It defaults to "Bug-ID / Issue-Number" as shown in the screenshot below.
    bugtraq:message
    this defines the string which can be parsed by the issue tracker hook script. The string must contain the string "%BUGID%", which the client will replace with whatever the user enters in the issue ID text box.
    Issue tracker in commit dialog
    bugtraq:append
    By default, the bugtraq:message string is appended to the log message the user entered. You can specify that the string is prepended by setting the property bugtraq:append to 'false' or 'no'.
    bugtraq:number
    if this is set to 'true' or 'yes', the client program has to make sure that only numbers can be entered into the issue ID text box.

    With the bugtraq:logregex set, the commit dialog in TortoiseSVN will indicate that you've entered an issue correctly by showing the main part in italic, and the issue ID itself in bold.

    Issue tracker in commit dialog

    More detailed information about integration of TortoiseSVN with issue trackers can be found in our manual.

    Conclusion

    Users lobbied hard for this feature, and I think the way we implemented it is good for the users.

    I do not know the complete list of Subversion clients that have added support for these properties, but I know that it goes beyond Subclipse and TortoiseSVN and includes several of the web-based repository browsers.

    List of known tools which make use of these features

    Helpful tools