TortoiseCVS FAQ

TortoiseCVS FAQ

Project questions


What is TortoiseCVS?
I love TortoiseCVS, how do I give some money towards it?
Who is Charlie?

Installation issues


Why are there no context menu entries?
Why are there no icon overlays?
Why are only some icon overlays shown?
Why do the overlay icons sometimes change to random graphics?
Why can't I get it to work on NT 4.0?
What about Windows 98?
And how about Windows Vista and Windows 7?
Does TortoiseCVS work with Windows Terminal Server?
Yeuch! Those icons are grotesque, I want better ones!
On Win2K, I get an error about a missing entry point in MSVCRT.dll
How do I install the Windows Desktop Update on NT 4.0 / Win95?
How do I uninstall TortoiseCVS?

Daily use questions


Ooops! I accidentally removed a file - how can I get it back?
When I remove a file it vanishes, how do I commit it?
How do I discard a change, reverting to the version in the repository? (Undo Checkout in SourceSafe)
Can you recommend an external diff program?
How do I change the external diff program?
Can I mix and match with WinCVS or the command line?
Can I share my sandbox with Linux or Cygwin?
Why do my text files suddenly have an additional <CR> at the end of each line?
Can I work on lots of modules from different repositories at once?
How can I automatically display the CVS columns in Explorer for each CVS-controlled folder?
TortoiseCVS seems to slow down Windows Explorer. What can I do?
Why do the overlay icons sometimes show the wrong status?

Protocol problems


How does TortoiseCVS work with SSH?
What is the difference between :ssh: and :ext:?
How do I use SSH to work with different servers that need different SSH parameter sets?
Does TortoiseCVS support SSH v2.0?
Any tips for working with SourceForge?
When using SSH, how do I make it so I don't need to enter the password every time I do anything?
I'm using TortoiseCVS with Cygwin's SSH, why doesn't it work?
I need to specify a different SSH port but TortoiseCVS won't let me?
Why is RSH (.rhosts) no longer supported, and what do I do about it?
Using TortoiseCVS together with Eclipse
How do I use the :local: protocol when the repository is on a network drive?
The IP address of the server has changed

Powerful features


How do I enable exclusive locking or announcing edits?
How does TortoiseCVS handle binary files?
How do I set up a personal repository to use without a server?
How do I migrate from Visual SourceSafe?
Can I customise the flags sent to CVS?

Obtaining support


How do I find out which version of CVS the server is running?

What is TortoiseCVS?

TortoiseCVS lets you work with files under CVS version control directly from Windows Explorer. It is freely available under the GPL open source license. Most of this FAQ answers technical questions about problems with the software, or about how to use it. For more general information and screen shots, go to tortoisecvs.org.

I love TortoiseCVS, how do I give some money towards it?

Thank you for offering! You've got three choices:

Who is Charlie?

Charlie is the lovable TortoiseCVS mascot. His full name is Charlie Vernon Smythe (CVS).

Charlie isn't very technical (as he is a only a tortoise), so support questions should be directed to the mailing list.

Why are there no context menu entries?

Why are there no icon overlays?

Why are only some icon overlays shown?

The number of overlays allowed by Windows is limited to 15 in total. Windows itself uses 4 of those, leaving the remaining 11 to be used by other applications. If you have other software installed that uses icon overlays, the limit may be exceeded, causing some overlays not to be shown.

To resolve this problem, either uninstall the other software altogether, or manually remove one of the other icon overlay handlers. This can be done by editing the registry. Use at your own risk! You can delete [unused] entries at HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer/ShellIconOverlayIdentifiers.

Why do the overlay icons sometimes 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.

The treeview on the left side of 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 Explorer and outside of TortoiseCVS'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), Explorer doesn't ask the overlay extensions for updated overlays all the time. Even if you tell 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 CVS status of a folder has nothing to do with the folder itself, the folder itself never really changes (only some file inside the CVS folder, but not the folder itself), and 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.

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:

Why can't I get it to work on NT 4.0?

