📖 知识点
1. 完整提交流程(存档标准动作)
git status # 1. 看状态:有哪些改动
git diff # 2. 看改动内容,确认没问题
git add . # 3. 暂存要提交的文件
git status # 4. 再确认暂存区内容
git commit -m "说明" # 5. 提交存档
git log --oneline # 6. 确认新版本已存档
这六步是日常提交的 "标准动作",养成习惯,存档清晰不混乱。
2. 为什么要忽略文件?
项目里有些文件不该进版本库:
| 文件 | 例子 | 为什么不进 |
|---|---|---|
| 临时文件 | .tmp、~ 后缀 | 没用,浪费空间 |
| 日志 | *.log | 每次变,不该版本管理 |
| 本地配置 | .env、本地密钥 | 各人不同,且含敏感信息 |
| 编译产物 | pycache、node_modules | 能重新生成,不该入库 |
用
.gitignore声明 "这些文件忽略,Git 不跟踪"。
3. 创建 .gitignore
在项目根目录建 .gitignore 文件,写上要忽略的规则:
# 忽略所有 .log 日志文件
*.log
# 忽略 __pycache__ 目录
__pycache__/
# 忽略本地配置(含密钥)
.env
每行一条忽略规则,
*是通配符。
4. 怎么建 .gitignore(echo 或 vim)
echo "*.log" > .gitignore
echo "__pycache__/" >> .gitignore
.gitignore本身通常要提交进仓库,让团队所有人都忽略同样的文件。
⚠️ 易错提醒
.gitignore写好后,被忽略的文件就不会出现在git status里
.gitignore规则用*通配,如*.log忽略所有 log 文件已经被跟踪的文件,.gitignore 不生效(需先移除跟踪,进阶再学)
⚔️ 剧情 Kata 实战任务
任务需求:
模拟创建 "垃圾文件":临时文件、日志、缓存目录
创建
.gitignore,把日志和缓存目录忽略掉用
git add+git commit把 .gitignore 本身提交(团队共享忽略规则)用
git status验证:垃圾文件不再出现(被忽略了)走一遍完整提交流程,确认干净
参考代码(在终端依次敲)
# 0. 进仓库
cd ~/外卖App
# 1. 制造"垃圾文件"
touch 调试.log
mkdir -p __pycache__
touch __pycache__/缓存.pyc
# 2. 创建 .gitignore,忽略日志和缓存
echo "*.log" > .gitignore
echo "__pycache__/" >> .gitignore
# 3. 看看状态:垃圾文件被忽略了吗
git status
# 4. 提交 .gitignore(让团队共享规则)
git add .gitignore
git commit -m "chore: 添加.gitignore忽略日志和缓存"
# 5. 确认干净
git status
git log --oneline
运行示例:
user@linux:~/外卖App$ touch 调试.log
user@linux:~/外卖App$ mkdir -p __pycache__
user@linux:~/外卖App$ echo "*.log" > .gitignore
user@linux:~/外卖App$ echo "__pycache__/" >> .gitignore
user@linux:~/外卖App$ git status
On branch master
Untracked files:
(use "git add <file>..." to include)
.gitignore
user@linux:~/外卖App$ git add .gitignore
user@linux:~/外卖App$ git commit -m "chore: 添加.gitignore忽略日志和缓存"
[master c5d6e7f] chore: 添加.gitignore忽略日志和缓存
user@linux:~/外卖App$ git status
On branch master
nothing to commit, working tree clean
💡 观察:创建了
调试.log和__pycache__后,因为.gitignore里写了规则,git status里看不到它们,只显示.gitignore本身待提交。垃圾文件被成功挡在门外,项目保持干净。
🧠 思考题
哪些类型的文件应该写进
.gitignore?为什么.env(含密钥的本地配置)不能提交进仓库?.gitignore规则里*.log的*表示什么?为什么.gitignore本身也要提交?