写在前面
.gitignore
文件在Git
中扮演着关键角色,通常位于项目的根目录。它用于指定哪些文件或目录应排除在版本控制之外,以避免将不必要的文件(如编译生成的中间文件、临时文件、日志文件等)提交到远程仓库中。.gitignore
是一个纯文本文件,每行定义一个忽略规则。规则可以是文件名、路径,或使用通配符模式。以下是.gitignore
文件的一些常见内容和格式示例:
1. 指定文件或者目录的名字
可以直接在.gitignore
文件中指定要忽略的文件或目录名称,每行写一个。例如:
logs # 忽略所有名为 logs 的文件或目录
/logs # 仅忽略根目录下名为 logs 的文件或目录
logs/ # 忽略项目中所有名为 logs 的目录
/logs/ # 仅忽略根目录下名为 logs 的目录
前置斜杠:如果忽略规则的名称前面带有斜杠,表示只忽略根目录下的匹配项。
例如:/logs
仅忽略根目录下名为logs
的文件或目录。后置斜杠:如果忽略规则的名称后面带有斜杠,表示忽略的是指定名称的目录。
例如:logs/
忽略项目中所有名为logs
的目录,但不会忽略同名文件。无斜杠:如果忽略规则的名称前后都没有斜杠,表示忽略整个项目中所有匹配的文件或目录。
例如:logs
忽略项目中所有名为logs
的文件或目录,无论其位置如何。
2. 使用通配符
可以使用通配符来匹配多个文件或目录,常用的通配符有:
*
:匹配零个或多个字符
*.log # 忽略所有以 .log 结尾的文件或目录
temp* # 忽略所有以 temp 开头的文件或目录
logs/* # 忽略名为 logs 的目录下的所有文件与目录,相当于直接忽略 logs 目录
src/*/temp.txt # 忽略名为 src 目录下任意一级子目录中名为 temp.txt 的文件或目录
?
:匹配单个字符
temp?.txt # 忽略名为 temp 开头,跟着一个字符,以 .txt 结尾的文件或目录
file??.log # 忽略名为 file 开头,跟着两个字符,以 .log 结尾的文件或目录
**
:递归匹配任意子目录
config/**/*.txt # 忽略项目中所有 config 目录及其子目录中以 .txt 结尾的文件或目录
**/build/ # 忽略任意目录中的 build 目录,效果等同于 build/
3. 使用!
来取反规则,使本来应该被忽略的文件或目录不再被忽略
!important.log # 搭配 *.log 表示除 important.log 以外的 *.log 文件或目录被忽略
!logs/important/ # 搭配 logs/* 表示保留 logs 目录下的 important 子目录
如果你只想忽略名为logs
的文件,而不忽略名为logs
的目录,可以在.gitignore
文件中这样配置:
logs # 忽略所有名为 logs 的文件或目录
!logs/ # 不忽略名为 logs 的目录
4. 全局.gitignore
Git
还支持全局范围内定义.gitignore
规则,这样可以在所有Git
项目中应用相同的忽略规则,而无需在每个项目中单独配置.gitignore
文件。我们创建一个.gitignore_global
文件,建议将其放在~
目录(当前用户主目录)下,当然也可以放在其他任何位置。然后在这个文件中添加我们想要忽略的文件或目录的规则,例如:
.DS_Store
__MACOSX/
._*
.idea/
接下来需要告诉Git
这个全局文件的位置,执行以下命令(这里假设文件放到了~
目录下):
git config --global core.excludesfile ~/.gitignore_global
在配置后,所有Git
项目中都会自动应用.gitignore_global
文件中的规则,以忽略匹配的文件或文件夹。这样,无需在每个项目中单独维护.gitignore
文件,简化了管理过程。
The end.