Git: 忽略子模块中未跟踪的文件

Git: Ignore untracked files in submodule

在我的 git 存储库中,我导入了一些其他项目作为子模块。到目前为止,一切都很好。然而,导入项目的维护者对他们的 .gitignore 文件有点马虎。因此,在构建导入的项目后,git status(在子模块内)列出了大量未跟踪的文件。因此,git status 在我自己的项目中说:

modified:   <submodule> (untracked content)

我的问题是:有什么方法可以告诉 git 忽略这些未跟踪的文件而不修复上游 .gitignore 文件?


我完全知道可能的答案是 "no",而且我看到 告诉我不可能忽略对跟踪文件的更改。这对我来说完全有意义,独立于文件是否在子模块中的问题。但是,我只关心忽略 未跟踪的 文件,所以我认为我的问题有一个很好的解决方案的可能性很小。

UPDATE - 在评论中提出了问题:父回购能否自动分发这些忽略规则。如果您使用我建议的原始方法,据我所知,答案是 "no"。然而,在某些情况下有办法做到这一点(来自Роман Яковский 的回答)...


最灵活的方法是在子模块的 gitdir/info/exclude 文件中添加忽略规则。

cd path/to/parent/repo/.git/modules/module-name/info
vi exclude

添加模式,因为它会出现在子模块回购的 .gitignore 文件中。

您可以通过

确认子模块的gitdir在哪里
cat path/to/parent/repo/submoduledir/.git

这让您可以确切地指定应该忽略的内容;但这种方法的缺点是 gitdir/info/exlcude 不是通过推送或获取传播的,因此必须单独配置每个 repo。

如果你不需要对被忽略的文件如此挑剔 - 例如,如果你可以说 "any worktree changes in the submodule should be ignored" - 那么你可以在模块定义(.gitmodules)中指定一个忽略规则,这当然是承诺工作的一部分。 gitmodules 文档中解释了可能的忽略规则:https://git-scm.com/docs/gitmodules

.gitmodules 中添加 ignore = all 到子模块。
ignore还有更多选项,你可以在git help config中阅读,搜索submodule.<name>.ignore.