Git 到底跟踪谁?
做智慧衣橱这个仓库的时候,我慢慢分清了:什么该进版本库、什么只该留在自己电脑上。
.env、local.properties这类文件要是误传上去,轻则被路径坑队友,重则有密钥进远程历史。这篇是边做边查、踩过坑后整理的备忘,也写给以后回头看。
Git 仓库初始化
此处仅列出代码,不做赘述。
# 在工程根目录执行 git init git add . git commit -m "chore: initial commit" # 首次关联远程并推送(按需) git remote add origin <仓库地址> git branch -M main git push -u origin main# 已有远程时:克隆 git clone <仓库地址>1. 一开始没想清楚的地方
| 类型 | 常见文件 | 为什么不该随便提交 |
|---|---|---|
| 环境变量 | .env、各种.env.xxx | 里往往是数据库、API 密钥,一旦进远程,即使删文件历史里还可能留着 |
| 本机专用 | Android 的local.properties等 | 全是我这台机器的路径、SDK 位置,别人机器不一样,传上去也没意义 |
| 可再生成的 | .venv/之类 | 又胖又没版本价值,拉代码的人自己建环境即可 |
记忆:仓库里尽量只放「不含真密码」的样例(比如.env.example),真值在本地自己配,或交给 CI/部署环境去注入。
2..gitignore要怎么写
根目录的.gitignore是「第一道门」。我在本仓库里是这样理解这些写法的(路径按你项目自己改):
# 环境变量(先拦常见的) .env .env.* !.env.example # 子项目里单独有的话也写上,比如后端 backend/.env.env/.env.*:先粗暴忽略,再用!.env.example把「给队友看的空壳」加回来。backend/.env:我们后端在子目录,多写这一行,我就不会漏。
Android 这边老师傅都会说local.properties别进库,我项目里也记了一笔:
SmartWardrobe/local.properties每人在 Android Studio 里生成本地一份就行,和 Git 各管各的。
3. 踩过的坑:只改 ignore 有时不够
如果某个文件已经被git add过,后来我才把它写进.gitignore,Git 可能还会继续跟踪它。我学到要用git rm --cached只从索引里拿掉、本地文件还在:
git rm --cached -- .env # 或 git rm --cached -- backend/.env然后再提交一版,把 ignore 的改动也一起交上去。我当时用的流程大概是:
git add .gitignore git commit -m "chore: stop tracking env and respect gitignore" git push心里要有数:如果密钥真的曾经 push 出去过,光删文件不够安全,能轮换的 key 要轮换;大团队还会用git filter-repo清历史,这个我没在自己小项目上折腾,只记个概念。
4. 建议
- 仓库里放一份
.env.example,只写变量名和假占位,README 或运行说明.md里写:复制成.env再自己填。 - 尽量不用
git update-index --assume-unchanged长期「假装不跟踪」来偷懒,正规还是用.gitignore省事、也好解释给别人听。
仓库联调方式可以对照运行说明.md里关于local.properties、后端的那些说明,算是对同一套习惯的文字备份。
5. 对照:根目录的.gitignore里已经有什么
整理笔记时,根目录里已经有类似:
backend/.envSmartWardrobe/local.properties
以后要是在别的目录也加了密钥类文件,要回来补一行——避免子路径漏掉。
6. 小实验:根目录docs/分两步测.gitignore
步骤一(docs/先不写进 ignore):根下建docs/,内放两个.md,git add→commit→push,确认远程可见——文档能进库。
步骤二(根.gitignore增加docs/):再新建或修改.md,git status/git add:未跟踪文件进不了暂存区;步骤一已提交的两个仍在索引里、会被继续跟踪——若要停跟踪,用第 3 节git rm --cached,不能只靠 ignore。
分两步可对照:「能入库」与「整目录规则生效后,新文件被拦、旧已跟踪需另解绑」。
小结
- 先想清:秘密和本机路径,默认不进远程。
.gitignore+ 必要时git rm --cached,是重复用的组合。- 命令和习惯以本机、Git 2.x 为准,换路径别照抄到懵。
—— 项目开发过程中的个人学习记录,不当作唯一权威说明;具体以当前分支上的.gitignore和团队规范为准。