Try installing a recent version of MS Internet Explorer (5.5 or higher should work).
Important: Make sure you install the Windows desktop update that comes with Internet Explorer (see How do I install the Windows Desktop Update on NT 4.0 / Win95?).

Note that releases later than 1.8.32 do not support Windows NT.

What about Windows 98?

It is getting harder and harder to support Windows 95/98/ME, as neither Microsoft nor the CVSNT client officially support those systems. In addition, none of the TortoiseCVS developers have access to a Windows 9x platform.

For those reasons, the 1.8.32 release is the last to support Windows 95/98/ME.

And how about Windows Vista/7?

The TortoiseCVS team does not use Vista or Windows 7 and does not have access to a Vista development system. This means that no testing is done on Vista. Some users do report success using TortoiseCVS on Vista/Windows 7; if you experience problems, ask on the mailing list.

Note that the CVS-specific Explorer columns are not available on Windows Vista and Windows 7. Microsoft has decided to remove the IColumnProvider interface that TortoiseCVS relies on. Instead, Microsoft suggests to use the new property system. Unfortunately, the property system only supports adding handlers for specific file extensions, and can therefore not be used for this purpose.

Does TortoiseCVS work with Windows Terminal Server?

Yes. However, one user has reported an issue where overlay icons were not displayed except for the domain administrator. This was eventually resolved: "After upgrading there were still no overlay icons shown in Windows Explorer. However, we happened to update our mandatory user profile (due to other reasons) these days and since that profile update all overlay icons from TortoiseCVS are displayed correctly."

Yeuch! Those icons are grotesque, I want better ones!

A number of alternative icon sets are available for use with TortoiseCVS. You can easily change these icons from the "Preferences Dialog" under the "Main" tab. Simply click the "Browse" button to see and select from the wonderful assortment of icon sets.

On Win2K, I get an error about a missing entry point in MSVCRT.dll

You can fix this by upgrading to Windows 2000 service pack 2.

How do I install the Windows Desktop Update on NT 4.0 / Win95?

To get the Windows desktop update, 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. This may cause problems, read this usenet thread for the source of this information.

    The command must be run from the folder that contains the ie5setup.exe file. Some users have reported that the browser was initially unstable afterwards, but was fixed by reinstalling the browser only, others simply used the IE5 repair procedure.

    For Win95: ie5setup.exe /c:"ie5wzd /e:IE4Shell WIN /I:Y"

    For WinNT: ie5setup.exe /c:"ie5wzd /e:IE4Shell NTx86 /I:Y"

For IE6:

How do I uninstall TortoiseCVS?

Simply uninstall from Add/Remove Programs in the Windows control panel.

Ooops! I accidentally removed a file - how can I get it back?

The removed file has been moved to the Recycle Bin (unless you have turned off the Recycle Bin).

If you have already committed the removed file, you can simple undo the delete from the Recycle Bin, then add the file again.

If you haven't committed the removed file yet, you have two options:

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. It is often easiest to always commit things from the top level directory as it is recursive throughout the whole project.

How do I discard a change, reverting to the version in the repository? (Undo Checkout in SourceSafe)

Use the Update Special command on the CVS submenu and select the 'Clean copy' option. This works on directories as well as individual files.

You can also delete files or folders, and then just use a normal CVS Update on the folder above to get the latest version out again.

Can you recommend an external diff program?

The freeware ExamDiff is brilliant, and works well with TortoiseCVS. The open source WinMerge is also great.

Many people also like Beyond Compare, which is not free but not expensive either. Note that if you use version 3, you will need to add /solo to the Diff parameters.

If you need different diff programs for different file types (one for text files, one for binary word processor documents...) you should use meta-diff.

How do I change the external diff program?

Open the Preferences dialog, you can find it on the start menu. You can also hold down Control while you click on the CVS Diff menu option.

Can I mix and match with WinCVS or the command line?

Yes, you can check out a module with WinCVS and use it in TortoiseCVS or vice versa. If you've installed CVSNT as command line client you can also mix with that.

