在我的git repo中,我已经导入了一些其他项目作为子模块。到现在为止还挺好。但是,导入项目的维护者对他们的.gitignore
文件有点草率。因此,在构建导入的项目之后,git status
(在子模块中)列出了大量未跟踪的文件。因此,我自己项目中的git status
说:
modified: <submodule> (untracked content)
我的问题是:在没有修复上游git
文件的情况下,有没有办法告诉.gitignore
忽略这些未跟踪的文件?
我完全清楚可能的答案是&#34; no&#34;,我看到this SO question告诉我无法忽略对跟踪文件的更改。这对我来说是完全合理的,与文件是否在子模块中的问题无关。但是,我只关注忽略未跟踪的文件,所以我认为我的问题有一个很好的解决方案。
答案 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
。