.gitignore
文件用于告诉 Git 哪些文件或目录应该被忽略,不纳入版本控制。以下是 .gitignore
文件的简单规则和一些常用的忽略习惯。
.gitignore
基本规则
-
注释和空行
- 以
#
开头的行是注释。 - 空行会被忽略,用于提高可读性。
# 这是一个注释
- 以
-
忽略特定文件或目录
- 直接写文件或目录名即可忽略它们。
debug.log /temp
-
通配符
*
匹配零个或多个任意字符。?
匹配单个任意字符。**
匹配任意目录层级。
*.log # 忽略所有 .log 文件 build/ # 忽略 build 目录及其所有内容 *.DS_Store # 忽略所有 .DS_Store 文件(macOS)
-
否定模式
- 使用
!
来取消忽略某个文件或目录。
*.js !main.js # 忽略所有 .js 文件,除了 main.js
- 使用
-
目录和子目录
- 以
/
结尾表示目录。
/node_modules/ # 只忽略根目录下的 node_modules
- 以
-
转义特殊字符
- 使用
\
来转义特殊字符,如!
、#
等。
\!important.txt # 忽略名为 !important.txt 的文件
- 使用
常用的 .gitignore
忽略项
以下是一些常见的忽略项,适用于大多数项目。你可以根据具体需求进行调整。
操作系统文件
-
macOS
.DS_Store
-
Windows
Thumbs.db ehthumbs.db
-
Linux
通常不需要特殊处理,但可以忽略一些临时文件:
*~
开发工具和IDE文件
-
Visual Studio Code
.vscode/
-
IntelliJ IDEA
.idea/ *.iml
-
Sublime Text
*.sublime-project *.sublime-workspace
编程语言和框架相关
-
Node.js
node_modules/ npm-debug.log* yarn-debug.log* yarn-error.log*
-
Python
__pycache__/ *.py[cod] *.egg *.egg-info/ dist/ build/
-
Java
*.class *.jar *.war *.ear target/
-
Ruby
*.gem .bundle/ log/ tmp/
-
Go
/bin/ /pkg/
构建和发布文件
/dist
/build
/out
日志和临时文件
*.log
*.tmp
*.swp
环境配置文件
通常需要保留环境配置文件的模板,而实际的配置文件则忽略。例如:
.env
!.env.example
创建和编辑 .gitignore
-
创建
.gitignore
文件在项目根目录下创建一个名为
.gitignore
的文件:touch .gitignore
-
编辑
.gitignore
文件使用你喜欢的编辑器打开并添加需要忽略的规则。例如:
# 操作系统文件 .DS_Store Thumbs.db # Node.js 相关 node_modules/ npm-debug.log* # IDE 文件 .vscode/
-
应用
.gitignore
规则如果你已经有一些被忽略的文件被 Git 跟踪了,需要先将它们从缓存中移除:
git rm -r --cached . git add . git commit -m "更新 .gitignore 并移除被忽略的文件"
git rm -r --cached .
这个命令的目的是将当前目录下所有被 Git 跟踪的文件从暂存区中移除,但保留它们在本地工作目录中的实际存在。这一步骤是为了让 Git 重新识别哪些文件应该被跟踪,哪些应该被忽略(根据更新后的 .gitignore 文件)。
另外:
使用 git ls-files
查看当前被 Git 跟踪的文件,确保哪些文件需要被移除或保留。
git ls-files
使用预定义的 .gitignore
模板
GitHub 提供了丰富的 .gitignore
模板,适用于各种编程语言和框架。你可以访问 GitHub’s gitignore repository 获取合适的模板,并根据需要进行调整。
例如,创建一个 Node.js 项目的 .gitignore
:
curl https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore -o .gitignore
!