首页 > 解决方案 > 排除 git 中的所有内容,除了

问题描述

我有以下文件结构,我想用 git 跟踪和它们的子文件夹,并排除其他所有内容.ddd/zzz.aaa

.aaa/
.aaa/file.txt
.bbb/
.bbb/www
.bbb/www/www
.bbb/www/www/file.txt
.ccc/
.ddd/
.ddd/zzz
.ddd/zzz/file.txt
.eee/

我的.gitignore文件中有这个:

*
!.aaa/
!.ddd/zzz/
.gitignore

然而,当我初始化存储库时,我什么也没有提交

我如何排除除这两个目录及其内容之外的所有内容?

标签: git

解决方案


在尝试了一些配置后,我遇到了解决方案。有我的回购:

# tree -a
.
├── .git/*
├── .gitignore
├── a
│   └── should-be-taken.txt
├── b
│   └── should-be-ignored.txt
└── recursive
    ├── folder
    │   └── should-be-taken.txt
    └── no.txt

我有一个解决方案:

# cat .gitignore
*
!/a
!/a/**
!/recursive
!/recursive/folder
!/recursive/folder/**
!.gitignore

关键是明确否定您不希望在.gitignore文件中忽略的整个文件夹路径。然后**匹配里面的所有东西,cf Git 文档

尾随的 " /**" 匹配里面的所有内容。例如,“ abc/**”匹配目录“ abc”内的所有文件,相对于.gitignore文件的位置,具有无限深度。


编辑:即使我的解决方案仍然有效,gitignore 文档示例中还显示了另一种方法:

排除除特定目录之外的所有内容的示例foo/bar(注意/*- 没有斜杠,通配符也将排除 内的所有内容foo/bar):

# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar

推荐阅读