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.
Thank you for offering! You've got three choices:
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.
However, its implementation is fairly buggy, and TortoiseCVS enables overlays only for Explorer windows that belong to the first instance of explorer.exe (observe the task manager process list to find out when a second instance of explorer.exe is started).
You may override that behaviour by creating a new DWORD registry value "OverlayIconStatus" under HKEY_CURRENT_USER\Software\TortoiseCVS and set it to one of the following values:
But if you use it to unconditionally enable icon overlays on NT, you'll often get access violations when closing processes.
Still having trouble on NT? Try running Explorer from a DOS box. Kill explorer.exe from Task Manager and run a new one by just typing explorer in the DOS box.
Or, try this. 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.
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.
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.
The Windows icon cache is a fairly buggy creature. You can solve this in one of the following ways:
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.
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.
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.
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."
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.
You can fix this by upgrading to Windows 2000 service pack 2.
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:
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"
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"
Simply uninstall from Add/Remove Programs in the Windows control panel.
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:
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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).
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:
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:
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:.
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:
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.
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.
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.
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.
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:
There is a shareware rsh.exe which works with this that is called ARSHD95 (thanks to Daniel Jackson for pointing this out). You want the client from in that package, not the server. If you find an open source rsh.exe that works with this, please mail us so we can tell others here, and add support via :ext: (see below).
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.
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.
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:
Here's a brief overview of how it works:
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:
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.
You don't need any other software installed to make a local repository. Simply follow these steps:
TortoiseCVS can also offer to initialise a new repository on a remote server, provided you have permissions.
Check out this page.
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.
Go into your sandbox and select CVS → About.