Git en Windows: ¿Por qué de repente tengo un directory sin seguimiento que solía rastrearse?

Cuando presiono 'estado de git', muestra 2 carpetas que contienen files que se rastrearon hace mucho time:

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

La GUI de Git no muestra nada como se esperaba.

Usando portablegit 1.7.1 , pero intenté 1.7.0.2 – mismos resultados.

¿Qué puede causar eso?


 $ 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/Shanetworking/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/Shanetworking/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 CABEZA | grep -i helpers
100644 blob 843de27f850308786140a7c09f67b5ef99184630 src / web / helpers / HtmlHelperExtensions.cs

Charles Bailey correctamente diagnosticó el problema en los comentarios: " git add " en un caso insensible.

Está vinculado al problema 286 de msysgit: "Sensibilidad de mayúsculas y minúsculas de los nombres de directory", y el problema persiste (nuevamente, para los directorys ) incluso si establece core.ignorecase en true.

Cuando agrega " src\Web " (con una " W " mayúscula), no agregará nada si su índice ya contiene " src\web " (minúscula ' w ').

Se propuso un parche, pero se rechazó:

La carpeta parece estar listda como no rastreada porque directory_exists_in_index() intenta comparar el nombre antiguo con el nuevo nombre, y termina sin encontrar una coincidencia para la nueva carpeta (¡aunque el file dentro de él sigue siendo rastreado!).
Un parche muy grosero (escrito abajo) fue escrito para intentar solucionar el problema.
Ahora … para mi caso mínimo, esto funciona: el directory ya no aparece como no rastreado. Pero espero que este sea un parche BROKEN por al less la siguiente razón: la comparación insensible a mayúsculas / minúsculas debería romper la búsqueda binaria, ya que la cubierta debería devolver la position incorrecta si tuviera más files en el índice.

  dir.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/dir.cb/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 

Entonces necesitas hacer lo siguiente:

  • cambie su ' Web ' a ' web ' en su directory de trabajo (sistema de files)
  • O cambie su ' web ' en ' Web ' en el índice ( git mv src/web src/Web ) en su índice.