{"thread":{"id":"26949","subject":"ignorecase interoperability bugs","startedAt":"2011-03-31T19:18:36Z","lastAt":"2011-03-31T19:18:36Z","messageCount":1,"participants":["Joey Hess"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"164825","messageId":"20110331191836.GA16342@gnu.kitenet.net","threadId":"26949","inReplyTo":null,"subject":"ignorecase interoperability bugs","fromName":"Joey Hess","fromEmail":"joey@kitenet.net","sentAt":"2011-03-31T19:18:36Z","receivedAt":"2011-03-31T19:18:36Z","isPatch":false,"sender":{"key":"joey@kitenet.net","avatar":"https://avatars.githubusercontent.com/u/16392?v=4"},"body":"Suppose I have two clones of a repo. \"mac\" has ignorecase=true and is on HFS+,\nand \"lin\" has ignorecase=false and is on ext4. With git 1.7.4, I have found\nsome very unusual behavior.\n\non mac (omitting all git output to save space):\n\n$ mkdir X\n$ echo mac > X/foo\n$ git add X/foo\n$ git commit -m \"added X/foo\"\n\non lin (omitting all git output to save space):\n\n$ git pull mac master\n# now X/foo exists here\n$ mkdir x\n$ echo lin > x/foo\n$ git add x/foo\n$ git commit -m \"added x/foo\"\n\non mac:\n\n$ git pull lin master\n[...]\n * branch            master     -> FETCH_HEAD\nUpdating a3dbf10..2d4223d\nFast-forward\n x/foo |    1 +\n 1 files changed, 1 insertions(+), 0 deletions(-)\n create mode 100644 x/foo\n$ git status\n# On branch master\n# Changes not staged for commit:\n#   (use \"git add <file>...\" to update what will be committed)\n#   (use \"git checkout -- <file>...\" to discard changes in working directory)\n#\n#\tmodified:   X/foo\n#\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\n$ git add X/foo\n$ git commit X\n# On branch master\n# Changes not staged for commit:\n#   (use \"git add <file>...\" to update what will be committed)\n#   (use \"git checkout -- <file>...\" to discard changes in working directory)\n#\n#\tmodified:   X/foo\n#\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\n\nSo, it's possible to get files that git thinks are changed, but\ncannot be committed.\n\n$ echo testing > X/foo\n$ git status\n# On branch master\n# Changes not staged for commit:\n#   (use \"git add <file>...\" to update what will be committed)\n#   (use \"git checkout -- <file>...\" to discard changes in working directory)\n#\n#\tmodified:   X/foo\n#\tmodified:   x/foo\n\nAnd it's possible to have multiple cases of the same file show up\neven though ignorecase=true.\n\n\nThe problems don't end there. Suppose I have a program that expects to\nfind a file in proggy/config. But, on mac, I already have a Proggy/Data\nfile that I created & committed for some reason. No problem; I write\nmy config to proggy/config; the program can read its file, I commit\nproggy/config, and all seems well. Now I clone to lin, and see:\n\n$ ls\nProggy/Data\nProggy/config\n$ proggy\nproggy: cannot open proggy/config: file does not exist\n\n\nGit 1.7.2.5 seems to handle both these cases better; the ignorecase rework\nin 1.7.4 introduced most of these problems AFAICS.\n\n-- \nsee shy jo\n"}]}