Some CVS clients work incorrectly with daylight saving time or time zones in general under Windows. You should use CVSNT or a sufficiently recent version of WinCVS with TortoiseCVS version 1.4+, especially on NTFS file systems.

Can I share my sandbox with Linux or Cygwin?

Unless you know exactly what you're doing, do not do that. It's highly recommended not to access your repository (that was checked out with TortoiseCVS, CVSNT or WinCVS) using UNIX-style CVS clients (like Linux's or Cygwin's) because of line ending incompatibilities. See also here.

Why do my text files suddenly have an additional <CR> at the end of each line?

The reason for this is CVS committing DOS-style text files (i.e. with <CR><LF> line endings) as UNIX-style text files (with <LF> line endings). There are many ways how this can happen, so first some general rules:

If the above satisfies you, stop here. If you'd like to know the details, continue reading.

The technical details

Okay, I've warned you ;)

In Windows, text file line endings consist of the byte sequence <CR><LF> ($0D$0A), while UNIX line endings only consist of a single <LF> ($0A). Loading a UNIX-style text file on Windows (or vice versa) may cause errors. Therefore, to be able to share text files across platforms, line endings have to be converted.

CVS internally stores line endings in UNIX style. So when committing a Windows-style text file to CVS, <CR><LF> has to be converted to <LF> before storing it on the CVS server. The opposite when updating: When a text file is downloaded from the CVS server, <LF> has to be converted to <CR><LF> before writing it to a sandbox on a Windows system. CVSNT by default does all those conversions automatically.

But other CVS clients don't do those conversions. Now, assume you commit a Windows-style text file using a non-CVSNT client. As this CVS client won't convert the line endings before uploading the file to CVS, the server repository will contain <CR><LF> line endings instead of <LF>. This leads to the following problems:

BTW: The above applies only to text files - binary files (keyword expansion -kb) are never converted.

UNIX line endings on Windows

As you might know, TortoiseCVS has the option to check out modules using UNIX line endings. When the user modifies and commits a file in a UNIX sandbox, TortoiseCVS assumes that this file has UNIX line endings, and passes a "--lf" to CVSNT on the command line, which instructs CVSNT to treat the file as one with UNIX line endings.

To detect whether a module was checked out with UNIX line endings, TortoiseCVS looks at the CVS administrative files in the CVS subdirectory: If the line endings for those files are in UNIX style, a UNIX sandbox is assumed. Unfortunately, there are some CVS clients (e.g. Eclipse) which create those files without a single line ending, so TortoiseCVS cannot detect them as UNIX sandbox. There's a preference setting that instructs TortoiseCVS whether to default to DOS or UNIX in such cases.

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

Yes, you can. This is a standard feature of CVS. Each directory which was checked out of CVS remembers where it came from (look at the files in the local subfolder called CVS to find out how). You can even multiply select modules which came from different places, and update or commit them all at once.

Some people have been known to reboot between changing repositories to change their CVSROOT environment variable. You do not need to do this! You don't even need to set a CVSROOT environment variable.

How can I automatically display the CVS columns in Explorer for each CVS-controlled folder?

TortoiseCVS already tells Explorer to always display the CVS columns, but it may not always work due to your Explorer settings.

If you use the "Remember each folder's view settings" folder option, the columns displayed in a particular shell view may be restored from the registry, so in this case the CVS columns may not be visible. Resetting the all folder view settings should allow the CVS columns to be on by default. You can do this in the Folder Options dialog in Explorer (or through Control Panel).

TortoiseCVS seems to slow down Windows Explorer. What can I do?

CVS wasn't originally designed to provide file status information for large amounts of files in minimal time, so TortoiseCVS has to do quite a bit of work before it can tell Explorer which overlay icons to display and what to write in the additional CVS columns in case they're enabled.

We recommend that you generally disable TortoiseCVS for as many folders as possible. You probably only need TortoiseCVS's features for a few sandbox folders on your PC, so there is no point in having it turned on for the remaining folders, thereby decreasing overall system performance:

