Support

There are several places where you can get support for TortoiseSVN.

Online documentation


Webtortoisesvn.net

Manuals (release version)

If you have TortoiseSVN installed, you can simply press the F1 key in any dialog to start up the help. That help is the same as the documentation you find here.

Language TortoiseSVN TortoiseMerge
 EnglishPDFHTMLPDFHTML
 Chinese, simplifiedPDFHTMLPDFHTML
 Croatian  PDFHTML
 DutchPDFHTMLPDFHTML
 FinnishPDFHTMLPDFHTML
 FrenchPDFHTMLPDFHTML
 GermanPDFHTMLPDFHTML
 IndonesianPDFHTMLPDFHTML
 JapanesePDFHTMLPDFHTML
 Portuguese, BrazilPDFHTMLPDFHTML
 Portuguese, PortugalPDFHTMLPDFHTML
 RussianPDFHTMLPDFHTML
 Serbian cyrillicPDFHTMLPDFHTML
 Serbian latinPDFHTMLPDFHTML
 SlovakPDFHTMLPDFHTML
 SlovenianPDFHTMLPDFHTML
 SpanishPDFHTMLPDFHTML

Manuals (developer version)

These manuals are only for the trunk build, not released versions. Please note that these docs aren't updated nightly but very irregularly.

Language TortoiseSVN TortoiseMerge
 EnglishHTMLHTML
 Chinese, simplifiedHTMLHTML
 Croatian  HTML
 DutchHTMLHTML
 FinnishHTMLHTML
 FrenchHTMLHTML
 GermanHTMLHTML
 IndonesianHTMLHTML
 JapaneseHTMLHTML
 Portuguese, BrazilHTMLHTML
 Portuguese, PortugalHTMLHTML
 RussianHTMLHTML
 Serbian cyrillicHTMLHTML
 Serbian latinHTMLHTML
 SlovakHTMLHTML
 SlovenianHTMLHTML
 SpanishHTMLHTML

Older Manuals

Older releases are available from the Sourceforge files section.

Professional Support

A lot of companies also offer professional support. Two of them are also active in the development of Subversion itself and have hired developers who work actively on the projects. So they know what they're supporting and can actually help you:

WANdisco also has a support forum for TortoiseSVN, which you can find here.

Project Status

Have a look at our project status page to see what we are working on at the moment, and to check the release history.

Subversion book

Read the official Subversion book Version Control with Subversion to find out what it's all about. This book explains the general concepts of Subversion. It's no must, but it'll give you deep insight. There's also a free online version available.

FAQ

A list of common problems and their solutions can be found in the FAQ. Please note that the FAQ contains answers, but is not the place to ask questions. For that you need to go to the users mailing list. When we have a good answer to a good question we post it in the FAQ.

Mailing list

If your question is not answered in any of these places, you can subscribe to one of our two mailing lists:

Before you post/subscribe to one of these lists, please read our list etiquette. Also please search the archives before posting questions. Many questions have been asked before.

You can subscribe to our mailing lists here.

If you want to search the lists, our mailing lists are archived on gmane.org and haxx.se. You can either access the archives via http: or nntp: protocol. Haxx.se is recommended for searches.

Users list archive

Developer list archive

RSS Feed

The latest updates on our project web page are always visible in a RSS feed.

FAQ

You can find the FAQ here.

You might also want to read our Manual to get up and running before searching the FAQ.

If your question is not answered by this FAQ, you can ask it on the TortoiseSVN Mailing List.

-The TortoiseSVN team


I think I found a bug in TortoiseSVN!

Preparations

Before you report a bug, please make sure you have completed the following steps:
  • Update to the current version. Reports for older versions will be ignored.
  • Check the Changelog file from /trunk/ and see if your bug has already been fixed. (use 'guest' as username and leave the password field empty)
  • If possible, update to the latest nightly build and see if the bug is still there. You can find the link to the nightly builds on our download page.
  • Check the mailing list archive. Maybe someone else already reported the same bug you're seeing, and if so that bug might be already fixed.
  • Check the issue tracker. Maybe your bug has already been filed there.
  • If you've got a zip file from our crashreporting tool, send it to crashreports_at_tortoisesvn.tigris.org. Note that we don't answer mails there. Other kinds of bugreports on that list will be deleted without being read.

How to write the bug report

There is a large number of TortoiseSVN users. There is a much small number of people who actually develop TortoiseSVN. There is an even smaller number of people who actively fix bugs reported by users.

What does this mean for you, an aspiring bug reporter? In order to catch the eye of one of these few volunteers, you'll need to take to heart a few tips on how to report a bug so that they can and will help you.

Take special note of that word in bold above. The people who are going to help you with a bug you report are volunteers. Not only are you not paying them to help you, but nobody else is either. So, be nice to them.

Beyond that golden rule, what follows are some additional tips on ways to make your bug report better so that someone will be able to help you.

The basics: what you did, what you wanted to happen, and what actually happened.

