Git Ignore 和 .gitignore
Git Ignore
当您与其他人员共享代码时,通常会有一些文件或项目的一部分您不希望共享。
示例
- 日志文件
- 临时文件
- 隐藏文件
- 个人文件
- 等等。
Git 可以使用 `.gitignore` 文件指定哪些文件或项目部分应被 Git 忽略。
Git 不会跟踪 `.gitignore` 中指定的文件和文件夹。但是,`.gitignore` 文件本身**会被** Git 跟踪。
创建 .gitignore
要创建 `.gitignore` 文件,请转到本地 Git 的根目录并创建它。
示例
touch .gitignore
现在使用文本编辑器打开该文件。
我们只添加两个简单的规则:
- 忽略所有具有 `.log` 扩展名的文件。
- 忽略名为 `temp` 的任何目录中的所有文件。
示例
# 忽略所有 .log 文件
*.log
# 忽略名为 temp 的任何目录中的所有文件
temp/
现在,所有 `.log` 文件以及 `temp` 文件夹中的任何内容都将被 Git 忽略。
注意: 在这种情况下,我们使用一个 `.gitignore` 文件,该文件适用于整个存储库。
也可以在子目录中使用额外的 `.gitignore` 文件。这些文件仅适用于该目录内的文件或文件夹。
.gitignore 文件规则
以下是匹配 `.gitignore` 文件中模式的一般规则:
模式 | 解释/匹配 | 示例 |
---|---|---|
空白行将被忽略。 | ||
# 文本注释 | 以 # 开头的行将被忽略。 | |
name | 所有名为 `name` 的文件、名为 `name` 的文件夹,以及任何名为 `name` 的文件夹中的文件和文件夹。 | /name.log /name/file.txt /lib/name.log |
name/ | 以 / 结尾表示该模式是针对文件夹的。匹配任何名为 `name` 的文件夹中的所有文件和文件夹。 | /name/file.txt /name/log/name.log 不匹配 /name.log |
name.file | 所有名为 `name.file` 的文件。 | /name.file /lib/name.file |
/name.file | 以 / 开头表示该模式仅匹配根文件夹中的文件。 | /name.file 不匹配 /lib/name.file |
lib/name.file | 指定特定文件夹中文件的模式始终是相对于根目录的(即使您没有以 / 开头)。 | /lib/name.file 不匹配 name.file /test/lib/name.file |
**/lib/name.file | 以 ** 开头,然后是 /,表示它匹配存储库中的任何文件夹,而不仅仅是根目录。 | /lib/name.file /test/lib/name.file |
**/name | 所有名为 `name` 的文件夹,以及任何名为 `name` 的文件夹中的文件和文件夹。 | /name/log.file /lib/name/log.file /name/lib/log.file |
/lib/**/name | 位于 `lib` 文件夹内的所有名为 `name` 的文件夹,以及任何名为 `name` 的文件夹中的文件和文件夹。 | /lib/name/log.file /lib/test/name/log.file /lib/test/ver1/name/log.file 不匹配 /name/log.file |
*.file | 所有扩展名为 `*.file` 的文件。 | /name.file /lib/name.file |
*name/ | 所有以 `name` 结尾的文件夹。 | /lastname/log.file /firstname/log.file |
name?.file | ? 匹配**单个**非特定字符。 | /names.file /name1.file 不匹配 /names1.file |
name[a-z].file | [范围] 匹配指定范围内的**单个**字符(在此示例中,为 a-z 范围内的字符,也可能包含数字)。 | /names.file /nameb.file 不匹配 /name1.file |
name[abc].file | [集合] 匹配指定字符集中的**单个**字符(在此示例中,为 a、b 或 c)。 | /namea.file /nameb.file 不匹配 /names.file |
name[!abc].file | [!集合] 匹配**除**指定字符集(在此示例中为 a、b 或 c)之外的**单个**字符。 | /names.file /namex.file 不匹配 /namesb.file |
*.file | 所有扩展名为 `*.file` 的文件。 | /name.file /lib/name.file |
name/ !name/secret.log |
! 表示否定或排除。匹配任何名为 `name` 的文件夹中的所有文件和文件夹,除了 `name/secret.log`。 | /name/file.txt /name/log/name.log 不匹配 /name/secret.log |
*.file !name.file |
! 表示否定或排除。所有扩展名为 `*.file` 的文件,除了 `name.file`。 | /log.file /lastname.file 不匹配 /name.file |
*.file !name/*.file junk.* |
在否定之后添加新模式将重新忽略之前被否定的文件。 所有扩展名为 `*.file` 的文件,除了 `name` 文件夹中的文件。除非文件名是 junk。 |
/log.file /name/log.file 不匹配 /name/junk.file |
本地和个人 Git 忽略规则
也可以忽略文件或文件夹,但不在分布式的 `.gitignore` 文件中显示。
这些类型的忽略规则指定在 `.git/info/exclude` 文件中。它的工作方式与 `.gitignore` 相同,但不会显示给其他人。