2010-08-16 2 views
8

Wenn ich ‚git status‘ schlagen, zeigt es zwei Ordner, die Dateien enthält, die vor langer Zeit verfolgt werden:Git unter Windows: Warum habe ich plötzlich ein unverfolgtes Verzeichnis, das früher verfolgt wurde?

wie erwartet
$ 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 zeigt nichts.

Mit portablegit 1.7.1, aber versuchte 1.7.0.2 - die gleichen Ergebnisse.

Was kann das verursachen?


$ 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

[email protected] /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) 

[email protected] /d/work/asdf (master) 
$ git add src/Web/helpers/ 

[email protected] /d/work/asdf (master) 
$ git add src/Web/helpers/* 

[email protected] /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) 

[email protected] /d/work/asdf (master) 
$ 

@Charles

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

+0

Werfen Sie einen Blick auf Ihre .gitignore-Datei. – adamk

+0

@adamk tat ich. was hat sich geändert? :/ –

+0

@Arnis: Es war eine Ahnung, ich denke, es ist nicht ... – adamk

Antwort

13

Charles Bailey diagnostiziert richtig das Problem in den Kommentaren: "git add" auf Groß- und Kleinschreibung Os.

Es ist issue 286 von msysgit verbunden: „Case Sensitity von Verzeichnisnamen“, und die Frage bleibt (auch hier für Verzeichnisse), auch wenn Sie core.ignorecase auf true gesetzt.

Wenn Sie „src\Web“ (mit einem Kapital ‚W‚) hinzufügen, wird es nichts hinzufügen, wenn Ihr Index enthält bereits ‚src\web‘ (kleinen‘w‘).

wurde ein Patch vorgeschlagen, aber abgelehnt:

Der Ordner als untracked aufgeführt zu werden scheint, weil directory_exists_in_index() versucht, den alten Namen in den neuen Namen zu vergleichen und enden nicht ein Spiel für die finden neuer Ordner (obwohl die darin enthaltene Datei nachverfolgt wird!).
Ein sehr unhöflicher Patch (inlined unten) wurde geschrieben, um das Problem zu umgehen.
Jetzt ... für meinen Minimalfall funktioniert das - das Verzeichnis wird nicht mehr als untracked gelistet. Aber ich erwarte, dass dies ein BROKEN-Patch ist, zumindest aus folgendem Grund: Der Vergleich ohne Berücksichtigung der Groß-/Kleinschreibung sollte die binäre Suche unterbrechen, da das Gehäuse die falsche Position zurückgeben sollte, wenn ich mehr Dateien im Index habe.

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 

Sie müssen also:

  • Änderung Ihrer 'Web' in 'web' in Ihrem Arbeitsverzeichnis (Dateisystem)
  • ODER ändern Sie Ihre 'web' in ' Web 'im Index (git mv src/web src/Web) in Ihrem Index.
+0

Für mich ist es in Ordnung, nur zu wissen, dass es Groß- und Kleinschreibung ist. –

Verwandte Themen