Go项目中必须加入.gitignore的文件包括bin/、dist/、.exe、.out、*.test、pkg/、.vscode/、.idea/、coverage.out等编译产物、模块缓存和IDE生成文件,而go.mod、go.sum和vendor/(若启用)必须提交。

Go项目里哪些文件必须加进 .gitignore
Go 编译产物、模块缓存、IDE 生成文件这三类不进 Git,是硬性规则。否则会污染仓库、引发协作冲突或泄露本地路径信息。
常见错误现象:go build 生成的二进制文件被提交;go mod download 下载的包缓存在 pkg/ 下被误提交;VS Code 的 .vscode/ 或 GoLand 的 .idea/ 被推到远程。
-
bin/、dist/:放构建输出的目录,Go 默认不建,但很多项目脚本会用 -
*.exe、*.out、*.test:Windows/Linux/macOS 下的可执行后缀 -
pkg/:Go 工具链存放编译中间产物的目录,绝对不能提交 -
go.sum必须提交,但go.mod更新后要同步更新它,不是忽略项
Go module 相关文件要不要忽略
go.mod 和 go.sum 都必须提交,它们定义了依赖的精确版本和校验值。忽略其中任何一个,CI 构建就会失败或产生不可重现的结果。
容易踩的坑:go.sum 文件有时会被 IDE 自动删掉(比如某些 Go 插件清理“无用文件”时误判),或者开发者手动编辑后没运行 go mod tidy 就提交,导致校验失败。
立即学习“go语言免费学习笔记(深入)”;
- 新增依赖后,务必运行
go mod tidy,再检查go.sum是否有新增/变更行 - 如果 CI 报错
verifying github.com/xxx@v1.2.3: checksum mismatch,大概率是go.sum没同步或被篡改 -
vendor/目录:启用go mod vendor后才存在,若使用 vendor 方式构建,它应被提交;否则建议忽略(加vendor/到.gitignore)
不同 IDE 和工具生成的文件怎么处理
Go 本身不生成 IDE 特定文件,但开发环境会。这些文件路径和格式因工具而异,统一按工具名归类忽略最稳妥。
典型场景:团队里有人用 VS Code,有人用 Goland,各自生成的配置文件如果进了 Git,会频繁触发无关 diff,还可能带入本地 token 或路径。
- VS Code:
.vscode/、.env(除非是项目共享的环境模板,否则别提交) - GoLand / IntelliJ:
.idea/、*.iml - 测试覆盖率或分析工具:
coverage.out、profile.out、pprof/ - 临时调试文件:
debug、tmp/、*~(vim 交换文件)
为什么不用 **/*.go 这类通配符忽略源码
有人图省事写 **/*.go,结果整个项目源码都不见了——Git 会真按规则跳过所有 .go 文件,连 main.go 都不会跟踪。
根本原因:Git 的 .gitignore 是路径匹配,不是类型过滤。Go 源码是核心资产,必须显式保留,靠排除法反而危险。
- 正确做法是“默认全部跟踪,只排除明确不需要的”,即不写任何
*.go相关规则 - 如果想忽略某个特定子目录下的 Go 文件(比如
examples/下的临时 demo),写examples/*.go,而不是全局通配 - 用
git check-ignore -v main.go可快速验证某文件是否被意外忽略
最常被忽略的一点:.gitignore 修改后,已跟踪的文件不会自动退出索引。比如之前提交过 bin/server,后来加了 bin/ 到 ignore,它还在 Git 里——得手动 git rm --cached bin/server 才行。










