2

我有一个 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 但它没有做任何事情。

4

3 回答 3

3

只需添加:

git status --ignore-submodules

问题“如何摆脱 git submodules untracked status? ”提出了一种更永久的方式来掩盖该状态,但如果您暂时隐藏了该信息,--ignore-submodules就足够了。

git status手册页

--ignore-submodules[=<when>]

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

  • 当子模块包含未跟踪或修改的文件或其 HEAD 与超级项目中记录的提交不同时,使用 " none" 将认为子模块已修改,并可用于覆盖 git-config(1) 或 gitmodules(5) 中忽略选项的任何设置)。
  • untracked使用“”时,子模块仅包含未跟踪的内容时不被认为是脏的(但仍会扫描它们以查找修改的内容)。
  • 使用“ dirty”会忽略对子模块工作树的所有更改,只显示对存储在超级项目中的提交的更改(这是 1.7.0 之前的行为)。
  • 使用“ all”隐藏对子模块的所有更改(并在status.submodulesummary设置配置选项时抑制子模块摘要的输出)。
于 2013-08-01T06:27:46.903 回答
2

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

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

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

于 2013-08-26T13:44:27.923 回答
1

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

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

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

git submodule update

这会将其重置为签入到您的存储库的头部 sha。

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

于 2013-08-26T13:49:30.227 回答