cma*_*ter 2 git gitignore git-submodules
在我的git repo中,我已经导入了其他项目作为子模块。到目前为止,一切都很好。但是,导入项目的维护者对其.gitignore文件有些草率。因此,在构建导入的项目之后,git status(在子模块中)列出了大量的未跟踪文件。因此,git status在我自己的项目中说:
modified: <submodule> (untracked content)
Run Code Online (Sandbox Code Playgroud)
我的问题是:有什么办法可以告诉您git在不修复上游.gitignore文件的情况下忽略这些未跟踪的文件?
我完全意识到可能的答案是“否”,并且我已经看到了一个SO问题,该问题告诉我不可能忽略对跟踪文件的更改。这对我来说完全有意义,而与文件是否在子模块中无关。但是,我只关心忽略未跟踪的文件,因此我认为有一个很好的解决方案来解决我的问题。
更新 -在评论中出现了一个问题:父仓库可以自动分发这些忽略规则。如果您使用我建议的原始方法,就我所知,答案是“否”。但是,在某些情况下,有一种方法可以做到这一点(来自?????? ????????的回答)...
最灵活的方法是在子模块的gitdir/ info / exclude文件中添加忽略规则。
cd path/to/parent/repo/.git/modules/module-name/info
vi exclude
Run Code Online (Sandbox Code Playgroud)
添加将显示在子模块存储库.gitignore文件中的模式。
您可以通过以下方式确认子模块的gitdir位置
cat path/to/parent/repo/submoduledir/.git
Run Code Online (Sandbox Code Playgroud)
这使您可以准确地指定应忽略的内容。但是这种方法的gitdir缺点是/ info / exlcude不会通过push或fetch传播,因此每个回购协议都必须单独配置。
如果您不需要对被忽略的文件如此挑剔-例如,如果您可以说“应该忽略子模块中的任何工作树更改”-那么您可以在模块定义中指定忽略规则(.gitmodules ),这当然是承诺工作的一部分。gitmodules文档中解释了可能的忽略规则:https ://git-scm.com/docs/gitmodules