{"thread":{"id":"10475","subject":"Trouble with case-insensitive filesystems","startedAt":"2007-10-26T14:52:05Z","lastAt":"2007-10-26T16:34:50Z","messageCount":5,"participants":["Rocco Rutte","Andreas Ericsson","Jean-François Veillette","Jeff King"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"57276","messageId":"20071026145204.GA294@localhost.daprodeges.fqdn.th-h.de","threadId":"10475","inReplyTo":null,"subject":"Trouble with case-insensitive filesystems","fromName":"Rocco Rutte","fromEmail":"pdmef@gmx.net","sentAt":"2007-10-26T14:52:05Z","receivedAt":"2007-10-26T14:52:05Z","isPatch":false,"sender":{"key":"pdmef@gmx.net","avatar":null},"body":"Hi,\n\nafter importing the opensolaris hg repo into git, I noticed that git \ngets confused if the repo contains files that clash on case-insensitive \nfilesystems (here on OS X, I can't test Cygwin and Win32). git-checkout \ntells me that these files are modified, git-status gives me:\n\n$ git status\n# On branch master\n# Changed but not updated:\n#   (use \"git add <file>...\" to update what will be committed)\n#\n#       modified:   usr/src/cmd/lp/filter/postscript/font/devpost/HB\n#       modified:   usr/src/cmd/lp/filter/postscript/font/devpost/HB.name\n#       modified:   usr/src/cmd/lp/filter/postscript/font/devpost/HI\n#       modified:   usr/src/cmd/lp/filter/postscript/font/devpost/HI.name\n#       modified:   usr/src/cmd/lp/filter/postscript/font/devpost/HX\n#       modified:   usr/src/cmd/lp/filter/postscript/font/devpost/HX.name\n#       modified:   usr/src/cmd/lp/filter/postscript/font/devpost/charlib/LH\n#       modified:   usr/src/lib/libldap4/common/Version.c\n#\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\n\n...without touching anything. Yes, there's a version.c file next to \nVersion.c, HI.name next to Hi.name and so on.\n\nI'm not really sure what I'm expecting git to do, but I guess I want it \nto abort a checkout and only continue with -f. But at the very least, it \nshould issue a big fat warning (one may decide to work in some area \nwithout clashes).\n\nI really have no idea how to efficiently detect that at runtime and \nwhich areas of git to look at for patching...\n\nRocco\n"},{"id":"57280","messageId":"4722064C.1000201@op5.se","threadId":"10475","inReplyTo":"20071026145204.GA294@localhost.daprodeges.fqdn.th-h.de","subject":"Re: Trouble with case-insensitive filesystems","fromName":"Andreas Ericsson","fromEmail":"ae@op5.se","sentAt":"2007-10-26T15:22:52Z","receivedAt":"2007-10-26T15:22:52Z","isPatch":false,"sender":{"key":"ae@op5.se","avatar":"https://gravatar.com/avatar/426e89595c75a8f5252dd0c989e5fabe5bcac616e68557427ad9aef6b0ca342a?d=mp&s=160"},"body":"Rocco Rutte wrote:\n> Hi,\n> \n> after importing the opensolaris hg repo into git, I noticed that git \n> gets confused if the repo contains files that clash on case-insensitive \n> filesystems (here on OS X, I can't test Cygwin and Win32). git-checkout \n> tells me that these files are modified, git-status gives me:\n> \n> $ git status\n> # On branch master\n> # Changed but not updated:\n> #   (use \"git add <file>...\" to update what will be committed)\n> #\n> #       modified:   usr/src/cmd/lp/filter/postscript/font/devpost/HB\n> #       modified:   usr/src/cmd/lp/filter/postscript/font/devpost/HB.name\n> #       modified:   usr/src/cmd/lp/filter/postscript/font/devpost/HI\n> #       modified:   usr/src/cmd/lp/filter/postscript/font/devpost/HI.name\n> #       modified:   usr/src/cmd/lp/filter/postscript/font/devpost/HX\n> #       modified:   usr/src/cmd/lp/filter/postscript/font/devpost/HX.name\n> #       modified:   \n> usr/src/cmd/lp/filter/postscript/font/devpost/charlib/LH\n> #       modified:   usr/src/lib/libldap4/common/Version.c\n> #\n> no changes added to commit (use \"git add\" and/or \"git commit -a\")\n> \n> ...without touching anything. Yes, there's a version.c file next to \n> Version.c, HI.name next to Hi.name and so on.\n> \n> I'm not really sure what I'm expecting git to do, but I guess I want it \n> to abort a checkout and only continue with -f. But at the very least, it \n> should issue a big fat warning (one may decide to work in some area \n> without clashes).\n> \n> I really have no idea how to efficiently detect that at runtime and \n> which areas of git to look at for patching...\n> \n\nThere are no areas in git to patch. There's no sane way to handle your\ncase, so the best you could opt for is to import it to a system with\nsane case-handling, alter the repo so no two filenames clash, and then\ncheck it out on your case-insensitive filesystem. Note that you'll\nhave to make sure that you never check anything out prior to the\ncommit that renames the case-name clashes, or you'll end up with this\nsame trouble all over again.\n\nOn a side note; Please don't set the Reply-To: header for mails to\ngit@vger.kernel.org. Some consider it rude, and it makes the ones\nyou're asking for help have to work if they want to provide you\nwith anything off-list. It's a tad rude.\n\n-- \nAndreas Ericsson                   andreas.ericsson@op5.se\nOP5 AB                             www.op5.se\nTel: +46 8-230225                  Fax: +46 8-230231\n"},{"id":"57283","messageId":"A4BC28F4-0774-4D3E-AB1B-DA365841894F@yahoo.ca","threadId":"10475","inReplyTo":"20071026145204.GA294@localhost.daprodeges.fqdn.th-h.de","subject":"Re: Trouble with case-insensitive filesystems","fromName":"Jean-François Veillette","fromEmail":"jean_francois_veillette@yahoo.ca","sentAt":"2007-10-26T15:29:36Z","receivedAt":"2007-10-26T15:29:36Z","isPatch":false,"sender":{"key":"jean_francois_veillette@yahoo.ca","avatar":null},"body":"You can workaround this by creating a disk-image with a case- \nsensitive filesystem, then do your work inside that virtual drive.\n\n- jfv\n\nLe 07-10-26 à 10:52, Rocco Rutte a écrit :\n\n> Hi,\n>\n> after importing the opensolaris hg repo into git, I noticed that  \n> git gets confused if the repo contains files that clash on case- \n> insensitive filesystems (here on OS X, I can't test Cygwin and  \n> Win32). git-checkout tells me that these files are modified, git- \n> status gives me:\n>\n> $ git status\n> # On branch master\n> # Changed but not updated:\n> #   (use \"git add <file>...\" to update what will be committed)\n> #\n> #       modified:   usr/src/cmd/lp/filter/postscript/font/devpost/HB\n> #       modified:   usr/src/cmd/lp/filter/postscript/font/devpost/ \n> HB.name\n> #       modified:   usr/src/cmd/lp/filter/postscript/font/devpost/HI\n> #       modified:   usr/src/cmd/lp/filter/postscript/font/devpost/ \n> HI.name\n> #       modified:   usr/src/cmd/lp/filter/postscript/font/devpost/HX\n> #       modified:   usr/src/cmd/lp/filter/postscript/font/devpost/ \n> HX.name\n> #       modified:   usr/src/cmd/lp/filter/postscript/font/devpost/ \n> charlib/LH\n> #       modified:   usr/src/lib/libldap4/common/Version.c\n> #\n> no changes added to commit (use \"git add\" and/or \"git commit -a\")\n>\n> ...without touching anything. Yes, there's a version.c file next to  \n> Version.c, HI.name next to Hi.name and so on.\n>\n> I'm not really sure what I'm expecting git to do, but I guess I  \n> want it to abort a checkout and only continue with -f. But at the  \n> very least, it should issue a big fat warning (one may decide to  \n> work in some area without clashes).\n>\n> I really have no idea how to efficiently detect that at runtime and  \n> which areas of git to look at for patching...\n>\n> Rocco\n> -\n> To unsubscribe from this list: send the line \"unsubscribe git\" in\n> the body of a message to majordomo@vger.kernel.org\n> More majordomo info at  http://vger.kernel.org/majordomo-info.html\n"},{"id":"57287","messageId":"20071026161136.GC294@localhost.daprodeges.fqdn.th-h.de","threadId":"10475","inReplyTo":"4722064C.1000201@op5.se","subject":"Re: Trouble with case-insensitive filesystems","fromName":"Rocco Rutte","fromEmail":"pdmef@gmx.net","sentAt":"2007-10-26T16:11:36Z","receivedAt":"2007-10-26T16:11:36Z","isPatch":false,"sender":{"key":"pdmef@gmx.net","avatar":null},"body":"Hi,\n\n* Andreas Ericsson [07-10-26 17:22:52 +0200] wrote:\n\n> There are no areas in git to patch. There's no sane way to handle your\n> case, so the best you could opt for is to import it to a system with\n> sane case-handling, alter the repo so no two filenames clash, and then\n> check it out on your case-insensitive filesystem. Note that you'll\n> have to make sure that you never check anything out prior to the\n> commit that renames the case-name clashes, or you'll end up with this\n> same trouble all over again.\n\nPersonally I don't have a problem with that (since I do no work with \nthat repo). But IMHO it's bad to leave people without a clue what could \nbe wrong when git-status right after git-checkout/git-clone reports \nchanges. Btw, mercurial reports the problem so immediately know what's \nwrong.\n\n> On a side note; Please don't set the Reply-To: header for mails to\n> git@vger.kernel.org. Some consider it rude, and it makes the ones\n> you're asking for help have to work if they want to provide you\n> with anything off-list. It's a tad rude.\n\nI didn't set a Reply-To: header, just Mail-Followup-To: which is exactly \nwhat I want (in mutt language): Private mails via reply only go to me \nand list-reply goes to the list.\n\nRocco\n"},{"id":"57288","messageId":"20071026163450.GA19673@coredump.intra.peff.net","threadId":"10475","inReplyTo":"4722064C.1000201@op5.se","subject":"Re: Trouble with case-insensitive filesystems","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2007-10-26T16:34:50Z","receivedAt":"2007-10-26T16:34:50Z","isPatch":false,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Fri, Oct 26, 2007 at 05:22:52PM +0200, Andreas Ericsson wrote:\n\n> There are no areas in git to patch. There's no sane way to handle your\n> case, so the best you could opt for is to import it to a system with\n> sane case-handling, alter the repo so no two filenames clash, and then\n> check it out on your case-insensitive filesystem. Note that you'll\n\nYou don't need a sane system, since git's index provides one:\n\n  # make our new repo without checking anything out\n  git-clone -n /path/to/other/repo repo\n  cd repo\n\n  # grab a text representation of what would be checked out\n  git-ls-tree -r HEAD >files\n  # fix up any broken filenames\n  $EDITOR files\n  # and shove it into the index\n  git-update-index --index-info <files\n\n  # update your working tree\n  git-checkout-index -a\n  # and optionally save the commit\n  git-commit -m 'broken filenames hack'\n\nOf course, all of the prior commits won't be usable. You would have to\nrepeat this hack on every commit using git-filter-branch for that.\n\n-Peff\n"}]}