While I tend to agree with case-insensitive searches, I would tend to question the use of a non-case-preserving / last-use methodology reminiscent of the days of DOS. I was never terribly fond of DOS nor of Windows for Workgroups, and this change smacks of that. That said, as an algorithm it is one legitimate option, I just would not tend to use it. Have you thought of other approaches that are case-preserving / case-insensitive (modern Windows implementations and Mac OS X) or of case-sensitive (UNIX)? What about giving the user the choice? Looking back at how flexible and simple folks here on this list made the EOL support (the best I have seen to date) what if you followed a similar approach and provided the flexibility to the users by giving the options to control the behavior themselves, then fall back to reasonable defaults if left unspecified? I would imagine having two properties would be somewhat more useful: core.casepreserving=true|false core.caseinsensitive=true|false For Unix-centric environments the defaults would be true & false, respectively. For mixed Windows/Unix environments users would configure it as true & true. A combination of false & true, respectively, would be appropriate for DOS users, but this may be another option for mixed environments. A combination of false & false would be impossible by definition. What this would mean is that searches in the purely Unix world would store and match sensitively; but in such an environment there may be issues should any Windows users attempt to work with the repository if two files having a similar names existed. For Windows users the last read operation would overwrite the first (not a good thing). For mixed configurations there are two options, the Windows/Mac option, and the DOS option. The nice thing about case-insensitivity is that when requesting a file by name any capitalization can be used. The bad thing, well come to think of it, there is none that I can think of, but for those more religious than I about Unix they may cite otherwise. -Bob On Mon, Aug 16, 2010 at 3:38 PM, Johannes Sixt <j6t@xxxxxxxx> wrote: > The following patch series extends the core.ignorecase=true support to > handle case insensitive comparisons for the .gitignore file, git status, > and git ls-files. git add and git fast-import will fold the case of the > file being added, matching that of an already added directory entry. Case > folding is also applied to git fast-import for renames, copies, and deletes. > > The most notable benefit, IMO, is that the case of directories in the > worktree does not matter if, and only if, the directory exists already in > the index with some different case variant. This helps applications on > Windows that change the case even of directories in unpredictable ways. > Joshua mentioned Perforce as the primary example. > > Concerning the implementation, Joshua explained when he initially submitted > the series to the msysgit mailing list: > > git status and add both use an update made to name-hash.c where > directories, specifically names with a trailing slash, can be looked up > in a case insensitive manner. After trying a myriad of solutions, this > seemed to be the cleanest. Does anyone see a problem with embedding the > directory names in the same hash as the file names? I couldn't find one, > especially since I append a slash to each directory name. > > The git add path case folding functionality is a somewhat radical > departure from what Git does now. It is described in detail in patch 5. > Does anyone have any concerns? > > I support the idea of this patch, and I can confirm that it works: I've > used this series in production both with core.ignorecase set to true and > to false, and in the former case, with directories and files with case > different from the index. > > Joshua Jensen (6): > Add string comparison functions that respect the ignore_case > variable. > Case insensitivity support for .gitignore via core.ignorecase > Add case insensitivity support for directories when using git status > Add case insensitivity support when using git ls-files > Support case folding for git add when core.ignorecase=true > Support case folding in git fast-import when core.ignorecase=true > > dir.c | 105 ++++++++++++++++++++++++++++++++++++++++++++++---------- > dir.h | 4 ++ > fast-import.c | 7 ++-- > name-hash.c | 72 ++++++++++++++++++++++++++++++++++++++- > read-cache.c | 23 ++++++++++++ > 5 files changed, 188 insertions(+), 23 deletions(-) > > -- > To unsubscribe from this list: send the line "unsubscribe git" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html