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

问题描述 投票:2回答:1

我正在尝试忽略命名目录中的单个文件,但该文件可能位于任何深度。因此,在这样的结构中,我想跟踪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
git gitignore
1个回答
1
投票

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

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

这是因为:

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

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

build/**
!build/**/
!build/
!build/.gitkeep
!build/**/build/.gitkeep
© www.soinside.com 2019 - 2024. All rights reserved.