我正在尝试忽略命名目录中的单个文件,该文件可能在任何深度。因此,在这样的结构中,我想跟踪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
答案 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/**