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子模块更新,但它什么也没有做。

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 

我通过错误地添加一个子模块,而不是仅仅添加一个新目录的内容,而是进入了这个状态。

我只需要像这样删除子模块:

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

然后添加像我打算在第一个地方的内容:

 git add path/to/my/new_directory/*