.gitignore 与 pull request · Git 与 GitHub
团队怎么让仓库保持整洁、安全?
课程目录为什么需要它
仓库是共享的、永久的。密钥、构建产物和日志文件都不该放进去:密钥会泄露,垃圾文件会造成无谓的冲突。团队会约定几个习惯:.gitignore、小分支、清楚的提交说明,以及经过评审的 pull request。
直觉理解
.gitignore 列出 Git 应该当作看不见的文件模式:
.env
*.log
build/被忽略的文件不会出现在 git status 里,git add . 也会跳过它们。(已经提交过的文件仍会被跟踪;之后再忽略也不会把它从历史里去掉。)
团队里一次典型的修改:
git switch -c fix-cart-total- 几次小提交,说明写清楚
git push -u origin fix-cart-total- 在 GitHub 上开一个 pull request;队友评审;CI 跑测试
- 合并,然后删掉分支
定义
.gitignore
A file of patterns for files Git should not track: secrets, logs, build output, dependencies such as node_modules/.一个写着文件模式的文件,列出 Git 不应跟踪的文件:密钥、日志、构建产物、依赖目录(比如 node_modules/)。
拉取请求 Pull request
A request on GitHub (or a similar site) to merge a branch, where teammates review the changes and automated checks run before merging.在 GitHub(或类似网站)上提出的合并某个分支的请求,合并前队友会评审修改,自动检查也会运行。
示例
忽略不该进仓库的东西
在互动课里运行三类绝不能提交的文件。先写好 .gitignore,再全部 add。
git status
echo ".env" > .gitignore
echo "*.log" >> .gitignore
echo "build/" >> .gitignore
git status
git add .
git commit -m "add gitignore"- L1之前:.env、build/app.bin、debug.log 都显示为未跟踪。
- L5之后:只有 .gitignore 本身是新的。
- L6
git add .跳过了被忽略的文件。
给发布打标签
在互动课里运行标签是给某个提交起的固定名字,用来标记发布版本。
git tag v1.0
git tag
git log --oneline- L1v1.0 现在永远指向这个提交。
- L3标签显示在提交旁边。
常见错误
提交之后才忽略
已经提交过的 .env,再加进 .gitignore 也不会从历史里消失。要换掉密钥,并用 git rm --cached .env 停止跟踪它。
巨大的 pull request
两千行的 pull request 只会被扫一眼,不会被认真评审。拆成几个小的,合并更快,也能发现更多 bug。
小测验
1. .gitignore 里哪一行能忽略所有文件夹里以 .log 结尾的文件?
查看答案
答案:A
不带斜杠的模式会在任何位置匹配文件名。
2. 最后一条命令打印什么?
echo "*.log" > .gitignore
git add .
git status查看答案
答案:A
只忽略了 *.log,所以密钥文件 .env 和 build/ 都被暂存了。这正是 .gitignore 要防止的错误。
动手练习
3 道练习,分三层:先预测程序的输出,再按新需求改程序,最后从零写一个。代码在浏览器里运行,提交马上判题。
- 预测输出什么会被提交?
执行完这些命令后,新提交里有哪些文件?
- 改需求别让密钥进仓库
这里会把一切都提交,包括
.env密钥、日志和 build 文件夹。在git add .之前加上.gitignore,让提交里只有.gitignore。 - 从零写为 pull request 做好准备
完成团队流程的前半部分:建分支
fix-total,把app.py改成只有一行print('total fixed'),以fix total为说明提交,再带跟踪(-u)把这个分支推送到 origin。不要提交.env、debug.log或build/。
本课术语
| 术语 | 中文 | 英文定义 |
|---|---|---|
| .gitignore | .gitignore 忽略文件 | A list of file patterns Git should not track. |
| Pull request | 拉取请求 | A reviewed request to merge one branch into another. |
| Tag | 标签 | A fixed name for one commit, often a release like v1.0. |