Python 现代开发学习笔记

(五)忽略运行文件与统一文本格式

1. 把可以重建的内容留在本机

本例已经提供以下忽略文件;完整开发项目沿用第六章的更多缓存规则:

# 项目文件:starter/.gitignore
# 提交源码和环境记录,环境目录、缓存、运行数据与凭据留在本机。
.venv*/
__pycache__/
*.py[cod]
.pytest_cache/
.ruff_cache/
.mypy_cache/
*.egg-info/
build/
dist/
data/
logs/
.env
.env.*
!.env.example

.gitignore 本身要提交,uv.lock、pyproject.toml 与开发依赖快照也要保留,另一台电脑才有重建环境的依据。小型、自造的测试输入可以放在 tests/fixtures/ 中;日常书目、SQLite 数据库和训练数据则按各自的数据管理方式保存。

# 查明某个路径为什么被忽略;-v 同时显示匹配规则与来源。
git check-ignore -v -- data/library.sqlite3
# 查看已经被 Git 跟踪的文件。
git ls-files

已经提交过的 debug.log 不会因为后来加入忽略规则而停止跟踪。可以先在 .gitignore 加入它,再执行 git rm --cached -- debug.log:这只从下一份提交的索引中移除该文件,磁盘上的文件仍保留。提交之后,历史中以前的版本还在。忽略与已跟踪文件

如果误提交的是有效令牌,先撤销或轮换令牌,再处理仓库记录;删掉当前文件不会让旧提交中的内容消失。模型权重、大型数据与二进制成果可以使用专门存储、Release 附件或 Git LFS;LFS 在提交中保存指针,由配套服务保存实际内容。GitHub 大文件与 LFS

2. 减少换行转换造成的整份差异

同一个 Python 文件在不同系统中反复出现“每行都改过”的差异,可以检查换行与编码。项目用 .gitattributes 统一约定:

# 项目文件:starter/.gitattributes
# 文本按类型识别,常用源码与配置在检出时使用 LF。
* text=auto
*.py text eol=lf
*.md text eol=lf
*.toml text eol=lf
*.yml text eol=lf
*.yaml text eol=lf
*.png binary
*.pdf binary

text 参与文本换行规范化,eol=lf 指定工作目录中的换行;binary 让对应文件按二进制处理。这些属性不把文件自动转为 UTF-8,保存编码仍由编辑器选择。

已有文件要按新属性重新建立索引时,运行 git add --renormalize .,再查看 git diff --cached。它会重新处理已跟踪文件,因此把这次排版与换行变化单独检查、提交,更容易看清后续真正的代码修改。Git attributes

笔记正文与全部题解 · Ctrl / ⌘ K