.gitignore仅跟踪目录中任意深度的一个文件

时间:2020-06-09 03:01:34

标签: git gitignore

我正在尝试忽略命名目录中的单个文件,该文件可能在任何深度。因此,在这样的结构中,我想跟踪build / .gitkeep的任何出现,但忽略build /中和之下的所有其他文件。要跟踪的项目用++标记。要忽略的项目标有-。

    |.gitignore                               ++
    |Makefile                                 ++
    |--build/                                 ++
    |--build/.gitkeep                         ++
    |--build/ignore_any_file                  --
    |--build/ignore_any/dir                   --
    |--foo/                                   ++
    |--foo/file_to_keep                       ++
    |--foo/dir_to_keep/                       ++
    |--foo/dir_to_keep/stuff                  ++
    |--foo/build/                             ++
    |--foo/build/.gitkeep                     ++
    |--foo/build/ignore_any_file              --
    |--foo/build/ignore_any/dir               --
    |--foo/build/ignore_any/dir/subir         --
    |--bar                                    ++
    |--bar/file_to_keep                       ++
    |--bar/dir_to_keep/                       ++
    |--bar/dir_to_keep/stuff                  ++
    |--bar/build/                             ++
    |--bar/build/.gitkeep                     ++
    |--bar/ignore_any_file                    --
    |--bar/ignore_any/dir                     --
    |--bar/ignore_any/dir/subir               --
    |--foobar/foo                             ++
    |--foobar/foo/file_to_keep                ++
    |--foobar/foo/dir_to_keep/                ++
    |--foobar/foo/dir_to_keep/stuff           ++
    |--foobar/foo/build/                      ++
    |--foobar/foo/build/.gitkeep              ++
    |--foobar/foo/build/ignore_any_file       --
    |--foobar/foo/build/ignore_any/dir        --
    |--foobar/foo/build/ignore_any/dir/subir  --

我尝试了很多组合。对我来说,最难的是似乎在任何深度都有build /。我试图避免必须为build /存在的每个路径创建条目。我也不想在build /的每个实例中创建.gitignore文件。

    $ git --version
    git version 2.20.1

1 个答案:

答案 0 :(得分:4)

如果您希望能够排除文件,则应确保从忽略规则中排除文件夹

build/**
!build/**/
!build/**/.gitkeep

这是因为:

It is not possible to re-include a file if a parent directory of that file is excluded

根据您的情况(在任意深度构建)

**
!**/
!build/.gitkeep
!**/build/.gitkeep

OP nelsonov通过以下方式使其起作用(in the comments):

build/** 
!build/**/ 
!build/ 
!build/.gitkeep 
!**/build/ 
!**/build/.gitkeep 
**/build/**
相关问题