Git на Windows: Почему у меня вдруг появился неотслеживаемый каталог, который раньше отслеживался? - PullRequest
8 голосов
/ 16 августа 2010

Когда я нажимаю '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 ничего не отображается, как ожидалось.

Использование 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 Ответ

13 голосов
/ 04 ноября 2010

Чарльз Бэйли правильно диагностировал проблему в комментариях: "git add" в регистре без учета регистра.

Он связан с выпуском 286 msysgit: "Чувствительность к регистру имен каталогов", и проблема остается (опять же, для каталогов ), даже если для core.ignorecase установлено значение true.

При добавлении "src\Web" (с большой буквы «W») ничего не добавит, если ваш индекс уже содержит «src\web» (строчные буквы «w»).

Патч был предложен, но отклонен:

Папка выглядит как неотслеживаемая, поскольку directory_exists_in_index() пытается сравнить старое имя с новым именем и в итоге не находит соответствия для новой папки (даже еслифайл внутри него остается отслеженным!).
Было написано очень грубое исправление (выделено ниже), чтобы попытаться обойти проблему.
Теперь ... для моего минимального случая это работает - каталог больше не работаетуказан как неотслеживаемый.Но я настоятельно ожидаю, что это будет патч BROKEN по крайней мере по следующей причине: сравнение без учета регистра должно прервать бинарный поиск, так как регистр должен возвращать неправильную позицию, если в индексе было больше файлов.

 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' в индексе (git mv src/web src/Web) в вашем индексе.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...