来自parentmodule的.gitignore不适用于子模块?

时间:2014-07-15 00:27:24

标签: git gitignore

SO建议不要删除已回答的问题,因此我会将此留在此处,但请参阅John的答案,该答案解释说明文字中已经有解释。

根据联机帮助页,似乎git命令会在目录层次结构中上升到根目录:

  

从与.gitignore文件相同的目录中读取的模式   路径,或在任何父目录中,具有更高级别的模式   文件(直到工作树的顶层)被这些文件覆盖   在较低级别的文件中,直到包含该文件的目录。

我们的项目有很多git子模块,我希望能够在父模块中使用单个.gitignore,它们可以应用于所有子模块。

但这似乎不起作用。搜索.gitignore是否在存储库根目录停止?我希望我犯了一个错误。

$ git --version
git version 1.8.5.5
$ grep target ../.gitignore # the .gitignore in the parent module
target
**/target/
$ git status --porcelain # feature/target/ matches **/target but is not ignored 
?? feature/target/
?? update-site/target/
$ echo '**/target/' >> .gitignore # add it to submodule repo root
$ git status --porcelain
M .gitignore

1 个答案:

答案 0 :(得分:0)

搜索.gitignore确实在存储库根目录停止。您发布的文档尽可能多地说明了("直到工作树的顶层")。对于子模块,这与任何其他存储库的工作方式不同。

如果您希望在存储库中使用相同的忽略规则,则需要在每个存储库中检查相同的.gitignore,或使用全局忽略规则(但当然这些规则将特定于您的本地计算机;您可以& #39; t检查它们。