Windows上的Git:为什么我突然有一个以前跟踪过的未跟踪目录?

时间:2010-08-16 10:09:01

标签: windows git

当我点击'git status'时,它会显示2个文件夹,其中包含很久以前被跟踪过的文件:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       src/UI/Views/Shared/EditorTemplates/
#       src/Web/helpers/

nothing added to commit but untracked files present (use "git add" to track)

Git GUI没有按预期显示任何内容。

使用portablegit 1.7.1,但尝试了1.7.0.2 - 结果相同。

导致这种情况的原因是什么?


$ cat .gitignore
.nu/*
lib/*
*~
*.swp
*.swo
*_ReSharper*
doc/*
RAPLM.suo
RAPLM.5.1.ReSharper.user
src/*/bin/*
src/*/obj/*
src/*/Debug/*
src/*/Release/*
src/Domain/unused

@Charles Bailey

lapsaarn@WW021198 /d/work/asdf (master)
$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       src/UI/Views/Shared/EditorTemplates/
#       src/Web/helpers/
nothing added to commit but untracked files present (use "git add" to track)

lapsaarn@WW021198 /d/work/asdf (master)
$ git add src/Web/helpers/

lapsaarn@WW021198 /d/work/asdf (master)
$ git add src/Web/helpers/*

lapsaarn@WW021198 /d/work/asdf (master)
$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       src/UI/Views/Shared/EditorTemplates/
#       src/Web/helpers/
nothing added to commit but untracked files present (use "git add" to track)

lapsaarn@WW021198 /d/work/asdf (master)
$

@Charles

  

$ git ls-tree -r HEAD | grep -i helpers
  100644 blob 843de27f850308786140a7c09f67b5ef99184630 src / web / helpers / HtmlHelperExtensions.cs

1 个答案:

答案 0 :(得分:13)

Charles Bailey在评论中正确诊断了问题:“git add”对不区分大小写的Os。

它链接到msysgit的issue 286:“目录名称的大小写敏感性”,即使您将core.ignorecase设置为“{{1>},问题仍然存在(同样,对于目录)真。

当您添加“src\Web”(大写字母为“W”)时,如果您的索引已包含“src\web”(小写字母'{{1},则不会添加任何内容}}“)。

提出补丁但被拒绝:

  

该文件夹似乎未列为未跟踪,因为 w 会尝试将旧名称与新名称进行比较,最终找不到匹配项   新文件夹(即使其中的文件仍然被跟踪!)   编写了一个非常粗鲁的补丁(下面内省),试图解决这个问题   现在......对于我的最小情况,这是有效的 - 该目录不再列为未跟踪。但我强烈期望这是一个破坏补丁,至少出于以下原因:不区分大小写的比较应该打破二进制搜索,因为如果我在索引中有更多文件,套管应该返回错误的位置。

directory_exists_in_index()

所以你需要:

  • 将您的“ dir.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/dir.c b/dir.c index e05b850..c55a15c 100644 --- a/dir.c +++ b/dir.c @@ -444,7 +444,7 @@ static enum exist_status directory_exists_in_index(const char *dirname, int len) struct cache_entry *ce = active_cache[pos++]; unsigned char endchar; - if (strncmp(ce->name, dirname, len)) + if (strnicmp(ce->name, dirname, len)) break; endchar = ce->name[len]; if (endchar > '/') -- 1.6.4.msysgit.0.2.gcb017.dirty ”更改为工作目录中的“Web”(文件系统)
  • 或者将您的“web”更改为索引(web)中的“Web”。