2011-05-15 79 views
37

我已經在我的主git文件夾樹中添加了一個子模塊,並沒有改變任何東西,但它顯示出修改。我該怎麼做?git子模塊修改後的文件狀態

$ git status 
# On branch master 
# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: example.com/soundmanager 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

我試過git子模塊更新,但它什麼也沒做。

+3

我遇到了這個時候我有一個混帳回購協議在一個我不知道的子目錄中,這導致了我無盡的困惑。即使我已經將文件添加到父存儲庫,它仍然將目錄列出爲已修改。感謝這個問題 - 很好地解決了問題! – 2011-09-22 17:37:55

回答

56

git子模塊的狀態報告的方式在最近版本的git上已經發生了很大的變化,所以您應該真的包含git --version的輸出,以便我們能夠準確地幫助您。

但是,在任何情況下,git diff example.com/soundmanager的輸出應該告訴你更多。如果你看到的輸出與同犯的名字,但-dirty添加到新的版本,例如:

diff --git a/example.com/soundmanager b/example.com/soundmanager 
--- a/example.com/soundmanager 
+++ b/example.com/soundmanager 
@@ -1 +1 @@ 
-Subproject commit c5c6bbaf616d64fbd873df7b7feecebb81b5aee7 
+Subproject commit c5c6bbaf616d64fbd873df7b7feecebb81b5aee7-dirty 

...比這意味着git status輔助模塊不乾淨 - 嘗試cd example.com/soundmanager,然後git status到看看發生了什麼。

在另一方面,如果你看到不同的提交的版本,例如:

diff --git a/example.com/soundmanager b/example.com/soundmanager 
index c4478af..c79d9c8 160000 
--- a/example.com/soundmanager 
+++ b/example.com/soundmanager 
@@ -1 +1 @@ 
-Subproject commit c4478af032e604bed605e82d04a248d75fa513f7 
+Subproject commit c79d9c83c2864665ca3fd0b11e20a53716d0cbb0 

...這意味着該版本,你的子模塊的(即你從cd example.com/soundmanager && git show HEAD看到)從不同版本在主項目樹中提交(即你從git rev-parse HEAD:example.com/soundmanager看到的內容)。如果是前者是正確的,你應該在你的主要項目中添加並提交子模塊的新版本,喜歡的東西:

git add example.com/soundmanager 
git commit -m "Update the soundmanager submodule" 

在另一方面,如果是後者,你想要什麼,你可以改變版本的子模塊是在用:

git submodule update example.com/soundmanager 
+0

謝謝。 'git version 1.7.0.4' – Poe 2011-05-15 16:31:38

+0

'git diff'確實表示-dirty,並且git status顯示所有文件被修改。感謝您的回答,我擔心修改子模塊並提交它。我添加了+提交的子模塊,並且仍然獲得-dirty。看起來像一條線結束的問題。我走到了路上,'git add。'並得到這些警告的滾動:CRLF將被替換爲LF'我有autocrlf輸入集。 – Poe 2011-05-15 16:41:47

+0

我發現了一個更新版本的git的回購。 'git version 1.7.5.1'安裝好了,不再有這個問題,所以我現在對這個結果感到滿意。 – Poe 2011-05-15 17:27:33

4

我在此狀態下,通過專門添加目錄,而不是僅僅增加一個新的目錄的內容誤添加了子模塊。

我需要的只是刪除這樣的子模塊:

git rm --cached path/to/my/new_directory 

然後添加內容就像我打算在首位:

git add path/to/my/new_directory/*