2010-08-16 185 views
8

當我打「git的狀態」,它顯示了2個文件夾,其中包含有很久以前跟蹤文件:Git在Windows上:爲什麼我突然有了跟蹤的未跟蹤目錄?

$ 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貝利

[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-樹-r HEAD |在不區分大小寫的OS 「git add」:grep的-i助手
100644一滴843de27f850308786140a7c09f67b5ef99184630 SRC/WEB /助理/ HtmlHelperExtensions.cs

+0

看看你的.gitignore文件。 – adamk 2010-08-16 10:10:42

+0

@adamk我做到了。什麼改變了? :/ – 2010-08-16 10:14:04

+0

@Arnis:這是一種預感,我猜這不是它... – adamk 2010-08-16 10:21:12

回答

13

Charles Bailey正確的診斷意見的問題。

它與msysgit的issue 286:「目錄名稱的案例Sensitity」,而問題仍然(同樣,對於目錄),即使你設置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)中。
+0

對我來說,只要知道區分大小寫就可以。 – 2010-11-04 07:19:04