我有一个包含.gitignore以下内容的文件:
*
!/.gitignore
!CMakeLists.txt
!*.cpp
!*.hpp
根据这个想法,它应该允许添加:
- 本身
.gitignore在存储库的根目录, - 任何文件
CMakeLists.txt夹和子文件夹中的文件, - 格式文件
.cpp以及.hpp任何文件夹和子文件夹中,
并禁止其他一切。
但是,许可规则只影响位于存储库根目录的文件。这在原则上是合乎逻辑的:
规则格式
- 可选前缀“!”,反转规则的动作;任何匹配它并被上述规则排除的文件都将被包括回来。如果文件位于已排除的文件夹中,则无法包含该文件。Git 不会出于优化目的查看排除文件夹的内容,因此规则不适用于它们的内容。
图案格式
- 一个可选的前缀“!” 这否定了模式;先前模式排除的任何匹配文件将再次包含在内。如果排除了该文件的父目录,则无法重新包含该文件。出于性能原因,Git 不会列出排除的目录,因此包含文件的任何模式都无效,无论它们在何处定义。
也就是说,排除所有子文件夹的第一条规则实际上使下面的允许规则无效。
问题:我应该如何正确地只包含具有特定扩展名的文件,而不考虑它们的位置和嵌套级别?
你可以这样做:
添加了几个更常见的 git 配置文件。
很可能需要设置一个规则来指定 ** 目录。
例如