views:

298

answers:

3

We encountered a problem with using Subversion on Windows. A developer committed a file foo.Data.sql and later another developer committed a file called foo.data.sql. Naturally, this caused a problem on Windows clients (all clients are Windows in our environments) because files are case sensitive in Subversion but not in Windows.

We managed to resolve this problem by deleting one of the files directly in the repository, but I still have two questions:

  1. How is it possible for a developer to do this using a Windows client? Does he have an invalid working copy, or is there a bug in the client (TortoiseSVN)?
  2. How can we prevent changes like these from entering the repository (i.e. has anyone written a hook script that performs a sanity check for file casing issues)?
A: 

1; It is possible, because the two files came from two developers. One is renaming or creating the file with different cases and during commit does not realise that it will be an add not a commit changes.

2; Check TortoiseSVN FAQ

Biri
+4  A: 

There is definitely a hook script that checks case sensitivity - Sourceforge have it as one of their options. A quick google turns up: http://www.subversionary.org/howto/using-check-case-insensitive-py-on-windows and http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/case-insensitive.py

The issue will have arisen on a windows platform if user 1 added foo.data.sql and user 2 added foo.Data.sql before getting an update from user 1.

Hope that helps :)

JonTheNiceGuy
+1  A: 

On Windows, files are case-insensitive, but case-preserving. You can rename a file, changing the case and Windows will preserve the change. The problem occurs when Subversion tries to create the second file. Windows reports that the file already exists.

If you wanted to merge the two files into a single copy, instead of deleting the file in the repository, you could rename the bad file in the repository (i.e. append a suffix like '.temp'), update the client, merge into the good file, and then delete the bad file.

Brannon