How does TortoiseCVS work with SSH?

SSH is supported transparently via TortoiseCVS. If you checkout a CVSROOT using the "Secure shell (:ext:)" protocol TortoiseCVS will attempt to connect to the server using "PuTTy". The SSH support works as follows:

What is the difference between :ssh: and :ext:?

Both these protocols normally use the SSH (Secure Shell) protocol to communicate with the CVS server, meaning that your passwords and data are safe from eavesdroppers (although :ext: can be configured to use other protocols as well).

The difference is that :ssh: uses an SSH client built into CVSNT, while :ext: relies on an external SSH client.

If you use CVS from the command line, :ssh: has the advantage that you do not need any other software. Since TortoiseCVS already comes with its own SSH client, there is nothing gained from preferring :ssh:. Additionally, at least some versions of CVSNT have problems communicating with non-CVSNT servers, such as those used on the majority of UNIX servers.

Another important point is that it is not possible to configure :ssh: to use another port etc. in the Preferences dialog of TortoiseCVS. That dialog applies only to :ext:. Therefore, we recommend that you always use :ext: instead of :ssh:.

How do I use SSH to work with different servers that need different SSH parameter sets?

The "SSH parameters" in the "Preferences Dialog" are global settings, i.e. TortoiseCVS uses them for every SSH connection. This can be a problem if you need to use different SSH parameter sets for different servers. For example if server1 needs to be accessed through a proxy, and server2 doesn't, or server1 needs a different private key file than server2.

You can handle that by creating different PuTTY sessions:

Does TortoiseCVS support SSH v2.0?

Yes. In "SSH parameters" in the "Preferences Dialog" under the "SSH" tab, add -2, or create a PuTTY session and change the SSH configuration settings accordingly.

Any tips for working with SourceForge?

When using SSH, how do I make it so I don't need to enter the password every time I do anything?

You need to make a public/private key pair. The public key goes on the server, and the private key sits on your hard drive. Now, when you connect the server can verify who you are because only you have your private key.

To further protect your private key it is encrypted on your hard disk with a passphrase. You can however choose an empty passphrase, in which case you never have to enter a password but anyone with access to your computer can access your SSH CVS account. Or you can use an SSH Agent (such as Pageant) which will remember your passphrase for the duration of one session, so you only have to enter it once.

TortoiseCVS uses a version of Plink as its SSH client. This means you can use PuTTYgen to make a public/private key pair, and you can use Pageant to point to where the private key is. First of all download them both from the PuTTY website.

For information on how to use them read the PuTTY documentation on PuTTYgen and Pageant. In particular, make sure you read the sections "8.2: Using PuTTYgen, the PuTTY key generator" and "9.3.1 Making Pageant automatically load keys on startup".

Using SourceForge? After making your public key with PuTTYgen you need to upload it using the web interface. Log into the SourceForge web site, and go to your Account Options page. Down at the bottom is a section "Host Access Information" with a link titled "Edit SSH Keys for Shell/CVS". You need to add your public key there.

You may need to force Plink to use SSH protocol version 2. To do this, add -2 at the end of the "SSH parameters" in Preferences.

Too lazy to do all this? There is an alternative solution, which is insecure as it keeps your password in plaintext on your machine. Go to TortoiseCVS Preferences -> SSH -> SSH parameters and set the value to -pw password. But really, that would be an abuse of SSH. So if anyone asks, I didn't tell you about it, OK? And please don't ask for us to add password caching to TortoiseCVS. We won't do it.

I'm using TortoiseCVS with Cygwin's SSH, why doesn't it work?

If you've got spaces, quotes, or other non-alphabetical characters in your global HOME environment variable, then Cygwin may not cope. You need to change it.

I need to specify a different SSH port but TortoiseCVS won't let me?

The reason is because CVSNT, which TortoiseCVS relies on for all CVS actions, does not allow specifying the port for using the SSH protocol in the CVSROOT like other protocols. To setup TortoiseCVS to use a different SSH port go to TortoiseCVS Preferences → SSH → SSH parameters and set the value to -P portnumber, or create a PuTTY session and change the SSH configuration settings accordingly.

