不,您无需将子模块添加到
.gitignore
中:父级将从您的子模块中看到一个
gitlink(一个
特殊条目,mode 160000
)。
这意味着:直接在子模块中进行的任何更改都需要在父目录中跟随提交。
这样,父目录将记录子模块状态的正确提交:该提交是上述"gitlink"。
您可以在 "
git submodule update (true nature of submodules)" 中了解更多关于此策略的信息。
子模块背后的主要思想是
基于组件的方法,其中您引用其他存储库的特定提交。但是,如果您更改这些子模块中的任何内容,则还需要在父存储库中更新这些引用。
请注意,从Git 2.13(2017年第二季度)开始,虽然不会忽略gitlink,但您仍然可以使用以下方法忽略子模块:
git config submodule.<name>.active false
请查看 "忽略git子模块的新提交" 以获取更多信息。
注意:从Git 2.15.x/2.16(2018年第一季度)开始,忽略子模块更加精确。"
git status --ignored --untracked
"不会停在嵌套在被忽略的目录中的另一个项目的工作树上,并列出该项目中的文件,而只显示被忽略的目录本身。请参见
commit fadb482 (2017年10月25日) by
Johannes Schindelin (dscho
)。
(由Junio C Hamano -- gitster
--合并于commit da7996a,2017年11月6日)
状态
:不要被排除目录中的子模块搞混
我们将exclude
标志详细传递给treat_directory()
函数,以便在递归时指示其中的文件被排除而不是未跟踪。
但我们还没有以同样的方式处理子模块。
因此,在被Git忽略的tracked/
中有一个名为submodule
的子模块时,git status --ignored --untracked
会在"Untracked files
"部分显示该子模块。
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
tracked/submodule/
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
tracked/submodule/initial.t
相反,我们希望它在“
忽略的文件
”部分中显示子模块:
On branch master
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
tracked/submodule/