Those are the three basic elements of a bug report. You need to tell us exactly what you did (for example, "I right-clicked on "make happy meal"), what you expected to have happened (to continue the example, "I expected TortoiseSVN to serve me a happy meal with a hamburger and onion rings"), and what actually happened ("It gave me a happy meal with french fries.").

Yes, the example is silly. But if your bug report simply said "The make_happy_meal function doesn't work," you will very likely get a reply saying "It works fine for me", because we can't guess what you were expecting to happen. By giving all the information you might get a reply like "That's because you can't have onion rings in a happy meal, you can only have french fries or curly fries." By telling us what you asked for, what you expected to get, and what you actually got, we don't have to guess what you mean.

Only report one problem in each bug report

If you have encountered two bugs that don't appear to be related, create a new bug report for each one. This makes it easier for different people to help with the different bugs.

Where to send the report to?

Bug reports must be mailed to our mailing list (users at tortoisesvn tigris org). Please see our community page for details on how to post.

Installation & Upgrade

This chapter covers general installation & upgrade issues, like missing icon overlays, installer problems and the like.

You will also find some information on how to set up SSL encrypted communication with your server as well as using SSH and client certificate authentication.

If you need help about the msi installer in general, please refer to the according documentation from Microsoft.


When upgrading TortoiseSVN, do I have to uninstall the existing version first?

No. You can just install the new version over the old one. The installer will take care of uninstalling the old version first automatically. But you must reboot your computer after the installer finishes! Or at least you have to log off and log on again. If you don't, TortoiseSVN will crash!


BDB error after upgrading TSVN

After upgrading to TSVN 1.2 you may get error messages like this when using file:// access to a BDB repository:

Unable to open an ra_local session to URL
Unable to open repository 'file:///C:/Svnrepos/TortoiseSVN/trunk'
Berkeley DB error for filesystem C:/Svnrepos/db while opening environment:
DB_VERSION_MISMATCH:
Database environment version mismatch
bdb: Program version 4.3 doesn't match environment version

Subversion 1.2 uses BDB 4.3 so you need to do some minor updates to your BDB repositories to use them from 1.2.

Instructions for fixing this can be found in the Subversion FAQ.


Do I need Admin privileges to install 1.3.x?

When you try to install TortoiseSVN 1.3.0 or higher and you don't have Administrator privileges, you will get an error.

Unfortunately, you must have Admin privileges to install those versions of TortoiseSVN. The reason is that those versions are linked against the latest MFC and CRT versions (8.0) which are installed as side-by-side assemblies and require Admin privileges for that.

You can "work around" this if you install just MFC and CRT as an Administrator. If those are already installed on your system, TortoiseSVN can be installed as a normal user.


Do I need to install Subversion before I can use TortoiseSVN to access SVN repositories?

No. TortoiseSVN comes with everything you need to access a repository. Only if you want to set up a server then you will need the Subversion package.


How do I uninstall TortoiseSVN?

Simply uninstall from Add/Remove Programs in the Windows control panel. This does not effect your repositories or working copies at all. Be aware however, that the subversion database schema might change before subversion 1.0 is released.
When you are working with local repositories (file:/// URLs), a newer version of TortoiseSVN might be incompatible to an old repository. Please check the subversion release notes.


I installed a new version of TortoiseSVN, but the new functions aren't visible

TortoiseSVN is a Windows explorer shell extension. So after updating you must restart windows or at least the explorer process. If you don't then the the explorer process still has the old version of the dll loaded in RAM and uses that old version...

If that doesn't help, uninstall TortoiseSVN again. Then run our little CleanInstall tool you can download from here. Then you can install TortoiseSVN again.

I upgraded TortoiseSVN and now the context menus/overlays have gone

There are several possible reasons for this:

  1. The obvious one first - you forgot to reboot as prompted!
  2. Changes to the installer around version 1.2.x have occasionally caused problems when upgrading from older versions. The workaround is first to uninstall TSVN and reboot.
    Then run our little CleanInstall tool you can download from here. Then you can install TortoiseSVN (and reboot) again.
  3. If you are viewing a working copy on a network share, the type of overlay to use is monitored by TSVNcache.exe, and as of V1.2.2 this needs access to the root of the mounted volume in order to see changes. If it can't monitor that, it assumes unversioned, so the overlays appear not to work. You must configure network access such that the ReadDirectoryChangesW() can work on the volume root. Unfortunately this call is not supported by SAMBA so overlays will not work on those mounts.

Is it possible to install TortoiseSVN for just one user?

You can install TortoiseSVN for just one user. But you need at least the privileges to write to the HKLM registry keys. If you don't have those permissions, then you can't install it.

Of course, you can only do this if you already have the MFC and CRT libraries version 8 installed on your system. To install these, you require Admin privileges.
You can get those libraries from the Microsoft website if you really require that TortoiseSVN is only installed for one user.

If you simply want to hide the context menu's in the explorer for certain users, you can use a feature new for version 1.5.x:
Allow disabling of explorer context menu entries.


Is there a Version of TortoiseSVN for older OS (95/98/ME/NT)?

Version 1.1.7 of TortoiseSVN has been released a while ago. It is the last version that supports Windows 95/98/NT. Beginning with TortoiseSVN 1.2.0 only Windows 2000, Windows XP and later will be supported

Download:

Win95, Win98, WinNT, NT4


MSI installation is disabled on my machine. Is there a .exe installer?

An exe installation file wouldn't help. If msi installation is really disabled on your machine, then you don't have ADMIN priviledges either. And you would need those to install TSVN (shell extensions require ADMIN rights to install).
But first make sure that msi installation is really disabled - that can only be if your domain administrator disabled it. Otherwise, check our FAQ for problems with installation.
Maybe you just need to install the msi package from Microsoft first:

Windows Installer 3.1 redistributable

And for all those who like to suggest to use something else than an msi (we even had people demanding we use a simple bat file for the installation) let me explain once and for all why we use an msi:

  • It's open. Everybody can see what we're doing by using msi tools like Orca.
  • It's easy to adjust an existing msi for your special needs if you like. There are tools with which you can edit an msi manually. You can't do that with an exe installer.
  • It runs with SYSTEM privileges, not just as e.g. Administrator. That's important because TortoiseSVN is a shell extension which requires us to create and modify registry keys which aren't accessible to user accounts (at least on Vista, that would cause big troubles if UAC is enabled).
  • It's easy to distribute an msi to multiple computers/users in a domain via GPO's. All other installers would require a domain admin to first 'wrap' that installer inside an msi to do that.
  • msi is the standard and recommended way of installing windows applications.
  • There's a great open source tool for creating msi files: WiX which we use.

That said, please accept that we won't change this. We won't create another installer for you. You have to live with the fact that TortoiseSVN requires msi.


Silent MSI install on a windows computer ?

msiexec /package TortoiseSVN.msi /quiet INSTALLDIR="path/to/install/dir"


The installer aborts with an error message

Several error messages are combined in this FAQ. If you find another one, and a solution for it, please let us know.

Note: as of TSVN 1.2.0, Windows 95/98/ME and Windows NT4.0 are no longer supported.

  • "This installation package is not supported by this processor type. Contact your product vendor."
    This means you are trying to install the 64-bit version of TortoiseSVN on a normal 32-bit operating system. You need to download and use the correct msi file for your OS. For normal 32-bit OS, make sure the msi file does not have an x64 in it.
  • "The installer was interrupted before TortoiseSVN could be installed. You need to restart the installer to try again"
    Then the user SYSTEM doesn't have read/execution rights in the folder where
    the installer msi is located. Either move the msi file to another
    location or give the user SYSTEM read and execution rights.
  • "The windows installer service could not be accessed"
    This can occur if you are running Windows in safe mode, or if the windows installer is not correctly installed.
    For this kind of error message, please check out the Microsoft Knowledgebase article Q315346 (basically, check that the folder where the msi is stored isn't encrypted or compressed)
  • "The system can not open the device of file specified", followed usually by "The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is 2755".
    This can happen if:

    • The installation does not have access to the Temp directory or if the default Temp directory of the machine is not clean or does not have enough space to run the setup.
    • The installation is being run over a terminal Server via a mapped network drive.
    • The installation is unable to create or write to the Installer directory in a Windows NT system environment.

    To solve this problem, clear the temp folder, move the installer msi file to your local harddrive where the user SYSTEM has full access rights.
    The following knowledge base articles may help:

    • 220780 OFF2000: Setup Error 2755 with Earlier Office Version Installed
    • 217714 OFF2000: Setup Appears to Stop Responding, Followed by Internal Error 2336 or 2755
    • 254841 OFF2000: Internal Error 2755, When You Try to Install from a Remote Windows Terminal Server Client
    • 305640 PRJ2000: Internal Error 2381 or Internal Error 2755 When You Install Microsoft Project

The TortoiseSVN menu is invisible!

There are a number of known problems with disappearing menus, which are due to the Windows Explorer, not TSVN.

  • If you select a folder in the left pane of explorer, then use the File menu to access TSVN, the menu text and icons are invisible the second time you use the File menu. If you select another folder, the menu is restored. This happens under Windows 98, ME, NT and 2000. Everything works fine under XP.
  • Under Windows NT 4, the context menu text and icons for TSVN sometimes disappear. This can happen anywhere in explorer.

You can also get problems with invisible TortoiseSVN menus in other applications. Check our FAQ article on Blank TortoiseSVN Menus for further details.


Versions of server and client, compatibilty issues

There's a link on our download page describing exactly that: CompatibilityCheck
Subversion has a description for that too. See the "compatibility" section in the Hacking file.


When I try to install a new version, it tells me the old version cannot be removed

You have two options:

  1. Download the installer for the version you've already installed. You can find the link to the archive of older TSVN version on our download-page. Doubleclick on the msi file and choose repair. After that, you can install the newer version without problems.
  2. Try here: http://windowsxp.mvps.org/MSICLEAN.htm
    This tool will clean up a corrupted installation. Then after that, you must delete the folder where TSVN was installed (usually c:\program files\TortoiseSVN). If you can't remove it because some files are still in use, get ClearInstall.exe from our website and run it. It will remove all registry keys TSVN needs to register itself in the shell. After a reboot you will then be able to delete the TSVN folder.

Windows installer service too old to install 1.3.0

When opening the TortoiseSVN .msi file, you might see an error window appearing with the text:
"This installation package cannot be installed by the Windows Installer service. You must install a Windows service pack that contains a newer version of the Windows Installer service."

TortoiseSVN now uses MFC/CRT version 8, which requires at least version 3.0 of MSI.

If you cannot or do not wish to install a Windows service pack, you can get the Windows Installer as a separate package.

More information:
http://support.microsoft.com/kb/893803/

Download:
http://www.microsoft.com/downloads/details.aspx?...


Converting from xxx to SVN (with history)

There are many conversion tools which help you to convert from other VCS to SubVersion. Converters for CVS, SourceSafe, Perforce and VCP are listed in the section Repository converters on the Subversion Links Page.


Converting from CVS to SVN (without history)

  • Use cvs export instead of checkout as indicated in subversion's FAQ. So you wont get CVS subdirectories
  • Before starting, add CVS and .cvsignore to the global subversion ignore list
  • Check for auto-props in the subversion config file. If you set the svn:eol-style to "native" and svn:keywords to "Id" for your source files then you might save a lot of manual work later.
  • Then create the initial folder structure in svn (trunk/branches/tags).
  • Check out the new trunk from the svn repository to an empty directory.

This way you have a working copy, which makes the next steps easier.

  • Get the project files from CVS into this SVN working copy. If you checkout from cvs, you can use this working copy as a shared working copy to transfer future changes from cvs to svn. If you use cvs export, then you only convert the current cvs "snapshot" to svn.
  • You should verify that all text files your project are using 8 bit character sets like ASCII, Latin, ANSI or UTF-8. Subversion can not handle UTF-16 files as text files. You can store them in the svn repository, but only as binary files (that means no CRLF conversion, no keyword expansion, no textual diff).
  • Now ADD (not import) the project to svn.
  • A nice idea is to create a tiny script that recurses through the project folders (after it has been added to the SVN repository) and does something like svn propset svn:ignore -F .cvsignore . . See the attached script which does just that :-)
@echo off

echo This program imports all .cvsignore contents into the svn:ignore property.
echo.
echo Current directory: "%cd%"
echo.

pause

echo.
echo Searching ...
call :CheckCVS "%cd%"
for /D /R %%i in (*) do call :CheckCVS "%%i"
echo Done

:: Ende
goto :eof

:CheckCVS
	set _cvs=%~1\.cvsignore
	echo Path "%~1"
	if exist "%_cvs%" (
	   echo setting "%_cvs%"
	   svn propset svn:ignore -F "%_cvs%" "%~1"
	)
	set _cvs=
goto :eof

This converts the CVS ignore list to the correct subversion ignore properties.

  • now do n svn commit!

Overlay icons

TortoiseSVN uses up to seven overlay slots for the status:

icon overlay for normal status
A fresh checked out working copy has a green checkmark as overlay. That means the Subversion status is Normal.
icon overlay for modified status
As soon as you start editing a file, the status changes to Modified and the icon overlay then changes to a red exclamation mark. That way you can easily see which files were changed since you last updated your working copy and need to be committed.
icon overlay for conflicted status
If during an update a conflict occurs then the icon changes to a yellow exclamation mark.
icon overlay for readonly status
If you have set the svn:needs-lock property on a file, Subversion makes that file ReadOnly until you get a lock on that file. Read-only files have this overlay to indicate that you have to get a lock first before you can edit that file.
icon overlay for locked status
If you hold a lock on a file, and the Subversion status is normal, this icon overlay reminds you that you should release the lock if you are not using it to allow others to commit their changes to the file.
icon overlay for deleted status
This icon shows you that some files or folders inside the current folder have been scheduled to be deleted from version control or a file under version control is missing in a folder.
icon overlay for added status
The plus sign tells you that a file or folder has been scheduled to be added to version control.

Unlike TortoiseCVS (the CVS shell integration) no overlay icon for unversioned files is shown. We do this because the number of icon overlays are limited system wide and should be used economically.

In some situations the overlay icons may not appear. This can happen on older Windows version (before Win2K) or if other applications install overlay handlers as well, since overlay icons are a limited ressource in Windows.


Why don't the icon overlays appear?

  • You rebooted your PC of course?
    If you haven't please do so now. TortoiseSVN is a windows Explorer Shell extension and will be loaded together with Explorer.
  • Did you install TortoiseSVN as a different user under WinNT/Win2K/WinXP than you are using now?
  • Go to the settings of TSVN and activate the icon overlays for at least the fixed drives. The installer does this automatically for the current user (can't do it for other users...) but since you are using TSVN as a different user than you installed it you need to set this manually.
  • Did you install TortoiseSVN on an older Windows (Win95/98/SE WinNT)?
    Then follow these instructions: Icons do not appear in older Windows versions
  • If some of the overlay icons do not show up, look here: The overlay icons appear, but not all of them!

The overlay icons appear, but not all of them!

You may find that not all of these icons are used on your system. This is because the number of overlays allowed by Windows is limited to 15. Windows uses 4 of those, and the remaining 11 can be used by other applications. If you are also using TortoiseCVS, then there are not enough overlay slots available, so TortoiseSVN tries to be a "Good Citizen (TM)"? and limits its use of overlays to give other apps a chance.

  • Normal, Modified and Conflicted are always loaded and visible.
  • Deleted is loaded if possible, but falls back to Modified if there are not enough slots.
  • ReadOnly is loaded if possible, but falls back to Normal if there are not enough slots.
  • Locked is only loaded if there are less than 13 overlays already loaded. It falls back to Normal if there are not enough slots.
  • Added is only loaded if there are less than 14 overlays already loaded. It falls back to Modified if there are not enough slots.

If you like to see all of the TortoiseSVN icons, you have to manually remove one of the other icon overlay handlers. This can be done by editing the registry. Use at your own risk!
You can to delete one of TortoiseCVSes entries at: HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ShellIconOverlayIdentifiers


The icons are only visible on local drives

Go to the Settings -> Look and Feel -> Icon Overlays and check the drive types for which you want to see overlay icons. Be aware that enabling overlays for network drives will slow down not only TortoiseSVN but the whole system.


Extra green Checkmarks on non versioned files

After upgrading the client from Subversion/TortoiseSVN 1.3.x to 1.4.x some unversioned files display green checkmarks instead of no overlay icon at all.

It looks like something is left behind during the upgrade which confuses the TortoiseSVN status cache.

The standard procedure to resolve this problem is to close all explorer windows that display the working copy in question and to kill the TSVNCache process. When the explorer window is opened again, the TortoiseSVN status cache wil rebuild its internal data structures.


Icon overlay on SUBST drives

If your working copy is on a SUBST drive the icons might be mixed up.

The problem arises because the cache tries to fetch the status for two "different" locations at the same time, but those locations are actually the same so there are two status fetchings for the same working copy at the same time.

There is an easy way to solve this:
just exclude the original path from showing overlays (settings->icon overlays->exclude paths).

For example, if you have mapped \\station\folder\wc to g:
then put "\\station\folder\wc*" as the exclude pattern.

(Solution first found by Stefan)


Icons do not appear in older Windows versions

NOTE: This FAQ entry applies to TSVN 1.1.7 and earlier. From V1.2.0 these older operating systems are no longer supported.

If you are using Windows 95 the icon overlays won't appear. You can try the instructions for Windows NT4 below if you like, but it may still not work. Please note: We don't support Windows 95 at all - so there may be other issues if you're using that OS

If you are using Windows NT4, you need to install the IE4 shell or desktop extensions to get a more recent version of Explorer. To do this install IE4, and choose Yes to install the active desktop. Don't worry, you can turn off the actual active desktop later by right clicking on it. It's the new version of Explorer that we are after.

If you've already installed IE5, you must either:

  1. Uninstall IE5 and then install IE4 with desktop extensions, and then install IE5 again. What a palaver.
  2. Run IE5 setup with command line switches to install the IE4 desktop (shell) extensions. The command must be run from the folder that contains the ie5setup.exe file. If the browser appears unstable afterwards just run the IE5 repair function.
    For Win95: ie5setup.exe /c:"ie5wzd /e:IE4Shell WIN /I:Y"
    For WinNT: ie5setup.exe /c:"ie5wzd /e:IE4Shell NTx86 /I:Y"

For IE6: Run IE6 setup with command line switches to install the IE4 desktop (shell) extensions. The same caveats apply as for IE5. The command must be run from the folder that contains the ie6setup.exe file.
For WinNT: ie6setup.exe /c:"ie6wzd /e:IE4Shell NTx86 /I:Y"

The shortcut labelled Win NT Explorer on your start menu probably points to C:\\WINNT\\explorer.scf and doesn't get the overlays. Create a new shortcut to %windir%\\Explorer.exe /n, /e and it may get the overlays.

If you're using an IntelliPoint mouse driver, and launching Explorer via a mouse click, you need to upgrade from version 3 to version 3.2 or higher of IntelliPoint. Strangely, launching Explorer from the Start menu gives icons in this case, but not when launched from the mouse.


Optimize performance

If you're working with big projects, you might encounter some performance problems when using TortoiseSVN. Here are some tips to optimize the settings:

  • Don't put your working copies on a network share but keep them on your local harddrive.
    There are several problems with working copies on network shares. First, a network share is much slower than your local harddrive. Which means whenever TortoiseSVN has to fetch the status of your working copy (e.g. for a commit, update, or simply to show the overlay icons) it will take a lot longer and use a lot of bandwidth.
    If you can't put the working copy on your local harddrive, at least disable the overlay icons for network shares.
  • Reduce the size of your working copies
    If you have any branches of your projects checked out which you don't really need anymore, consider removing them. Because even if you don't work with them, the status cache still has to monitor them for changes and must crawl them to show the overlays.
  • Tell TortoiseSVN where your working copies are
    In the settings dialog, Icon Overlays page, you can specify which paths TortoiseSVN should monitor for working copies. If you don't specify them there, then TortoiseSVN must monitor all your mounted drives completely, which can slow down your system too.
    An example: if you have your working copies located in C:\projects, put the path "C:\projects\*" in the "Include paths:" box, and "C:\*" in the exlude box. That will exclude the whole drive C:\, but include all subdirs of C:\projects.
  • Show overlays only in explorer
    Many programs use the "file open" or "file save" dialogs of the shell. Whenever they do that, the shell extension of TortoiseSVN is automatically loaded too, which isn't necessary if you don't really need the icon overlays in those dialogs.
    If you don't need the overlays or the context menu of TortoiseSVN in those application dialogs, you can check the box "Show overlays only in explorer" in the settings dialog, Icon Overlays page.

Overlays not working on Windows 2003 Terminal Server

Problem:
If several users are connected to a Windows 2003 Terminal Server, some of them do not see the overlay icons.

Solution:
As long as the users have certain rights on the server (i.e. the right to establish local pipe connections to apps running in another user context) it will work. If the users don't have those rights, then only the first user will see the overlays, all others won't. That's because there's only one single instance of the TSVNCache process which all users access - if they don't have the right to access it then they don't have the overlays.

Or:
Open ToroiseSVN settings, navigate to "Look and Feel -> Icon Overlays", and under "Status Cache" select "Shell".


The overlays show the wrong status

Sometimes you find that the overlays don't reflect the real status of files and/or folders. Usually, hitting the F5 key is enough to make the overlays appear correctly (you might have to wait a few seconds until the cache has fetched the status again).

The treeview on the left side of the explorer is a whole other story. It won't update the overlays, no matter how many times you hit the F5 key. That's a problem with the explorer and outside of TortoiseSVN's reach.

A short explanation:
The treeview always shows the whole explorer tree, including network drives and other namespace extensions. Since these can be very slow (e.g. slow network drives), the explorer tree doesn't ask the overlay extensions for updated overlays all the time. Even if you tell the explorer that a folder has changed and it should update the overlays accordingly, it doesn't do so. It first checks itself if the folder really has changed and only updates the overlays if it thinks the folder really has changed.
Now, since the Subversion status of a folder has nothing to do with the folder itself, the folder itself never really changes (only some file inside the .svn folder, but not the folder itself), explorer therefore doesn't update the overlays.

There are some tricks and workarounds to make the explorer refresh the overlays even on the left treeview, but those are tricks and workarounds, which obviously don't work all the time.

There's one trick that usually works, but it is slow and TortoiseSVN can't use that trick on-the-fly - it just would slow down the system too much. But you can trigger that trick manually by executing the 'cleanup' command on the root of your working copy. After the cleanup command has finished, you have to wait a few seconds for the treeview to update the overlay icons.


Why do the overlay icons sometimes change to random graphics?

The Windows icon cache is a fairly buggy creature. You can solve this in one of the following ways:

  • Install Microsoft's TweakUI and run the option to rebuild icons.
  • Or increase the icon cache size. Go to HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer and add a new String Value called Max Cached Icons. The default value is 500 - try increasing it to 2048 (see Q132668 in the Microsoft knowledge base for more details).
  • Or delete the file called ShellIconCache in your Windows directory. And reboot.
  • With TortoiseSVN 1.3.0 and later, you can also rebuild the icon cache by calling TortoiseProc from the command line like this TortoiseProc.exe /command:rebuildiconcache

Authentication

Authentication covers the mechanisms that Subversion and TortoiseSVN use to identify users. Using your windows user name or domain server for authentication is possible although not all combinations work.

For general information, visit the TortoiseSVN docs and the Subversion book.


All commits have the same username. How do I setup the author?

If all the commits from different people to the repository have the same username 'anonymous', you have to set up authentication on your subversion server. See our docs: Chapter Setting Up A Server


Can TortoiseSVN use my Windows login name and password?

If you have set up the server to authenticate against a windows domain, then yes. But you still have to enter username/password yourself.

See our docs on how to set up such a server:
Authentication With A Windows Domain


I lost my SVN password. How can I retrieve it?

There's no way to recover your password if you forgot it, if you are using basic authentication.
Change the password on the server/repository. If you don't have access to the server, you have to ask the administrator to do it for you.


Windows authentication, repository on a Linux server

There are at least two ways to make a Subversion server running on Linux perform authentication through a Windows domain. Either use PAM (Pluggable Authentication Modules) or one of the various authentication modules for Apache. PAM authentication also works for Apache, and is thus a more general solution.

If you wish to use the Apache-only solution, you will need to find an appropriate authentication module. This could for example be:

  • mod_auth_kerb for authenticating against Windows 2000, XP and 2003 domains
  • mod_auth_nt_lm for authenticating against Windows NT4 domains
  • mod_auth_samba or mod_auth_smb for authenticating using older versions of Samba

Note that of the above, only mod_auth_kerb seems to be actively maintained.

Unless you feel that it is too complicated to setup, or that the particular authentication module you are looking for only exists for Apache, you will probably want to use PAM.

In order to use the PAM solution, you will first need to:

  • Install Samba version 3 (or later)
  • Configure Samba's winbind
  • Adjust your system's PAM configuration through /etc/pam.d to allow winbind authentication for the services you wish to use

When you have set up the above appropriately, tunneled svnserve connections (svn+ssh://, svn+rsh:// and similar) should work out-of-the-box, since the ssh daemon and similar tools already per default uses PAM to authenticate users.

To get Apache to work with PAM, make sure that mod_auth_pam is installed and then configure Apache as appropriate.

And of course: This is actually a server question which has little to do with the TortoiseSVN client, and thus further information should be sought on the Subversion FAQ or the Subversion mailing list.


Windows authentication, repository on a Windows server

If you wish to make a Subversion server running on Windows perform authentication through your Windows domain, the most widely used option is to use Apache and the mod_auth_sspi which is now hosted and maintained on SourceForge. Configuration using this module is covered extensively in the TortoiseSVN documentation.

If you wish to use the svnserve-based solution, you're on your own. It should be possible, provided that you can find a Windows SSH server that will:

  1. authenticate users against your Windows domain, and
  2. properly launch svnserve in tunnel mode

More information about setting up a SSH server for Subversion can be found in the Subversion book.

If you find yourself successful in setting up a svn+ssh server on Windows that authenticate through your Windows domain, feel free to brag about it on our mailing list.


Daily Use

This section deals with daily use issues


100% CPU, when I right-click on a file

Everytime I right click on a file, the CPU goes to 100% (whilst the right click menu is displayed.) If I select something from the menu, CPU goes back to normal. If I right click on 'nothing' then the CPU is OK. What is happening?

XP contains a known bug that causes the CPU usage to spike to 100 percent when you access the context menu under certain configurations. This bug causes file-copy operations to halt, network connections to slow, and streaming media (e.g., audio, video) to become distorted. To work around this bug, you need to disable the GUI's transition effects by performing the following steps:

  1. Start the Control Panel Display applet.
  2. Select the Appearance tab.
  3. Click Effects, then clear the "Use the following transition effect for menus and tooltips" check box.
  4. Click OK to close all dialog boxes.

Another solution that often works is to left-click the file or folder before right-clicking to display the context menu.


After I resolve a conflict, the overlay shows 'unmodified'

If you have resolved the conflict by using all parts from theirs, then you don't have to commit anything because your file now looks exactly the same as the one in the repository. That's why it has the green overlay.


Can I create a repository on a network directory?

Do not create a Berkeley DB repository on a network share!

It cannot exist on a remote filesystem such as NFS, AFS, or Windows SMB. Berkeley DB requires that the underlying filesystem implement strict POSIX locking semantics, and more importantly, the ability to map files directly into process memory. Almost no network filesystems provide these features. If you attempt to use Berkeley DB on a network share, the results are unpredictable. You may see mysterious errors right away, or it may be months before you discover that your repository database is subtly corrupted.

If you need multiple computers to access the repository, you can create an FSFS repository on the network share, not a Berkeley DB repository. In practice this is not recommended for three very good reasons:

  1. You are giving direct write access to all users, so they could accidentally
    delete or corrupt the repository file system.
  2. Not all network file sharing protocols support the locking that Subversion requires.
    One day you will find your repository has been subtly corrupted.
  3. You have to set the access permissions in just the right way.
    SAMBA is particularly difficult in this respect.

A better solution by far is to set up a real server process (such as Apache or svnserve), store the repository on a local filesystem which the server can access, and make the repository server available over a network. It is easier than you might think. Chapter 6, Server Configuration in the Subversion Book covers this process in detail.

To access an FSFS repository on a network share you need to do one of the following:

  1. Use drive mapping using the syntax below:
    Map //server/shared to S:
    file:///S:/repos (3 leading slashes before drive letter)
  2. Specify a UNC path directly using the syntax below:
    Subversion >= 1.2
    file://server/shared/repos (2 leading slashes)
    Subversion < 1.2 (strange syntax, we know)
    file://///server/shared/repos (5 leading slashes)
    file:///\server/shared/repos (3 slashes + backslash)

Can I define my own keyboard shortcuts to specific commands?

Sorry, No.


Can I get a list of all the repositories on my Server?

With TortoiseSVN and the command line Client: No.
With a web browser: Yes

A lot of people would agree that the TSVN repository browser would be a much more useful tool if you could just point it at your versioning server and it would show you whatever available repositories it had.

Same story, albeit to a lesser degree, with the command-line 'svn' client. Doing a 'svn ls' or equivalent and being able to see what repositories and projects are hosted on a specific versioning system would be very useful.

Unfortunately, this is a limitation in the Subversion libraries that both the command-line client and TortoiseSVN uses. It does not have the capability to arbitrarily enumerate repositories on a server.

Some might even argue that the lack of this feature is incitament for end users to just jumble everything into one big repository, when it would be more appropriate to split things up.

In any case, you should take this request to the main Subversion mailing list, as it does not fall under TSVN.

Send any requests regarding this (and only this!) to dev@subversion.tigris.org. Remember to ask to be CC'd if you expect replies to your request.


Can I use different Subversion clients with the same working copy?

Yes, you can change from one client to another whenever you want. The clients just control your working copy and the interaction between your working copy and the repository. The metadata inside the working copies used by the different clients is identical.

As of Subversion 1.4, the metadata format inside the working copy has changed. This means for you that once you accessed your working copy with a Subversion client based on Subversion 1.4 and higher, you can not use it again with an older client. You will get an error message telling you that the client is too old.


Can I work on lots of working copies from different repositories at once?

Yes, you can. This is a standard feature of Subversion. Each directory which was checked out of Subversion remembers where it came from. You can even multiply select working copies which came from different places, and update or commit them all at once.

If you want to have different subdirectories to come from different repositories you can set a special Subversion property called svn:externals.

Please look at the chapter External Definitions in the Subversion Book.


Can TortoiseSVN convert line breaks in text files on the fly?

Check the subversion book about the svn:eol-style property here.
If you set that property to e.g. 'native', then the file will have LF line-endings on Linux, but CRLF line-endings on Windows.
To see how you can set those properties with TortoiseSVN, read our docs here.


How Can I ...

Since there are so many entries in the Daily Use Guide that deal with "How Do I" style of questions, all these are now summed up in this section.


... add keyword information like author, revision, date and commit-time to my files?

Read about the Subversion property svn:keywords in the Subversion book.

With TortoiseSVN, set the properties as described here.


... change the case of a filename

Subversion is designed to work with case-sensitive file systems such as are used on Linux. When it comes to the Windows case-insensitive file system, things do not always run as you might expect. A case in point is renaming a file where only the case changes, eg. renaming Makefile to MAKEFILE. You cannot do this easily within your working copy as Subversion requires both names to exist simultaneously for a short time, and Windows cannot support this.

By far the easiest way is to rename directly using the repository browser:

  1. Commit the changes in your working copy.
  2. Rename the file from UPPERcase to upperCASE directly in the repository using the repository browser.
  3. Update your working copy.

... change the log message or author after committing?

Yes. Call up the log dialog and do a Right-Click on the revision you want to edit. Then select "change author" or "change log message" from the context menu.
To make the server accept these changes, a pre-revprop-change hook, that allows to change author or message, has to be installed for the repository. The default installation rejects changes to author and log message.


... checkout a few directories from a large project and still get atomic commits?

Sometimes you want to checkout a working copy from a large project, but you are only interested in a few of the sub-folders. This method requires SVN/TSVN 1.4.0 or later.

This method uses a tiny local repository to define external references which pull in the sub-folders you are interested in.

  1. Create a local repository
  2. In that repository create a new folder to represent your working environment.
  3. Create a working folder and checkout the newly created folder from your local repository.
  4. Add an svn:externals property to the working folder which references the elements of the real project that you are interested in.
  5. Commit the property and update.

The external references will pull in the folders you want, and you can commit atomically from the top level folder. Note that svn:externals does not support file references, so you can only reference whole folders.

When Subversion 1.5.0 is released, support for partial checkout and update will be greatly improved.


... clear the drop-down lists in TortoiseSVN?

As of Version 1.4.0 and higher, you can clear all the stored data from the settings dialog of TortoiseSVN. Just click on the corresponding button.

For older Versions of TortoiseSVN, you have to delete the registry keys manually:
Delete the registry keys:

  • Commit dialog per-repository comment history
    HKCU\Software\TortoiseSVN\History\commit*
  • Repo browser per-repository URL history
    HKCU\Software\TortoiseSVN\History\repoURLS
  • Repo browser general URL history
    HKCU\Software\TortoiseSVN\TortoiseProc\repoURLS
  • Commit dialog comment history (older TSVN versions)
    HKCU\Software\TortoiseSVN\TortoiseProc\commit

... completely remove a repository from my computer?

Aehemm: select the folder and hit 'delete' (the key on your keyboard may be labelled only 'del').

Seriously, there are no hidden files or settings. The repository is completely contained in one folder tree.

The same applies to working copies. If you send a working copy to the recycle bin it can seriously slow down future deletes because of the large number of small files. You may want to empty the recycle bin soon after.


... define ignored files and activate keywords globally for all users?

The best way to define ignore files and keywords for all users of a repository is to add them to the folder properties. However, unless you know which folder level will be checked out, you have to set these properties recursively throughout your repository hierarchy, and remember to add them to new folders. Proper inherited properties is a future design goal for Subversion, but is not available yet.

However, you can define global settings for all subversion clients and all users on one PC. Read the section Configuration and the Windows Registry in the Subversion Book.

Registry-based configuration options are parsed before their file-based counterparts, so are overridden by values found in the configuration files. In other words, configuration priority is granted in the following order on a Windows system:

  1. Command-line options
  2. The per-user INI files (Accessed using the Edit button in TSVN settings)
  3. The per-user Registry values (HKCU, used by TSVN settings)
  4. The system-wide INI files
  5. The system-wide Registry values (HKLM)

Option 1 takes precedence over option 5. Here's an example. If you want to set the ignore pattern globally, setting: [HKEY_LOCAL_MACHINE\\Software\\Tigris.org\\Subversion\\Config\\miscellany]
"global-ignores"="*.o *.lo *.la .*~ *.swp *.bak *.exe *.dll *.~?? *.[Tt]mp"
will work. But always keep in mind:

  • not all users have the rights to read HKLM keys
  • The settings in HKLM are overwritten by the same settings in HKCU and of course the two Subversion config files.

The global config file can normally be found at:
C:\\Documents and Settings\\All Users\\Application Data\\Subversion
The user config file can normally be found at:
C:\\Documents and Settings\\{user name}\\Application Data\\Subversion
The directory names can vary according to your system's country settings.


... diff a file or directory in trunk against a branched version?

From repository browser select the BRANCH you wish to compare, then (using the CTRL+MOUSE_LEFT) select the TRUNK, now MOUSE_RIGHT on one of the selected entries and select "show differences as unified diff".


... diff a working file with an old revision?

It's all covered in the manual! So open the help file and search for "Diff". But since you're already reading this, heres an example of one possible use case.

  • Show the log for your working copy (the file)
  • Select the revision you want to diff your file to in the log dialog
  • Choose Compare with working copy from the context menu

... diff two MS Word documents?

TortoiseSVN installs scripts which allow you to diff / merge Word documents. They are already pre-configured in the advanced diff / merge settings of TortoiseSVN


... export the log out to a text file?

Use the log dialog. Select all the entries you want and press Ctrl-C. Then use Ctrl-V (or paste) in your favourite text editor.

If you want to process the log messages automatically or you need them in xml format, you can use the command line client for that.


... get the project revision number into my project?

If you want the revision number in your program version number, you need an additional tool to do that. You can find the tool SubWCRev.exe on the download page on our website or in your TortoiseSVN Folder under bin.

This tool traverses your whole working copy for the most recent revision. Once that revision is found, it replaces all occurrences of the following strings:

$WCREV$
This string will be replaced by the revision number of your working copy.
WCMODS?Modified:Not modified$
If you have local modifications, the string between question mark and colon will be inserted. If you have no local modifications, the string between colon and dollar sign will be inserted. In our example above Modified or Not modified.
$WCDATE$
Will be replaced by the date of the highest revision in your working copy.

As an example, have a look at the file version.in in the TortoiseSVN source tree.
This file is used in TortoiseSVN and its resource files. The SubWCRev.exe tool is called from the build script like this:

SubWCRev.exe path\\to\\working\\copy version.in version.h

This creates a new file version.h with all the strings above replaced with the values of the working copy. The version.h file is then used in the project itself and included in the resource files for the version information.


... hide (cloak) directories I'm not interested in from my working copy?

If you get annoyed that your working copy includes a bazillion megabytes of uninteresting stuff, here's a way to suppress it:

  1. create an empty folder in the repository
  2. switch all the folders in your working copy in which you're not interested to the URL of the empty folder
  3. now those switched folders are empty, and will stay empty even when you update your working copy

If you want to get those folders back, just switch them back to the original URL.


... list all changed files in my working copy?

Use the Check for Modifications dialog, which checks all files in your working copy and gives a flat (non-hierarchical) view. By default it does not show unmodified and unversioned files, but you can use the checkboxes to turn those on. You can also sort by status instead of filename.


... migrate an existing SVN repository from Berkeley DB to FSFS

You can use the svnadmin command which comes with the Subversion package for that.

  • First you have to run svnadmin dump path/to/repository &gt; dumpfile
  • Then delete the repository you've got, create a new one in the FSFS format svnadmin create path/to/repository --fs-type FSFS
  • Next, load the dumpfile back into the new repository svnadmin load path/to/repository &lt; dumpfile

Detailed instructions can be found in the Subversion book.


... prevent Subversion from doing automatic merges

Some people don't like the fact that Subversion merges changes from others with their own local working copy changes automatically on update. Here's how to force those files into a conflicted state so you can merge manually at your convenience.

  1. In TortoiseSVN->Settings->Subversion configuration file, click on the edit button.
  2. Change the [helpers] section by adding
    diff-cmd = "C:\\false.bat"
    diff3-cmd = "C:\\false.bat"
    (note the double backslash)
  3. Create the file C:\false.bat which contains two lines
    @type %9
    @exit 1

This effectively makes auto-merge fail every time, forcing the file into conflict.

The reason for the curious 'type %9' line is that the diff3-cmd sends the merged output to stdout. Subversion then takes this and overwrites your local file with the merge results. Adding this line avoids getting an empty local file.

Thanks to Gabriel Vey for this tip.


... see what my current sandbox is?

Right-click on the folder in your working copy, choose "Properties" from the explorer context menu. Then, in the properties dialog, switch to the "Subversion" tab. There you can see all sorts of information about the selected folder, including to what URL it points to.

Another quick way of seeing this information is to select "Relocate" from the context menu and look at the first URL. Since you don't want to relocate your WC, just abort this dialog.


... select files and folders to import

With the Import command you can't. The import command can only import a single item, and that is usually a folder, imported recursively. But there is a workaround:

  1. Create a new folder in the repository for your import, using repo-browser.
  2. Checkout the new folder over the top of the folder you want to import. You will get a warning that the local folder is not empty. Now you have a versioned top level folder with no versioned content.
  3. Use the Add command to select the bits you want to add.
  4. Add items to the ignore list as required.
  5. Commit the top level folder.

... tag a particular revision using TortoiseSVN?

The best way to create a tag for a specific revision is to first pop up the Log Dialog for the file / folder / working copy. Then right-click on the revision you want to tag and select Create Tag from Revision.


How do I find out what the conflict is when it is in a directory's property list?

Inside the folder with the conflicting properties, you'll find a file called dir_conflicts.prej. Open that file in a text editor and you will see the conflicting properties. Choose the one you want to keep and overwrite the conflicting property with that one.


How does TortoiseSVN handle conflicts?

Imagine you check out revision 24 of a file and started editing it. In the meantime, someone else committed revision 25, and shortly after that revision 26. You tell TortoiseSVN to update your file now, and Subversion will try to incorporate all the changes between revision 24 and 26 into your local file.

But if the changes made between 24 and 26 were too close to or even overlap with the changes you have made, Subversion detects a conflict and creates conflict markers in the file. You then have to resolve these conflicts yourself. Read the section about conflicts in the
Daily Use Guide to find out more.


I accidentally removed a file. How do I get it back?

If you haven't committed your changes yet, you can do a revert on the parent folder where you deleted the file or directory.

If you have already committed the deleted file, then you can use the repository browser, change to the revision where the file still existed and then use the command Copy to... from the context menu. Enter the path to your working copy as the target and the deleted file will be copied from the repository to your working copy.

You can also restore a deleted directory using this technique.

If, after the file / folder has been restored using this trick, the log dialog doesn't show you the history of that file, don't worry. The history is still there.

If you copy a file in SVN you copy its history too. But the default setting in TSVN's ShowLog is to 'Stop on copy', which means that when you look at the history, it only goes back to the branch point. The reason for this is that when you are looking at a real branch of a project, mostly you only want to see the history of that branch. To see the whole history in ShowLog you need to unselect the 'Stop on copy' checkbox and click on 'Get All'.


I always get an error when I check out or export a single file

There's nothing wrong with it. Subversion only allows you to check out directories - not files.
It is however possible to export a single file. Well, at least Subversion allows it. In TortoiseSVN the export dialog doesn't allow exporting single files. But there are other ways to get a single file from a repository:

  • From the log dialog, right-click on the file, then choose "Save as..."
  • From the repository browser, right-click on the file, then choose "Save as..."

Note: exporting a single file from a working copy can be easily done by right-dragging the file and then choose "SVN Export to here" from the context menu.


I deleted a file and created a file with the same name. Why can't I commit?

Your're trying to fool subversion aren't you? No - seriously - what did you expect to happen?

Assume you're in revision #55.

You removed a file using TortoiseSVN, which told it to mark the file for deletion with the next commit and to remove it from the explorer. It's not really gone from the revision yet. Then you created a file with the same name and added it to TortoiseSVN, which marks the file for adding with the next commit. It's not yet added to the repository. Now you commit. Poor subversion tries to decide whether to add or remove your file at the same time in revision #56. The commit fails.

You should have committed immediately after you deleted the file using TortoiseSVN's remove command. You still have no clue what to do? Well, in that case:

  1. Move that file to a safe place
  2. Commit your changes. That tells the repository that the file is gone in the first place
  3. Copy the file back
  4. Commit again

I don't have a 'Subversion' tab for setting properties

Possible reasons:

  • TortoiseSVN is not properly installed
  • You didn't restart your computer after installing TortoiseSVN
  • The file/folder you show the properties for is not under version control
  • The file/folder is not readable by TortoiseSVN

I get multiple TortoiseSVN context menu entries when I right click on a link!

This is by design. One entry is for the link itself (the .lnk-file), the other for the target the link points to.

This way a link can both be versioned and in the same time work as a link should by allowing operations on its target.

In fact, you can have up to three entries in the file menu (the context menu will show only two).

Update for TortoiseSVN 1.5.0
TortoiseSVN 1.5.0 will only show multiple entries if the target of the link is in a working copy.


I have changed the configuration file to match my proxy/etc. setup, why doesn't it work?

Use the TSVN settings dialog to set your proxy server and more. If you edit the configuration manually, notice that the '#' char in the config file means that the rest of the line is a comment. Comments are ignored. If you make changes to the provided examples that you wish to have effect, you must first remove the '#' mark in front of the affected lines.


If my connection drops during a checkout, do I have to start again?

If for some reason a checkout fails somewhere in the middle, e.g. because your internet connection failed, you don't have to do a fresh checkout of a probably large source tree again.

  • Do a Cleanup on your partly checked out working copy
  • Now use the Update command to finish the checkout

Is it possible to use 'Shared Files' like in VSS?

You can't share single files in Subversion, but you can share folders. Please look at the chapter External Definitions in the Subversion Book.


Is it possible to use TortoiseSVN without a server?

Yes, it is. You can use the file:// protocol to access your repository locally.


Is there a way to send username & password when using TortoiseProc?

TortoiseSVN is a GUI client, therefore it will ask you for username and password in case it's needed.

If you want to automate access to your repository without user interaction (i.e. without having to enter username and password if needed), use the command line client.


Merge 'From:' revision is out by one when I use Show Log

This behaviour is deliberate and not a bug. Here is an example:

8 Removed other
7 Added that
6 Fixed this
5 Created "my_branch" branch from rev 4 of trunk

Suppose you want to merge only revs 7 and 8 back into trunk. With a GUI client the intuitive thing to do is select those 2 revs and hit the merge button. If TSVN filled out the From/To fields as 7-8 you would actually only merge rev 8. That is why we do an automatic -1, and set the merge range to 6-8.

In fact the same thing happens in the ShowLog dialog when you "Revert changes from this revision". You select one revision and TSVN quietly does a merge of N:N-1 to undo the changes. In this case, the revision numbers are hidden internally, but it is exactly the same principle: you just select the revisions you want to revert/merge, which is the expected behaviour for a GUI client. TortoiseSVN is not just a wrapper for the command line client.

Usually this question comes up when someone wants to merge the whole branch back into trunk. In that case they often select 5-8 and then wonder why TSVN has used 4-8.

If you copied the branch from trunk directly in the repository, you only need to merge the changes you made on the branch. ie. select revisions 6-8 in the log dialog. However, it won't matter if you include the branch creation as well, because trunk@r4 is identical to branch@r5, so it makes no difference whether you include r5 or not.

If you created the branch by copying from a modified WC then (assuming you want to include those initial mods as well) you *must* include the branch creation so TSVN's use of r4 is correct. Using r5 would merge only the changes *after* branch creation.


Permission control for read and write operations

Access control is extensively covered in the : Subversion Book


Revision graph

The revision graph is a little bit special, it's not like the other features found in TortoiseSVN. It shows a graph of a file or folder through the history with all the revision where the file or folder was copied, moved, branched or tagged.

We often get people asking questions why it needs to get the log for the repository root, or why it needs to get the full log from the HEAD revision back down to the first revision.

Just to make this clear: this is not because we're lazy programmers or because we're too stupid to optimize it, even though some of you seem to imply that. It is really necessary.

The revision graph shows the history of a selected file or folder by finding all revisions where the selected item was copied. And the graph has to do that by using the information that is available.

If you look at the log messages for your selected file or folder, you can see in the lower pane of the log dialog all affected paths of the selected revision. That information is what we use for the revision graph.
You will also notice that if you just show the log for e.g. /trunk, you won't see any entries in the log dialog for revisions which happened in a tag or branch. You won't even see an entry where you tagged or branched /trunk itself in that log.
--> that's why we must fetch the log for the repository root: only the log of the repository root will give us all the information we need, including when and where a path has been copied/branched/tagged/moved to.

If we would only fetch the log for a specific range and not all revisions, we could miss the revision where (still using the example above with /trunk) the trunk was branched or tagged. And even though there are changes to those branches and tags or they still exist in the revision range, the graph could not know that those branches/tags were made from /trunk and not from some other path. That means, the graph would not just be incomplete, it would be wrong.

And no: we will never change that. Because there's nothing worse than a graph that's only sometimes correct - you would never know when and if it is correct, which means it would be worse than useless.


There's no 'author' shown in the logs when I commit changes via svn+ssh.

Since SSH completely takes care of the authentication process, Subversion won't even see the author who does the commit. So to tell Subversion an author you have to specify the author in the URL itself. E.g. svn+ssh://username@server.com.
You should do that when you check out your working copy.


TortoiseSVN does not recognize a file as modified!

If you have modified a file, but TortoiseSVN does not recognize that the file has been modified, please first check whether the file really differs from what you have in your working copy.

If you know for sure that the file has modifications and it still does not show up as modified in the commit dialog, make sure that

  • the file 'last modification' date has changed (some tools like hex editors like to reset that time)
  • if the svn:eol-style property is set and the changes are only to newlines, the file won't show up as modified because for Subversion it hasn't changed

Subversion determines whether a file has changed with the following approach:

  1. has the 'last modification' date and/or the file size changed?
  2. if not: file is not modified
  3. if yes: compare file content with the BASE file
  4. stop at the first byte that differs, mark the file as modified
  5. if no byte differs regarding to BASE, mark the file as not-modified

TortoiseSVN doesn't work with VS.NET web projects!

VS.NET when used with web / asp projects can't handle the .svn folders that Subversion uses to store its internal information. This is not a bug in Subversion. The bug is in Visual Studio and the frontpage extensions it uses. Even though you might argue that Windows can't handle such foldernames, it's not correct. Windows can handle such folders very well, you just can't create them with the explorer.
The error message you most likely will get in VS.NET2003 is "Refreshing the project failed. Unable to retrieve folder informatin from the server."

As of Version 1.3.0 of Subversion and TortoiseSVN, you can set the environment variable SVN_ASP_DOT_NET_HACK. If that variable is set, then Subversion will use _svn folders instead of .svn folders. You must restart your your shell for those env variable to take effect

However, this bug applies only when you use web projects, which is not the same as ASP.NET projects. Usually, when you want to create an ASP.NET project, you choose to create a web project. But you can create or convert an ASP.NET project as a class project. With some minor tweaking, you won't notice the difference, and you then can use TortoiseSVN and SVN with .svn folders without problems.

There is a really good blog post that helps you to convert your ASP.NET web projects to ASP.NET class project. You can find it here: http://www.pluralsight.com/fritz/Samples/aspdotnet_without_web_projects.htm

If you follow those instructions, you'll have a VS.NET working with ASP.NET projects and Subversion without troubles.

Alternatively, upgrade your copy of VS.NET. The bug has been fixed in VS.NET2005, so it no longer has this problem.


TortoiseSVN seems very slow on big directories

To show you the file and folder icon overlays TortoiseSVN must fetch the status each time you open such a folder in the explorer. This usually takes a fraction of a second, but can take much longer if you have either a slow hard disk or a very big directory.

Here are a few things to watch out for:

  • Network drives can be very slow to respond, so you may have to turn off icon overlays for such drives. However, the caching scheme usually makes it workable.
  • Whenever the last modified time of a file changed, TortoiseSVN needs to do a complete diff (!) of that file to find out if it has changed. If you often change a file, undo the changes and save the file again you'll encounter a slowdown in browsing. You can fix that condition by doing a Cleanup of your working copy folders.
  • There are several Virus scanners around that interfere with TortoiseSVN. Most of the time they lock files inside the .svn Status directory, which can cause TortoiseSVN to hang or to become very slow. Sometimes you might even get an Access Denied error.

    Try to configure your virus scanner so that it ignores .svn directories.

  • If you're working on Windows XP then you can also disable the zipfolders. This will also increase the browsing speed.

    1. Select Run from the start menu
    2. Type regsvr32 /u %windir%\\system32\\zipfldr.dll at the prompt and click ok
    3. The change will take effect immediately, but you may have to restart Windows for all traces of the built-in ZIP support to disappear.

    If, at any time, you wish to re-enable Windows XP's built-in ZIP support, just follow these steps:

    1. Select Run from the start menu
    2. Type regsvr32 %windir%\\system32\\zipfldr.dll at the prompt and click ok
    3. The change will take effect immediately, but you may have to restart Windows for all traces of the built-in ZIP support to be available.
  • Check your system for spyware, policy enforcement software, or local search engines (like Google desktop). Those can all interfere with normal use quite effectively.

When I remove a file it vanishes, how do I commit it?

Easy, you commit the whole directory!
Right-click in the Explorer window next to the file, and choose commit. The commit dialog will show you every modification as well as added or deleted files.


Where can I view/edit the list of ignored files for each directory?

Right-click on a folder, choose properties from the context menu, then switch to the Subversion tab in the properties dialog. The svn:ignore property contains a list of ignored files in that directory.

There's also a configuration in the settings dialog where you can set ignore patterns.

And last but not least, Subversion itself uses a config file for ignoring files.
You can edit the Subversion config file
(Settings->General->Subversion configuration file->Edit).

You will find a line in there:
[miscellany]
global-ignores = *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store

Subversion creates this config file when first used.


Why is SVN checkout so much slower than CVS?

From the Subversion developer list:
---SNIP---
Svn manipulates lots of small files in the .svn/ area. (It journals all of its actions, for example.) And NTFS is tremendously slow at this, compared to Linux filesystems. For operations that are working-copy intensive, windows seems to be about 2x slower in this regard. There's nothing we can do about it (other than redesign all of the working copy code in svn 2.0.)
---SNIP---

This means that some operations which make a lot of changes to the working copy seem slow. This mainly affects the initial checkout.

On the other hand many operations are much faster. Subversion stores a local copy of the unmodified file, which means that you can diff your local changes without contacting the server at all. You can also revert your changes and start again. And because it has both the new and old versions, subversion only needs to transmit the differences to update and commit, so these operations tend to be much faster over external networks.

Some workarounds for very large projects:
Checkout only a part of your project, not the entire tree.
Run update only on subtrees.
Search for Slow in this FAQ to look for other articles.


Feature Requests

This section contains some frequently requested new features. There are often good technical reasons why we cannot, or will not implement some of the features that are asked for. The entries here help to explain the reasoning.

If you have a feature request which isn't listed here, you can send it to our mailing list. We can then discuss your request and decide if it's a good or bad idea to implement it.


I need another overlay for 'locked by others'

There is no way to tell if a file has been locked by someone else, so I need a new overlay to show that.

Unfortunately, that's not possible. Locking information is held in the repository, so in order to refresh the page in explorer, we would have to contact the repository. That would make explorer impossibly slow. Servers often take several seconds to respond, sometimes minutes - do you really want explorer to hang while that takes place, every time you open a versioned folder?

A fundamental design feature of TortoiseSVN is that the repository is never contacted except when explicitly requested by one of the context menu items. Even with that restriction, it is still hard work maintaining a fast response.

If you use locking to prevent simultaneous editing, then you should consider using the svn:needs-lock property. Read the locking section in the manual to learn how to use this property. That way, files in your working copy will be read-only and have a grey overlay until you acquire a lock.

If you want to see which users have files locked in their working copies, use the Check for Modifications dialog and click on the Check repository button.


Renaming in explorer should work as 'svn rename'

When a version controlled file is renamed in Explorer, why can't you offer to rename in Subversion as well?

Firstly, we cannot access the explorer rename command as it is not part of the TortoiseSVN shell extension.

Secondly, even if we could find a way around that limitation, it would not be desirable. There are occasions when you want to rename only in explorer. Here are 2 examples:

  • You have made some changes to a file. You need to revert to a known working version so you can get a bugfix out, but you want to keep a copy of the changed file. The easiest way is simply to rename the changed file, then update your working copy, allowing Subversion to bring back the missing file for you.
  • You want to unversion a file, ie. delete it from Subversion, but keep the file. The easiest way is to follow these steps:
    1. Rename the file, eg. MyFile.cpp to MyFile.bak.cpp.
    2. Commit the parent folder, making sure the missing file (MyFile.cpp) is checked for deletion.
    3. Rename the file again (MyFile.bak.cpp to MyFile.cpp).

TortoiseSVN 1.5.0 will have the ability to 'repair' a move/rename which was done without using the Subversion commands. Repairing works by selecting two files where one is unversioned and the other missing, then choose "repair move" from the context menu.


Symbolic links should be supported

Tortoise SVN should make Unix symbolic links and MS-Window short-cut interoperable. At present, Unix links are converted into a text file.

Well, actually no. Windows Shortcuts are not symlinks, they aren't even close. Attempting to use one as a substitute for the other is a bad idea.

But doesn't Windows since Win2K support real posix-type links?

Again, no. Those links (which work on NTFS5 only, not FAT32) are not symbolic links but hard links. Those are completely different from symbolic links. Windows refers to them as reparse points. For example, the junction points for directories (which is what resembles the linux hardlinks the most) are created by using reparse points.

But I heard that Vista has real symbolic links.

Correct, Vista now has 'real' symlinks. But there are still some problems which will lead to incompatibilities anyway.

  • it only works on Vista
  • symlinks are limited to 31 per path (I don't think Linux has that limitation)
  • only admins are allowed to create symlinks - which means the whole
    feature is pretty much useless in svn since (I hope) that most users
    don't have admin rights anyway

But finally, and most important of all, any such handling of links would have to be handled outside of TSVN. It has to be done in the Subversion library, or even better in the apr library.


TortoiseMerge should have editing facilities

In version 1.5.0 and later, TortoiseMerge has editing implemented.


Known problems on Vista

Below is a list of known problems on Windows Vista. If you know of more issues specific to Vista, please let us know.

  • special columns don't show.

    The Windows explorer in Vista has changed quite a bit, and one of those changes was to abandon the additional columns but introduce a new "property system". Since the property system is file type based, we can't add a column for Subversion information anymore :(

  • The context menu may look wrong. That's because TortoiseSVN uses ownerdrawn menus. Since Vista changed the appearance of the context menu, it switches back to the 'old' look as soon as it detects an extension which uses ownerdrawn menus.

    This has been fixed on the TortoiseSVN trunk. You can use a nightly build if you like. Or, as a workaround, enable the checkbox "Enable accelerators on the top level menu" in the Look and Feel page in the settings dialog.

  • Exporting from a working copy only copies some empty folders.

    This bug is due to a change in the SHFileOperation API. Since the API doesn't work the same anymore on Vista as it did on Win2k or XP, we've already used another way for exporting. If you're affected by this, you can update to version 1.4.7 or you can try a nightly build.

  • UI rendering

    There are some problems when resizing the dialogs. After resizing, black areas and artifacts of borders and other controls can still show over other controls. Minimizing and restoring the dialogs will get rid of those and the dialogs will show correctly again.

    This has been fixed on trunk, you can use a nightly build if you like.

  • Version 1.4.2 has some problems with the explorer. Use version 1.4.3 which has this fixed.

  • very slow repository access.

    If every access to the repository is very slow and sometimes even times out, even though everything is working ok from an XP machine, then you most likely hit a special problem in Vista with the TCP-Autotuning feature. To get rid of these problems, open a command prompt and type netsh interface tcp set global autotuninglevel=disabled. You can read more about these problems here.

apart from these known issues, TortoiseSVN will work on Windows Vista.

Other Tools

There are programs out there that may (not) work properly together with TortoiseSVN. In this chapter we have collected information about tools that caused trouble and about possible workarounds.

Furthermore we explain how to configure TortoiseSVN to use external Diff or Merge tools instead of the builtin TortoiseMerge and suggest some programs that we have tested with TortoiseSVN.


Blank TortoiseSVN menus

Some applications don't display the TortoiseSVN menus properly. They can even be completely blank (no icons, no text)

This is because the icons are completely ownerdrawn. If you don't like the way TSVN handles its menu entries, you can do the following: Just create a (DWORD) registry entry under:
HKCU\\Software\\TortoiseSVN\\OwnerdrawnMenus and set it to 0. This will force TortoiseSVN to use the windows standard routine to draw menu entries. You'll have all the menu entries any time, but you will have ugly icons, since window's default only allows 10x10 icons. If you delete this registry key (the default) or set it to something else than 0 you have the nice icons back.
In case you want no icons at all you can set this value to 2. Then the context menu entries show up as text only.


Can I use TortoiseCVS and TortoiseSVN on the same computer?

Yes they can live happily together on the same PC. You can even use them on the same folder if that makes any sense to you. But, remember, that if you'll commit from this folder using one of the two, control files from the other system can be also accidently added to repository and versioned.

To avoid this problem for subversion you should run a script that does svn propset svn:ignore -F .cvsignore . in all project directories.

It can also happen that some of the overlay icons are not displayed. See also:
The overlay icons appear, but not all of them


Does a similar app also exist for Macs or Linux?

TortoiseSVN is only available on Windows, but there are similar applications available for Mac OS X and various Unices.

Here's a couple of examples.

  • Mac OS X finder plugin - SCPlugin
  • Unix graphical SVN client - eSVN
  • KDE-integrated SVN client - kdesvn

If you think we've left out a major or interesting piece of software from this list, feel free to drop us a note on the mailing list.

For a more complete listing of both CLI and GUI Subversion clients and plugins, please consult this page.


External Diff Tools

This list is by no means complete, but might help you to find something:

  • WinMerge
    a great open-source viewer
  • Perforce Win Diff
    a free tool from Perforce. You can download the full installer here.
  • Examdiff or Examdiff Pro
    an excellent Free or Shareware tool, The 3.2 version can handle unicode.
  • Beyond Compare
    an excellent Shareware tool, can handle Unicode
  • SciTE
    for showing unified diffs, it has built-in support for syntax-coloring, since it's not only a viewer but a Text Editor as well.


External Merge Tools

This list is by no means complete, but might help you to find something:

To set up the calling parameters for these external tools read the section External Program Settings of our Daily Use Guide.


PowerDesk 5

I have PowerDesk version 4.x or 5.x installed. Whenever I right click on a folder in PowerDesk or in Windows Explorer, the application crashes.

This is a bug in PowerDesk.

We would provide a direct link to the knowledge base article, but the PowerDesk website doesn't allow that!
So, to get the update for PowerDesk which fixes this problem, go to http://kb.avanquestusa.com and then search for the article named "PowerDesk crashes when right-clicking on some files and folders".


Removable drives cannot be unmounted

Sometimes when you try to unmount a removable drive, such as a USB pen drive, you get an error message saying that the device is still in use.

The problem here is that Windows only allows a short time after issuing the request to release handles, and TSVNCache.exe cannot always release all handles in time.

However, if you wait a few seconds and try unmounting again, it should work the second time.


Total Commander

TortoiseSVN is a native Windows Explorer Shell extension, so it's only available inside Windows Explorer. Other Commanders/Explorers available don't necessarily load the explorer shell extensions, and if they do we can't guarantee that they do that correctly.

However, as of version 6.5 you can show overlay icons in Total Commander. These How-To notes from Jochem Wendebaum may help you to get started.

  1. Enable right-click functionality
    Go to Configuration -> Options -> Operation and choose "Left mouse button (Windows standard)" in the "Mouse selection mode".
  2. Show overlay icons
    Go to Configuration -> Options -> Layout -> Display and enable "Show overlay icons, e.g. for links". In TortoiseSVN settings, go to the Look and Feel tab and uncheck the box labelled "Show overlays only in explorer".
  3. Show explorer SVN columns
    Install the free "ShellDetails"-Plugin available at
    http://www.ghisler.com/plugins.htm#filesys
    Important note: in order to use it, make sure you read the documentation at
    http://www.lefteous.de/tc/docs/shelldetails/readme.htm#fieldsearchdirs

You will need to restart Total Commander after making these changes.
Total Commander Homepage: http://www.ghisler.com/


TrueCrypt volumes cannot be unmounted

When trying to unmount a TrueCrypt volume you may get an error message saying that the volume is in use.

This is a bug in TrueCrypt prior to the 4.3a release, not TortoiseSVN.

They didn't send the required window messages so that apps holding open handles can close them. TSVNCache waits for these messages (windows itself sends them when e.g. unmounting a flash drive) and then closes the handles. TrueCrypt didn't send those, that's why you can't cleanly unmount those drives when TSVNCache is running.

In the meantime, here's another hint you can try:
If you mount drivecrypt always to the same drive letter, you can specify that path to the exclude list of the overlays (overlay page in the settings dialog). For example, if you always mount drivecrypt to g:\, put "g:\" into the "exclude paths" - next time the cache (TSVNCache.exe) starts up (kill it or next time you restart your computer), the cache won't monitor that drive anymore and therefore won't open any handles there.

Update
The bug is said to be fixed in the 4.3a release of TrueCrypt. Note that this version still identifies itself as simply 4.3 in the about box. The download, however, is "truecrypt-4.3a.zip.


SSH / SSL

This Section covers installation and configuration issues with SSH.


Does TortoiseSVN support SSH?

TortoiseSVN uses Subversion. And Subversion supports SSH svn+ssh:// (repository reachable via svnserve). If you don't want to use the svnserve server but Apache instead (which we would recommend!) then Subversion supports secure connections via SSL.

A guide on how to secure your Apache server with SSL can be found in the TortoiseSVN Daily Use Guide

Please have a look at the subversion book and the INSTALL file of subversion on how to use svn+ssh://


Subversion / TortoiseSVN SSH HowTo

(revision 0.5 by (c) Marc Logemann)

Because many new subversion users run into problems when attempting to use subversion with SSH, I compiled a HowTo for that issue. Perhaps I will expand this HowTo later on and submit it to the Subversion or TortoiseSVN docs.

-------------------------
Our Scenario:
-------------------------
Server: Linux or unix like system
Client: Windows 2000/XP (or variant)

-----------------------------------------
Installing subversion (server)
-----------------------------------------
I won't go into details here, because this topic is covered in great length in the official Subversion documentation. But one thing I want to point out nevertheless. If you compile subversion from source and don't provide any argument to ./configure, Subversion creates a "bin" directory under /usr/local and places its binaries there. This is no problem as long as you run subversion as daemon, but if you want to use tunnelling mode with SSH, you have to be aware that the user logging into via SSH can execute the svnserve program and some other binaries. For this reason, either place /usr/local/bin into the PATH variable or create symlinks of your binaries to the /usr/sbin directory or any other directory which is commonly in the PATH.

To make sure that everything is OK. Login in with SSH and the target user to the system later on and type: "which svnserve". This command should tell you if svnserve is reachable.
To check if svnserve is available through ssh, type: "ssh svnserve"

Furthermore this document assumes that you already have a subversion repository created with "svnadmin create". Please pay attention to the ACL of the repository in order to reduce possible problems. Check that each user coming in via SSH has appropriate rights to work with the repository.

Sometimes your system has 'mesg y' put into the global bashrc file. This will make connections with TortoisePlink fail, since that line will make SSH throw out an error "stdin: is not a tty". You must remove that line from your bashrc file.
------------------------------------------------
OpenSSH and certificates (server)
------------------------------------------------
Again I wont go into details about OpenSSH installation as this is covered elsewhere better. But on most systems, enabling SSH is just a matter of installing an RPM. If you rent a pre-installed linux server from a hosting company, SSH is most likely already installed. To be sure everything is in place, type: "ps xa | grep sshd" and watch out for SSH jobs.

Assuming OpenSSH is installed, one of the most important steps is to create a keypair for authentication. There are two possible ways of creating the keys. The first way is to create the keys with puttygen (a program of the putty family), upload the public key to your server and use the private key with putty. Because of some problems with this approach, I prefer the other way. This way creates the keypair with the OpenSSH tool ssh-keygen, downloads the private key to your client and converts the private key to a putty-style private key.

Lets do this step by step:

- login to your server
- type: ssh-keygen -b 1024 -t dsa -N passphrase -f mykey
- change "passphrase" to a secret keyword only you know
- type: ls -l mykey*

We just created a SSH2 DSA key with 1024 bit keyphrase. You will see two files. One named "mykey" and one named "mykey.pub". As you might guess, the .pub file is the public key file, the other is the private one. Next create a user on the server with a home directory:

- type: useradd -m myuser

You will have a directory under /home with the name "myuser", create a new directory in "myuser" called ".ssh":

- type: cd /home/myuser
- type: mkdir .ssh

Then go to the directory where you created your keys and copy the public key to the .ssh userfolder with the following command:

- type: cp mykey.pub /home/myuser/.ssh/authorized_keys

or if you already have some keys in place

- type: cat mykey.pub >> /home/myuser/.ssh/authorized_keys

Please pay attention to the filename, it really must be "authorized_keys". In some old OpenSSH implementations, it was "authorized_keys2". Now download the private key file to your client computer. Remember, the file was "mykey"

------------------------------------------------------------
SSH key generation and connection check (client)
------------------------------------------------------------
Grab the tools we need for doing SSH on windows on this site:
http://www.chiark.greenend.org.uk/~sgtatham/putty/

Just go to the download section and get "Putty", "Plink", "Pageant" and "Puttygen"

In order to use the private key we get from the server, we have to convert it to a putty format. This is because the private key file format is not specified by some standard body. To do this we simple open "puttygen" and open the "conversions" menu and chose "Import Key". Then browse to your file "mykey" which you got from the server enter your provided passphrase upon creation of the key. Finally click "Save private key" and save the file as "mykey.PPK" somewhere on disk.

Now we are ready to use this key for the first time to test the connection. In order to do this, we open the program "putty" and create a new session like this:

Session->HostName: Hostname or IP Adress of your server
Session->Protocol: SSH
Session->Saved Sessions: MyConnection
SSH->Prefered SSH Protocol version: 2
SSH->Auth->Private Key file for auth: $PATH$\mykey.PKK (replace $PATH$ with real path to the mykey.PKK file)

Then go back to Session tab and hit "save" button. You will see "MyConnection" in the list of available connections.

Next click "open" and you should see a telnet login prompt. Use "myuser" as username (without double quotes of course) and if everything is OK, you don't have to provide a password to your system. If the system still requires a password, something went wrong. See Debugging Section of this HowTo.

-----------------------------------------------
Testing SSH with TortoiseSVN (client)
-----------------------------------------------
After installing TortoiseSVN right click on some folder inside your Windows Explorer. You will see a menu item called TortoiseSVN->RepoBrowser. After opening the browser you have to enter a URL like this:

svn+ssh://myuser@MyConnection/usr/local/repos

Lets talk briefly about the URL (if you need more infos, check the subversion docs). The Schema name is "svn+ssh", this tells Tortoise how to handle the requests to the server. After the double slashed, you can provide the user which is trying to connect to the server, in our case this is "myuser". After the "@", we supply our putty session name. This session name contains all details like where to find the private key and the servers IP or DNS. Last we have to provide the full path to the repository. Its assumed that a subversion repository resides at /usr/local/repos

If you submit the URL, you will see an opened tree on the next screen until the node "repos". Yet, there has not been made any connection, because the tree representation comes from the supplied URL. When you hit the "+" button in front of "repos", the connection will be established and you will see the "+" sign disappearing if you don't have anything in the repository or you will see your already imported projects and files.

Right now, you should have a running SSH Tunnel in conjunction with TortoiseSVN.

-----------------------------------------------
Configuration Variants (pageant)
-----------------------------------------------
Now I will continue to show some configuration variants, that can be helpful during everyday work.

One way to simplify the URL in TortoiseSVN is to set the user inside the putty session. For this you have to load your already defined session "MyConnection" in putty make the following entry:

connection->Auto Login username: myuser

Then save your putty session as before and try the following URL inside Tortoise:
svn+ssh://MyConnection/usr/local/repos

This time we only provide the putty session "MyConnection" to the SSH client TortoiseSVN uses (TortoisePlink.exe). This client is capable of checking the session for all necessary details like loginuser or server ip.

Some people like using pageant for storing all their keys and in fact each howto explains that it is important to place your keys there. In fact, because a putty session is capable of storing a key, you don't need pageant for normal business. But imagine you want to store keys for several users, in that case, you would have to edit the putty session over and over again, depending on the user you are trying to connect with. For this situation pageant makes perfectly sense, because when putty, plink, TortoisePlink or any other putty-based tool is trying to connect to a SSH server, it checks all private keys that pageant carries to initiate the connection.

For this task, simply start pageant and add a key. It should be the same private key you defined in the putty session above. If you use pageant for private keys storage, you can delete the "SSH->Auth->Private Key file for auth" section inside your putty session. You can add more keys for other systems or other users of course. If you don't want to repeat this procedure after every reboot of your client, you should place the pageant in autostart group of your windows installation. You can append the keys with complete paths as command line arguments to pageant.exe

The last way to connect to a SSH server is by just using this URL inside TortoiseSVN:

svn+ssh://myuser@100.101.102.103/usr/local/repos

As you can see, we dont use a saved putty session but an IP address as connection target. We also supply the user, but you might ask how the private key file will be found. Because TortoisePlink.exe (the standard SSH client for TortoiseSVN) is a modified version of the plink tool from the putty suite, also TortoiseSVN looks for a running pageant and will try all the keys stored in pageant.

----------------------------------------
Debugging / Troubleshooting
----------------------------------------

See the other articles in the SSH section of our FAQ

-------------------
Feedback
-------------------
For comments or corrections on this howto, please use the TortoiseSVN mailinglist on http://tortoisesvn.tigris.org/

This is a copy of the original at: http://www.logemann.org/day/archives/000099.html
Thanks to Marc!


SVN+SSH+public key authentication on Windows Box as server

This walkthrough on getting SVN+SSH up and running on a Windows Box was provided by Thorsten Möller
Thanks!

Hi all,

I just want to provide my solution to the community since I have found out that there might be many people struggling with the same issue.

  1. Server: Install Cygwin SSH daemon as described here: http://pigtail.net/LRP/printsrv/cygwin-sshd.html
  2. Install SVN on the server (as described in the Subversion doku)
  3. Server: Create an account (for instance "SVNuser") which you will later use for logging in. Check that the user permissions are sufficient to read and write your SVN repository directory on the server.
  4. Server (if not already done): Open Cygwin console and run mkpasswd -l &gt; /etc/passwd
  5. Client: Download PuTTY and PuTTYgen (http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html)
    and place it in a directory which is part of the PATH, for instance C:\Windows
  6. Client: Create a key pair with PuTTYgen an save the keys.
  7. Transfer the public key to the server file: /home/&lt;svnuser&gt;/.ssh/authorized_keys
  8. Create a PuTTY session for loggin in to the server as described here:
    Subversion / TortoiseSVN SSH HowTo.
    Do not forget to activate auto login, i.e. set the user name.
  9. Test whether you can log in to the server with the key.
    Server: If that works you might want to disable password authentication for SSH by editing /etc/sshd_config. Change/edit lines as follows (and restart SSH service afterwards):

    PubkeyAuthentication yes
    PasswordAuthentication no
    PermitEmptyPasswords no
    ChallengeResponseAuthentication no
  10. Server: Modify /home/&lt;svnuser&gt;/.ssh/authorized_keys as follows. Note that every user which is supposed to use SVN uses the same login but a different key, thus you have to add one line for every user/key.

    Note: This is all on one very long line.

    command="svnserve -t -r c:/mySVNroot/ --tunnel-user=&lt;SVNuser&gt;",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa &lt;thePublicKey&gt; &lt;publicKeyComment&gt;

    The trick here is to use the slash instead of backslash to specifiy the SVN repository root:
    -r c:/mySVNroot.
    Another important thing is --tunnel-user=&lt;SVNuser&gt;.
    Since all users later will do a SSH login with the same login name (but different keys) you have to map each key to a SVN user - remember that SVN maintains its own users/userrights.

  11. Client: Access the repository with a URL like:

    svn+ssh://&lt;PuTTYSessionName&gt;/&lt;MyRepository&gt;/trunk

In various documentations and news group postings you will read that the URL has to contain the real path on the server. But this is not neccessary if the -r parameter was set correctly, see 10. I swear, for me it works fine :-)

Thorsten


How do I get client certificates to work?

Sent to the TortoiseSVN mailing list by Nigel Green, Thanks!

The final workaround that I came up with may well be helpful to others trying to solve the same problem, so I thought it worthwhile to detail my findings below ........

What I was trying to achieve was a single server containing 2 virtual SSL hosts: The first one was for public access, with no requirement for a client certificate. The second one was to be totally secure with a required client certificate, running a Subversion that I could access with TortoiseSVN.

Adding a "SSLVerifyClient Optional" directive to the "per-server" section of the Apache configuration (i.e. OUTSIDE of any "VirtualHost" and "Directory" locks) forces Apache to request a "Client Certificate" in the initial SSL handshake. It appears to be essential for TortoiseSVN that the certificate is requested at this point. TortoiseSVN does not appear to work with Client Certificates if the SSL connection is re-negotiated. [I understand from quotes on the web that this is a bug in mod_ssl which is used by TortoiseSVN.]

However, this left me with a big problem. As the "SSLVerifyClient" directive is server-wide, it seemed that I could not make one virtual host require client certificates, and the other one not. I could not put any other "SSLVerifyClient" directives in the host configuration, as they are overridden by the server-wide directive, and I could not move the "SSLVerifyClient" directive to a "per-directory" level as TortoiseSVN would not cope with the SSL re-negotiation. A different approach was called for. In the end, the solution was quite simple; to add the following directive to the virtual host Directory that I wanted to lock down for Subversion:

SSLRequire %{SSL_CLIENT_VERIFY} eq "SUCCESS"

This directive grants access to the directory only if a client certificate was received and verified successfully. i.e. it was just what I wanted to achieve.
So to summarise, the relevant lines of my new Apache configuration that solve this problem are:

-----------------------------------------------
SSLVerifyClient Optional

### Virtual host configuration for the PUBLIC host (not requiring a certificate)

<VirtualHost 127.0.0.1:443>
  <Directory "pathtopublicfileroot">
  </Directory>
</VirtualHost>

### Virtual host configuration for SUBVERSION (requiring a client certificate)
<VirtualHost 127.0.0.1:443>
  <Directory "subversion host root path">
    SSLRequire %{SSL_CLIENT_VERIFY} eq "SUCCESS"
  </Directory>

  <Location /svn>
    DAV svn
    SVNParentPath /pathtorepository
  </Location>
</VirtualHost>

How do I disable http access once https is working?

Add the directive SSLRequireSSL to your Subversion <Location> block in the Apache config file.


How do I re-configure the client certificate for Tortoise SVN?

Settings-Dialog, "Clear Auth Cache" button.


I am getting the password dialog over and over again

TortoiseSVN (or better its SSH client TortoisePlink) can't find a key for the current user. Run pageant and add your private key or define a putty session with a private key included.
Try saving another copy of the key after clearing the passphrase and use that new key. Putty no longer prompts for a passphrase.


PuTTY keeps showing 'Invalid port number'

When trying to log in, I kept getting an "Invalid Port Number" from putty.

The message comes up if the user has already made an SSH connection using the Putty saved session. To avoid the error, you need to use a "Saved Session" that has never been used before.

If that doesn't work:

  • leave the SSH client field blank (which makes TortoiseSVN use TortoisePlink)
  • when you enter the URL of the repository, use the name of the saved session. For example, if your session name is MyConnection, use MyConnection instead of e.g. www.example.com

Error Messages

This section contains a number of popular errors that people get and possible solutions to avoid or to work around the situation.


Can't copy / move 'XXX.svn-base' to 'XXX.tmp': The system cannot find the file specified.

This error message typically occurs when you try to update your working copy.

The reason for this error is either:

  • There are actually 2 different files in the repository whose names differ only in case. This cannot work on a Windows checkout, because the Windows file system is not case-sensitive. It is likely that one of the files got added by mistake, so you need to find out which one, make sure there are no changes committed to the wrong file, then delete it.
  • or

  • There is a file with an illegal (illegal on Windows) filename. For example names like "con", "lpr", "com", etc. are illegal on Windows because those are device names. And of course names with "/\*?:|" and some other special chars in them are also not possible on Windows (NTFS and FAT).

And yes, we know the error message isn't really helpful in this case. But the error message comes from the Subversion library, which we can't change on our own.

There are several ways to solve the problem and to prevent it from happening again. Take a look at these instructions.


Uppercase/lowercase file name conflicts on Windows

There is a server hook script available at: http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/ that will prevent checkins which result in case conflicts.

If you already have two files with a name that differs only in case, you have to decide which one of them you want to keep and delete (or rename) the other one from the repository.

There are (at least) two possible solutions to rename a file without losing its log history. It is important to rename it within subversion. Just renaming in the explorer will corrupt your working copy!!!

Solution A) (recommended)

  1. Commit the changes in your working copy.
  2. Rename the file from UPPERcase to upperCASE directly in the repository using the repository browser.
  3. Update your working copy.

Solution B)

  1. Rename from UPPERcase to UPPERcase_ with the rename command in the TortoiseSVN submenu.
  2. Commit the changes.
  3. Rename from UPPERcase_ to upperCASE.
  4. Commit the changes.

Can't open file 'XXX\nnn-n.txn\changes': The process cannot access the file because it is being used by another process

People who report this error often state that it happens randomly, and often part way through a large commit. Retrying the commit may succeed, or it may fail at a different point.

The most likely cause is a virus scanner holding a file handle open when it shouldn't. Try disabling the scanner, or get it to ignore your repository.

Similar errors can occur in your working copy. Try ignoring the .svn folder there.


Failed to add 'XXX': object of the same name already already exists

This error message typically occurs when you try to update your working copy. It is thrown because Subversion never deletes or overwrites existing local data. There may be three reasons why you get this error:

  1. You have a local unversioned file with the same name as a file which has been added by somebody else recently. In this case the solution is to move your local file somewhere else (or rename it), then update. Afterwards you can decide whether the two files need to be combined in some way, or if the choice of name is purely coincidental you can give your file a different name.
  2. A file has been renamed in the repository, but it differs only in case, like Install.txt to install.txt, and you have local changes. When you update, you end up in a situation (1), where the modified local file appears as unversioned. Move it somewhere else, update, then sort out the mess.
  3. There are actually 2 different files in the repository whose names differ only in case. This cannot work on a Windows checkout, because the Windows file system is not case-sensitive. It is likely that one of the files got added by mistake, so you need to find out which one, make sure there are no changes committed to the wrong file, then delete it.

There are several ways to solve the problem and to prevent it from happening again. Take a look at these instructions.


OPTIONS of '<path>': 401 Authorization Required <url>

When upgrading to version 1.4.x, you suddenly can't access your repository anymore. Every try is rejected with the error message:
OPTIONS of 'path': 401 Authorization Required 'url'

The reason for this is the automatic authentication with SSPI which is activated in version 1.4.x. That means TortoiseSVN now tries to authenticate automatically with the credentials of the user logged on to the Windows domain controller.

If you have set up your server to authenticate with SSPI against a domain controller, and the domain controller does not have the user account GUEST enabled, you should be fine. But if the user account GUEST is active, then all authentication succeeds with that user - and you usually won't give the user GUEST access to your repository. That's why the authentication succeeds, but the authorization fails.

Another reason why it can fail is if you have set up different accounts for the repository access than you use for logging in to your workstations (although then I wonder why you are using SSPI authentication in the first place).

To solve this issue you have the following options:

  • disable the GUEST account on the domain controller
  • use the same accounts for your workstations and access to the repository
  • disable SSPI authentication for the repository
  • Check the case of the usernames. Changing the usernames in the access files to lowercase also might solve this problem

This client is too old to work with working copy 'XXX'

The full error message is:
This client is too old to work with working copy '.'; please get a newer Subversion client.

You will get this error message once you have used a Subversion client linked with a higher Subversion version, and then try to execute a command with a Subversion client linked with an older version, e.g., you used an 1.4.x client on your working copy, and now you try an svn 1.3.x client on the same working copy.

The reason for this is that Subversion 1.4 and 1.5 upgrade the working copies transparently on every command. But once the working copy format is upgraded, older clients can't access the working copy anymore because they don't know the new format.

The only solution to 'fix' this is to upgrade whatever client you use and that gave you this error message.
Or do a fresh checkout with the older client.


Unknown hostname abc.net

After upgrading TSVN to 1.2.0 from 1.1.7, when I do an update I get "unknown
hostname abc.net". Uninstalled 1.2.0 and reinstalled 1.1.7 and all is well.

Some firewall programs detect program changes and silently disallow access to the network. In this case, fixing ZoneAlarm's settings for TSVN solved the problem.


Working copy is out-of-date

You will get this error message when you are trying to commit changes you made to your working copy. Normally this happens, because somebody else has changed the same file(s) in the repository as you have.

That means you need to use the Update command to update your working copy to the same level as the repository.

It may not be obvious why you need to do this, especially if you know the repository has not changed. The answer is simply that your working copy is not completely updated by a commit. Only changed files and folders get updated automatically. Consider this example on a newly created repository:

Add Folder in revision 1
Add File1 and File2 in revision 2
Modify File1 and commit in revision 3

Now the repository is at revision 3, but in your working copy the revisions look like this:

Folder       : revision 1
Folder/File1 : revision 3
Folder/File2 : revision 2

Now if you modify File2 and try to commit, it fails. The client tells the repository that File2 is at revision 2 with local modifications, but the repository is already at revision 3. If you then do an update, File2 will be at revision 3 as well (and of course your local changes will still be there).

The same thing may happen if you try to create a branch or tag. The answer is always the same:
If your working copy is out-of-date, update it!


Apache Error Messages

There are many error messages which can be thrown by apache when you try to access your repository. Most of these errors do not have anything to do with TortoiseSVN, but hint at some server misconfiguration. It is also possible that you have simply entered wrong repository URL.

To solve the configuration problems, the FAQ isn't quite the right place, because we need to know a lot more about your server setup. Please come to our mailing list at dev@tortoisesvn.tigris.org and ask your question there. Also, the Subversion mailing list users@subversion.tigris.org might be an even better idea for server configurations.

These error messages hint at configuraton problems:

  • '401 Authorization Required'
  • '500 Internal Server Error'

400 Bad Request

REPORT request failed on '...' REPORT of '...': 400 Bad Request (http://...)

You're behind a firewall which blocks DAV requests. Most firewalls do that.
Either ask your Administrator to change the firewall, or access the repository with https:// instead of http:// like in https://svn.collab.net/repos/svn/
That way you connect to the repository with SSL encryption, which firewalls can't interfere with (if they don't block the SSL port completely).


403 Forbidden

PROPFIND request failed: 403 Forbidden

It's probably because you've entered the parent path of your repository instead of the actual repository path. Try appending the name of the repository you wish to access to the URL. You also need to append the URL with a trailing '/' slash, after the repository name.

For more information about the actual error, seek out the Apache error log.


405 HTTP Method Not Allowed

PROPFIND Request Failed - Error 405 HTTP Method Not Allowed

This message comes in different flavours. You might be seeing this error when:

  • PROPFIND Request Failed
    You tried to browse the parent path of a repository instead of the repository itself using an older version of TortoiseSVN. Try appending the name of the repository you wish to access, or upgrade TortoiseSVN to 1.2.3 or newer.
  • PROPFIND Request Failed
    You forgot to append a '/' slash to the end of the URL you entered. Older versions of TSVN requires that there be a '/' after the repository name. If you forget this, TSVN will strip the repository name from the URL and therefore try to access the parent directory.
  • PROPFIND Request Failed
    You try to access the repository through a proxy which does not allow DAV requests. Usually you can browse your repository with your webbrowser just fine, only if you use an svn client you get this error. You have to configure your proxy/firewall server to let DAV requests through. Or try using https instead of http: most proxies can't analyze encrypted network packets and therefore can't block DAV requests anymore.

    Another possibility for this error is a virus scanner/firewall you have running on your machine. A lot of those filter out DAV requests without you even noticing it. Try disabling the scanner/firewalll.

  • Lock Request Failed
    You tried to lock a file in your working copy which no longer exists in the repository. Update your working copy before trying to lock files.

For more information about what actually caused the error, seek out the Apache error log.


501 Not implemented

The Apache 501 "Not Implemented" error is caused by a regression bug in the subversion 1.2.1 libraries. The "svn st -u" command of subversion 1.2.1 is incompatible with subversion 1.1.x servers. This normally happens when you "check for modifications" against old servers in TortoiseSVN.

TortoiseSVN can't do anything about this.

You can either:
- upgrade the server to subversion 1.2.1
- downgrade the client to 1.2.0 or earlier
- don't use the "check for modifications" dialog in TortoiseSVN against old servers.
- wait until the subversion team releases the 1.2.2 libraries.


Invalid command 'DAV'

Apache doesn't start after adding svn:

Apache throws an Exception that the requested operation failed. When starting the server from console you get an Error:
Invalid command 'DAV' perhaps mis-spelled or defined by a module not included in the server configuration
Solution: uncomment the line LoadModule dav_module modules/mod_dav.so in httpd too.


Where can I find the Apache error log?

If your server is Windows-based, typically in C:\\Program Files\\Apache Group\\Apache2\\logs.

If it's Un*x, try /var/log/httpd.

You will need to check the Apache error log yourself when you receive errors from eg. the Repo-Browser that looks like this: 'PROPFIND: Request failed - HTTP xxx'. The Apache error log contains a message describing the cause for these errors. The real error messages are unfortunately not propagated to Subversion clients like TortoiseSVN.


SVN+SSH Error Messages


File not found

Go to the Network tab on TortoiseSVN's settings dialog. Set the SSH Client to TortoisePlink.exe.


No repository found in 'svn+ssh://myuser@ 100.101.102.103/ usr/local/repo'

Check the path to your repository (here /usr/local/repo) if it really exists on the server and check the permissions on that folder and its contents.


Unable to write to Standard output

TortoisePlink uses the standard plink code, but is compiled as a Windowless app, so there's nowhere to send the error messages to. In TSVN settings->network, set the SSH client box to use standard plink, where the error messages are displayed in a command box. Once that is working, use TortoisePlink with the same parameters.

"could not write to standard output" means that Plink wanted to throw an error, but since TortoisePlink doesn't provide a DOS-box there's no standard output to write the error message to.

So something with the setup is wrong. Try with the normal plink program and see there what error message really is thrown and then fix the setup.

If normal plink just hangs, then the wrong params are passed to it (settings dialog, network tab).

Another possibility is that the SSH daemon is most likey not able to find the svnserve binary. Login with your target user (here myuser) into the server and type "which svnserve". If you dont see the path to the binary, make this file (and most likely the other subversion binaries) globally accessible to this user.


Why do comments sometimes get deleted from this website?

The purpose of comments is to add further information which will help other people. They're not there to ask support questions. Such support questions will get deleted by the web admins every few days.

If you need support, use the mailing list.
There's a big link at the top of each page named "Get Help". You can find all the information you need there, including how to reach the mailing list for questions not answered in the FAQ or the documentation.


Why did you name it TortoiseSVN?

The name of the program was fixed when we started, because the CVS counterpart is called TortoiseCVS. Tortoises have a hard shell and TortoiseSVN integrates into the Windows Explorer Shell. A funny coincidence (?!?) is that O'reilly chose turtles for the cover of the Subversion Book.


I love TortoiseSVN, how can I help?

Thanks for asking!

There are several ways to help.

  • You can contribute code.
  • You can review and contribute to our documentation.
  • You can add a new translation or pick up one of the currently unmaintained translations from the end of the list
  • To keep up our spirits, you can get small presents for Stefan and Lübbe or even send money through PayPal. Lübbe is saving for a new bass guitar. Have a look at our Donations Page.