Why is RSH (.rhosts) no longer supported, and what do I do about it?

TortoiseCVS does not support RSH using the :server: protocol. This is because it uses CVSNT rather than the main version of CVS. We've made several attempts to resolve this but have been unable to do so easily, and have found no support from anyone who uses RSH. You have a choice on how to deal with this:

Using TortoiseCVS together with Eclipse

The Eclipse IDE has a built-in SSH client, activated in its CVS browser by using the "extssh" protocol string. It's functionally equivalent to using the "ext" protocol string, but eliminates the need for an external SSH client. This is fine when only Eclipse is used, but as Tortoise doesn't support the protocol, only its offline features will be available.

The official Eclipse documentation notes that "extssh" is incompatible with all other clients than Eclipse. The suggested solution is to configure "ext" to work in the same manner as "extssh" inside Eclipse, and then use "ext". See the link for details.

How do I use the :local: protocol when the repository is on a network drive?

First, you should really not do this. You have a high risk of ending up with a corrupt repository. If you still really want to do this (and don't say that we haven't warned you), you need to know the following:

The bottom line is that if you use :local: with the repository on a network drive, you must set up your repository as described in this CVSNT posting.

But you should really set up a CVS server.

The IP address of the server has changed

First, this would not be a problem if you had used the host name of the server instead of its IP address (even if you do not have a DNS server, you can use the HOSTS file to simulate one). That won't help you now, of course.

You have several options:

  1. Install WinCVS and use the 'change CVSROOT' macro that comes with it.
  2. Edit all the Root files inside the CVS folders in your sandbox (you can also edit one of them and then copy that over the other ones, since they all have identical content.
  3. Check out the sandbox again using the new CVSROOT, and copy any modified files from the old sandbox to the new.

How do I enable exclusive locking or announcing edits?

Here's a brief overview of how it works:

How does TortoiseCVS handle binary files?

CVS can automatically merge text files if two people change them at the same time, but it doesn't do so with binary files. It simply says there is a conflict, gives you a copy of both files, and lets you resolve it. Because of this you may want to use text files wherever possible. For example, use HTML or persuade Word to save as a text XML file.

TortoiseCVS tries to automatically detect whether a file is binary or text when you add it:

In all cases, the Add Files dialog presents the files you are about to add and the type of each one, so that you have a chance to correct the choices made.

Binary files are stored unchanged by CVS. Text files have their line end characters converted for different operating systems, and keywords expanded so you can easily tell who last changed a file and when.

If you want extra confidence than the automatic binary/text detection, read the section about binary files in the CVS manual. Then add an entry to the cvswrappers file to ensure files with specific extensions are stored as binary. This won't stop TortoiseCVS prompting you, but it will ensure that even if you accidentally choose text the wrappers file will override this for binary file extensions.

How do I set up a personal repository to use without a server?

You don't need any other software installed to make a local repository. Simply follow these steps:

  1. Prepare a folder with the files you want under version control.
  2. Right click on the folder and choose Make New Module from the CVS submenu.
  3. Select the "Locally mounted directory" protocol.
  4. In the directory section, enter where you would like your repository to be.
  5. After selecting OK, you will be asked to confirm creation of a new repository. Select the checkbox to confirm this, and click OK.
  6. You can now add the files within your folder to CVS, and work with it as described in the User's Guide.

TortoiseCVS can also offer to initialise a new repository on a remote server, provided you have permissions.

How do I migrate from Visual SourceSafe?

Check out this page.

Can I customise the flags sent to CVS?

To some extent you can. Make a file in your home directory called .cvsrc. You can find where the home directory is by doing CVS → Preferences. The format of .cvsrc is explained here.

For example, if you want to use -F on all tag commands so it moves tags, add the line "tag -F" to .cvsrc.

How do I find out which version of CVS the server is running?

Go into your sandbox and select CVS → About.