Git 忽略跟踪的文件

忽略规则

首先你需要在项目根目录下新建一个 .gitignore 文件

  • 空格不匹配任何文件,可以作为分隔符号
  • # 开始的为注释
  • \ 表示转义符
  • ! 开始的表示否定,也就是开启跟踪
  • / 开始的表示项目根目录
  • / 结尾的表示某个文件夹,但是不匹配该文件
  • ** 表示多级,其位置可在开始,中间,结束
  • ? 表示单个字符
  • [] 表示单个字符列表

忽略示例

1. 文件

# 忽略 所有 a.txt 文件
a.txt
# 仅忽略根目录下的 a.txt 文件
/a.txt
# 忽略 config 目录下的 secret.json
config/secret.json
# 忽略 所有的 .env 结尾的文件
*.env

2. 目录

# 忽略 node_modules 目录
node_modules/

3. 取反

# 跟踪 public 目录下的 .env 文件
!public/.env

4. 组合

# 忽略 docs 下的所有 .md 文件
docs/*.md # 这是错误的,因为不能忽略 `docs/git/` 目录下的文件
docs/**/*.md # 正确结果

# 忽略以 .a 、.b 或 .c 结尾的文件
*.[abc] # 正确
*.[a-c] # 也正确

# 忽略 docs 下的除 secret 命名的所有文件
docs/
!docs/secret.*

## 忽略 src 下的所有 index.js 文件
src/**/index.js

规则不生效

.gitignore 指定的是未跟踪文件,已经跟踪的(tracked)不受影响。

解决方法就是清除本地缓存再提交:

git rm --cached

# 示例 -- 取消某个文件
git rm --cached a.txt
# 示例 -- 取消某个文件夹
git rm -r --cached a/
# 示例 -- 取消所有文件
git rm -r --cached .