当前位置: 首页 > news >正文

Git Ignore

1. 这篇文章解决什么问题?

一个 C++ 后端项目里,经常会产生很多不应该提交到 Git 仓库的文件。

例如:

编译产物 临时文件 IDE 配置 本地环境文件 日志文件 第三方依赖缓存

如果这些文件都被提交,会带来很多问题:

1. 仓库变大 2. diff 里充满无关内容 3. 不同机器的本地配置互相污染 4. 编译产物和源码混在一起 5. 有泄露本地路径或密钥的风险

这篇只讲.gitignore的使用习惯。


2. .gitignore 是什么?

.gitignore是一个普通文本文件,用来告诉 Git:

哪些未跟踪文件不需要出现在 git status 里 哪些文件不应该被 git add 自动加入仓库

例如:

build/ *.log .env

表示:

忽略 build 目录 忽略所有 .log 文件 忽略 .env 文件

注意这里有一个关键词:

未跟踪文件

.gitignore对已经被 Git 跟踪的文件不会自动生效。


3. 最常见的忽略规则

忽略某个文件:

.env

忽略某个目录:

build/

忽略某种后缀:

*.o *.log

忽略任意层级下的某个目录:

.cache/

取消忽略某个文件:

*.conf !important.conf

其中!表示反向规则。


4. 路径规则怎么理解?

假设项目结构是:

project/ .gitignore build/ src/ logs/

如果.gitignore里写:

build/

表示忽略项目根目录下的build目录。

如果写:

*.log

表示忽略任意目录下的.log文件。

如果写:

/logs/

开头的/表示从.gitignore所在目录开始匹配。

大多数个人项目里,不需要把规则写得太复杂,先覆盖常见产物即可。


5. C++ 项目通常应该忽略什么?

C++ 项目最常见的是编译目录和中间产物:

build/ cmake-build-*/ CMakeFiles/ CMakeCache.txt compile_commands.json Makefile *.o *.obj *.a *.so *.dll *.dylib *.exe

其中:

build/ 常见 out-of-source build 目录 cmake-build-*/ CLion 常见构建目录 CMakeFiles/ CMake 内部目录 CMakeCache.txt CMake 缓存 compile_commands.json 编译数据库,有些项目会选择保留

compile_commands.json是否忽略要看项目习惯。

如果团队希望给 clangd 使用统一编译数据库,也可以不忽略,或者用软链接方式处理。


6. IDE 和编辑器文件

不同编辑器会生成自己的配置。

常见规则:

.vscode/ .idea/ *.swp *.swo .DS_Store

但这里要稍微谨慎。

例如.vscode/settings.json有时可能包含团队共享配置,有时又只是个人机器配置。

比较稳的做法是:

项目通用配置可以提交 个人本地配置不要提交

如果不确定,先不要把整个目录一股脑提交进仓库。


7. 日志、缓存和临时文件

常见规则:

*.log logs/ .cache/ tmp/ temp/

这些文件通常有几个特点:

会频繁变化 对别人复现项目没有帮助 容易让 git diff 变得很吵

如果某个目录需要保留结构,但不提交里面的内容,可以这样写:

logs/* !logs/.gitkeep

然后提交一个空的:

logs/.gitkeep

这样仓库里能保留目录,运行时日志文件又不会被提交。


8. 敏感信息一定不要提交

下面这些文件通常应该忽略:

.env .env.local *.pem *.key *.crt

原因很简单:

它们可能包含数据库密码 API token 私钥 本地服务地址 个人账号配置

如果需要给别人参考配置格式,更推荐提交模板文件:

.env.example config.example.yaml

模板里只放占位内容:

DB_HOST=127.0.0.1 DB_PASSWORD=change_me

不要把真实密码写进去。


9. 为什么 .gitignore 对已提交文件没生效?

这是新手最常见的问题。

如果某个文件已经被 Git 跟踪,例如:

config/local.yaml

后来你在.gitignore里加:

config/local.yaml

它仍然会出现在git status中。

原因是:

.gitignore 只阻止未跟踪文件进入 Git 不会让已经被跟踪的文件自动退出 Git

这时需要执行:

gitrm--cachedconfig/local.yaml

含义是:

从 Git 暂存区和后续版本管理中移除 但保留本地工作区文件

然后提交:

gitadd.gitignoregitcommit-m"chore(git): ignore local config"

10. git rm --cached 和 rm 的区别

普通删除文件:

rmconfig/local.yaml

表示:

从本地磁盘删除文件

而:

gitrm--cachedconfig/local.yaml

表示:

让 Git 不再跟踪这个文件 但文件仍然留在本地目录里

所以处理“已经提交过,但以后不想跟踪”的配置文件时,通常用git rm --cached


11. 检查某个文件为什么被忽略

如果你不知道某个文件为什么被忽略,可以执行:

gitcheck-ignore-vpath/to/file

它会告诉你是哪条规则匹配了这个文件。

例如:

.gitignore:12:build/ build/server

表示:

.gitignore 第 12 行的 build/ 规则忽略了 build/server

这个命令很适合排查.gitignore写多了之后的困惑。


12. 一个适合 C++ 后端项目的示例

可以从下面这个版本开始:

# Build output build/ cmake-build-*/ CMakeFiles/ CMakeCache.txt Makefile # Object and binary files *.o *.obj *.a *.so *.dll *.dylib *.exe # Logs and runtime files *.log logs/ tmp/ # Local environment .env .env.local *.pem *.key # Editor and OS files .vscode/ .idea/ *.swp *.swo .DS_Store

