我正在尝试忽略命名目录中的单个文件,但该文件可能位于任何深度。因此,在这样的结构中,我想跟踪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
如果您希望能够排除文件,则应确保从忽略规则中排除文件夹:
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