我有一个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,但它没有做任何事情。
答案 0 :(得分:3)
只需添加:
git status --ignore-submodules
问题“How to get rid of git submodules untracked status?”提出了一种更永久的方式来屏蔽该状态,但如果您在暂时隐藏该信息后,--ignore-submodules
就足够了。
--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 init
和git submodule update
。子模块存储库已成功更新。 : - )
为了匹配子模块的修订,我通过执行cd /path/to/submodule
和git checkout -f
将每个子模块签出到最新版本。
如果要保留子模块中的更改,但又不想将更改推送到子模块的远程存储库,则可以在.gitmodules中添加ignore = dirty
答案 2 :(得分:1)
您是否有任何理由不希望对存储库中更新的子模块进行本地更改?如果您期望某个特定状态的子模块,但是存储库使其处于较早的状态,则可能会破坏您的代码。
我建议您提交更改并将其推送到您的存储库。
如果要将子模块重置为存储库认为应该处于的状态,请运行:
git submodule update
当您检入存储库时,会将其重置为head sha。
如果您想继续忽略更新的存储库,其他答案很有用。