Git 忽略和 .gitignore
Git 忽略
当您与他人共享代码时,通常有一些文件或项目部分您不想共享。
示例
- 日志文件
- 临时文件
- 隐藏文件
- 个人文件
- 等等。
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 | 所有 name 文件夹以及 lib 文件夹中任何 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
相同,但不会显示给任何人。