然后根据项目真实情况慢慢调整。

.gitignore不需要一开始就写得特别完美,关键是不要把明显不该进仓库的东西提交进去。


13. 一句话总结

.gitignore用来阻止未跟踪文件进入仓库,最适合忽略编译产物、日志、缓存、本地配置和敏感信息。

如果文件已经被 Git 跟踪,单独写进.gitignore不够,还需要git rm --cached让它退出版本管理。

http://www.jsqmd.com/news/813987/

相关文章:

  • 终极Flash浏览器指南:如何在现代浏览器中畅玩经典Flash游戏
  • 从怀疑到真香!用了半年我只留下这一个,2026把录音转文字的app真的太好用了
  • 5分钟掌握RePKG:Wallpaper Engine资源提取与格式转换的终极秘籍
  • Claude API智能代理网关:架构设计、部署与生产实践
  • AGENTS.md:为AI编码助手定制的项目说明书,提升人机协作效率
  • 保姆级教程:Ubuntu 18.04下Mellanox ConnectX-3 IB网卡从驱动安装到IP配置全流程(解决ibstat状态异常)
  • XUnity.AutoTranslator完整指南:让外语游戏瞬间变中文的免费神器
  • 支持多渠道的语音机器人 2026 企业选型攻略:智能核心引擎
  • Gemini Pro私有知识库接入终极方案:RAG+微调双路径落地(含向量分块策略、重排序阈值、LLM幻觉抑制三重校验)
  • 微服务安全实践:Trust-Gate-Plugin 插件实现去中心化服务间认证与授权
  • 轻量级容器场景下 Docker 与 LXC 性能开销对比测试数据参考
  • 从第一大道的突围,到《凰标》的安稳立界@凤凰标志
  • OBS Multi RTMP插件深度解析:多平台直播的完整实战手册
  • QMCDecode终极指南:一键解锁QQ音乐加密音频的完整解决方案
  • 第一大道写传奇人生,《凰标》写文明传承根脉@凤凰标志
  • AI智能体集成Discourse社区:OpenClaw插件配置与自动化实践
  • WSA Toolbox:Windows 11上5分钟搭建Android应用生态的终极指南
  • 宇宙可能无限大 这个确实不需要外部容器,但是有限但无边界这个绝对需要更高维度
  • 前端项目启动报错常见错误总结
  • 若依框架 + AI 智能体:一个全栈开发者的落地实战与踩坑记录
  • VSCode代码搜索插件:复杂项目中的精准定位与效率提升
  • 大模型落地指南:手把手教你开发垂直AI Agent,小白也能掌握(收藏版)
  • 基于Next.js urborepo的企业级电商全栈架构实战解析
  • Windows远程桌面解锁终极指南:RDP Wrapper完整使用教程
  • 铁哥双作同辉,《第一大道》与《凰标》惊艳文坛@凤凰标志
  • 终极指南:如何在Blender中轻松处理3MF文件
  • 索尼 Xperia 1 VIII 外观大改,长焦镜头升级,却放弃连续光学变焦?
  • GHelper实战指南:华硕笔记本性能优化的终极解决方案
  • Python统一AI模型调用:python-tgpt轻量级库实战指南
  • 海棠山铁哥:真迹亲传四大道场,圆满兑现燕南赵北把金散