2011-11-03 1 views
36

これは私のgit status「結果は次のようになります。git diff vimを実行している変更されたコンテンツと非コンテンツを含むgitサブモジュール - なぜ、どのように削除するのですか?

# 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") 

はこれを示しています

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 

人跡未踏1、修正他ではなぜ、diffは何を意味するのでしょうか?しかし、最も重要なこと:それはどうやって起こりましたか、それを取り除く方法ですか?

+0

この答えは:http://stackoverflow.com/a/5127213/199649は、より多くのオプションを連想させる

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

-f

はあなたがここにドキュメントをチェックすることができ、ディレクトリ

を削除するには、-dを強制します。 – charlax

答えて

41

vim/bundle/pathogenの追跡されたファイルの1つが何とか変更されました。サブモジュールには、いくつかの未追跡の(および無視されていない)コンテンツもあります。vim/bundle/sparkup。どちらの場合でも、修正/未修正のものを理解する方法は、サブモジュールディレクトリに変更してgit statusを実行することです。 (サブモジュールで人跡未踏のファイルの場合、これは上流に.gitignoreに追加されていないビルド製品が頻繁にある。)FAQにおける病原体の状態の著者として

+14

+1 ''サブモジュールディレクトリへの変更 '! –

+0

+1は明らかですが、これは少し私を困惑させました。私のサブモジュールは何も無視していませんでしたが、根本的なレポはありました。 – bentford

1

、あなたはグローバルタグを無視することができます

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

は、レポのルートに置かれ.gitmodulesファイル内の各問題のsubmoduleセクションにignore = dirtyを追加します。例:

[submodule "vim/bundle/nerdtree"]            
    path = vim/bundle/nerdtree              
    url = https://github.com/scrooloose/nerdtree.git        
    ignore = dirty 

NilsHのHow to ignore changes in git submodulesで見られるように。 Synchronizing plugins with git submodules and pathogen vimcastのおかげです。

+1

非常に便利です。ありがとう – nouh

17

サブモジュールのディレクトリに移動して、あなたが知っていて何も出力されていないことを確認してください。

cd submoduledir/ 
git status 

あなたがここにすべての人跡未踏のファイルを参照する場合は、単にそれらを削除するには、この操作を行います。あなたはちょうどそれは(私はvimのバンドルを管理していないしたい本当に確信している場合は

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

追跡されていないファイルがディスク上に実際には存在しなかったとしても、Gitはあたかもあたかもあたかもあたかもあたかもあたかも振る舞っているように見えました。なぜこのようなことが起こったのか分かりませんが、あなたの例のようにきれいなコマンドを使用すると効果があります。 –

+2

.gitignoreの下にあったものすべてを削除していただきありがとうございます。今ではIDEの設定とベンダーのキャッシュ全体がなくなりました... N.B.これは.gitignore'dされているすべてを削除します –

3

を病原体とgitのサブモジュールといくつかの私はどのようにreposでいくつかのタグフォルダを取得することができました - そして、彼らはちょうど行く必要がありました)あなたはサブモジュールを通過し、untrackedファイルを削除することができます。 https://git-scm.com/docs/git-clean

関連する問題