2011-11-03 43 views
36

這是我git status「結果是什麼樣子:git submodules與修改和untracked內容 - 爲什麼以及如何刪除它?

# 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) 
# (commit or discard the untracked or modified content in submodules) 
# 
# modified: vim/bundle/pathogen (modified content) 
# modified: vim/bundle/sparkup (untracked content) 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

運行git diff vim表明這一點:

diff --git a/vim/bundle/pathogen b/vim/bundle/pathogen 
--- a/vim/bundle/pathogen 
+++ b/vim/bundle/pathogen 
@@ -1 +1 @@ 
-Subproject commit fcf77f5101f3e589ce006c40ad3a0432735a05cf 
+Subproject commit fcf77f5101f3e589ce006c40ad3a0432735a05cf-dirty 
diff --git a/vim/bundle/sparkup b/vim/bundle/sparkup 
--- a/vim/bundle/sparkup 
+++ b/vim/bundle/sparkup 
@@ -1 +1 @@ 
-Subproject commit 04a81b41f116a19184359a6f8685c192f5c36c70 
+Subproject commit 04a81b41f116a19184359a6f8685c192f5c36c70-dirty 

爲什麼是一個未被跟蹤,其他修改,什麼是差異呢?但最重要的是:它是如何發生的以及如何擺脫它?

+0

這樣的回答:http://stackoverflow.com/a/5127213/199649喚起更多的選擇。 – charlax

回答

41

vim/bundle/pathogen中的一個跟蹤文件已被修改。子模塊vim/bundle/sparkup中還有一些未跟蹤(並且無版權)的內容。在任何一種情況下,找出修改/未被跟蹤的內容的方法是切換到子模塊目錄並運行git status。 (在一個子模塊未跟蹤文件的情況下,這往往是還沒有被添加到.gitignore上游構建產品。)

+14

+1關於「更改到子模塊目錄」! –

+0

+1似乎很明顯,但是這讓我難住了一下。我的子模塊並沒有忽略任何東西,但根回購是。 – bentford

1

由於病原體國在FAQ作者,你可以在全局忽略標籤:

git config --global core.excludesfile '~/.cvsignore' 
echo tags >> ~/.cvsignore 
17

進入子模塊的目錄並確保沒有任何內容(某種輸出)不知道。

cd submoduledir/ 
git status 

如果你看到這裏的任何未跟蹤文件,只是這樣做將其刪除:

git reset --hard HEAD 
git clean -fxd 
+1

我發現即使未被跟蹤的文件實際上並不存在於磁盤上,Git似乎就像是在行爲一樣。我不知道爲什麼發生這種情況,但按照您的示例使用clean命令工作。 –

+2

感謝您刪除.gitignore下的所有內容。現在,我的整個IDE配置和供應商緩存都不存在了。這將刪除所有.gitignore'd –

3

如果你真的確定要只是做它(我的vim管理與捆綁病原體和git子模塊,以及我如何設法在回收站中獲得一些標籤文件夾 - 並且他們只需要去),您可以循環通過子模塊並刪除未跟蹤的文件。

cd YOUR_REPO_WITH_SUBMODULES/ 
git submodule foreach git clean -f -d 

-f給力,-d刪除目錄

你可以在這裏查看文檔:https://git-scm.com/docs/git-clean

相關問題