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

时间:2017-07-10 15:15:05

标签: git git-submodules gitignore

在我的git repo中,我已经导入了一些其他项目作为子模块。到现在为止还挺好。但是,导入项目的维护者对他们的.gitignore文件有点草率。因此,在构建导入的项目之后,git status(在子模块中)列出了大量未跟踪的文件。因此,我自己项目中的git status说:

modified:   <submodule> (untracked content)

我的问题是:在没有修复上游git文件的情况下,有没有办法告诉.gitignore忽略这些未跟踪的文件?

我完全清楚可能的答案是&#34; no&#34;,我看到this SO question告诉我无法忽略对跟踪文件的更改。这对我来说是完全合理的,与文件是否在子模块中的问题无关。但是,我只关注忽略未跟踪的文件,所以我认为我的问题有一个很好的解决方案。

2 个答案:

答案 0 :(得分:5)

更新 - 在评论中出现了问题:父代表可以自动分发这些忽略规则。如果你使用我建议的原始方法,据我所知,答案是“不”。但是,在某些情况下有办法(从РоманЯковский的答案)...

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

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

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

您可以通过

确认子模块gitdir的位置
cat path/to/parent/repo/submoduledir/.git

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

如果您不需要对被忽略的文件如此具有选择性 - 例如,如果您可以说“应忽略子模块中的任何工作树更改” - 那么您可以在模块定义中指定忽略规则(.gitmodules),这当然是承诺工作的一部分。 gitmodules文档中解释了可能的忽略规则:https://git-scm.com/docs/gitmodules

答案 1 :(得分:4)

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