git:停止警告我子模块的变化

时间:2013-07-31 23:13:03

标签: git git-submodules

我有一个git子模块,即使我从未更新它,也会在git状态下不断显示“已修改”。

# On branch master
# Changes not staged for commit:
#   (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:   MKNetworkKit (new commits, untracked content)
#

如何阻止git思考它?我尝试将MKNetworkKit添加到.gitignore,但它没有做任何事情。

3 个答案:

答案 0 :(得分:3)

只需添加:

git status --ignore-submodules

问题“How to get rid of git submodules untracked status?”提出了一种更永久的方式来屏蔽该状态,但如果您在暂时隐藏该信息后,--ignore-submodules就足够了。

来自git status man page

--ignore-submodules[=<when>]
  

在查找更改时忽略对子模块的更改   <when>可以是“none”,“untracked”,“dirty”或“all”,这是默认设置。

     
      
  • 当子模块包含未跟踪或修改的文件或其HEAD与超级项目中记录的提交不同时,使用“none”将考虑修改子模块,并可用于覆盖git中ignore方法的任何设置config(1)或gitmodules(5)。
  •   
  • 当使用“untracked”时,如果子模块仅包含未跟踪的内容(但仍会扫描修改后的内容),则子模块不会被视为脏。
  •   
  • 使用“dirty”忽略对子模块工作树的所有更改,仅显示存储在超级项目中的提交的更改(这是1.7.0之前的行为)。
  •   
  • 使用“all”隐藏对子模块的所有更改(并在设置配置选项status.submodulesummary时禁止子模块摘要的输出。)
  •   

答案 1 :(得分:2)

在我的情况下,这是因为我将远程存储库协议从git更改为https,因为我的代理服务器策略。所以,我改变了.gitmodule dan .git / config中的引用。然后我运行git submodule initgit submodule update。子模块存储库已成功更新。 : - )

为了匹配子模块的修订,我通过执行cd /path/to/submodulegit checkout -f将每个子模块签出到最新版本。

如果要保留子模块中的更改,但又不想将更改推送到子模块的远程存储库,则可以在.gitmodules中添加ignore = dirty

答案 2 :(得分:1)

您是否有任何理由不希望对存储库中更新的子模块进行本地更改?如果您期望某个特定状态的子模块,但是存储库使其处于较早的状态,则可能会破坏您的代码。

我建议您提交更改并将其推送到您的存储库。

如果要将子模块重置为存储库认为应该处于的状态,请运行:

git submodule update

当您检入存储库时,会将其重置为head sha。

如果您想继续忽略更新的存储库,其他答案很有用。

相关问题