Document Git LFS space maintenance and remove obsolete image checksum

This commit is contained in:
2026-10-04 14:32:07 +08:00
parent c2756ca4d6
commit a277da0f96
7 changed files with 402 additions and 3 deletions
@@ -280,11 +280,21 @@ nmcli -t -f GENERAL.STATE,IP4.ADDRESS,IP4.GATEWAY device show wlan0
## Git 仓库安全验收(`TEST-REPOSITORY-HYGIENE`)
先运行 `python "核桃派软件源代码/scripts/check_repository_hygiene.py"`。确认 Git 候选集合不包含 `测试相关资料/核桃派的用户名和密码和ip/用户名密码ip.txt`,但包含同目录 `.example.txt`、正式 IMG、OTA、离线依赖、编辑器程序和历史归档;`.gitattributes` 可以为大体积二进制配置 LFS filter,卫生检查不得因此失败。检查输出只能包含文件路径和问题类型,不得包含命中的秘密或凭据值。
先运行 `python "核桃派软件源代码/scripts/check_repository_hygiene.py"`。确认 Git 候选集合不包含 `测试相关资料/核桃派的用户名和密码和ip/用户名密码ip.txt` 和任何 `*.img`,但包含同目录 `.example.txt`、镜像发布说明与摘要、OTA、离线依赖、编辑器程序和历史归档;`.gitattributes` 可以为大体积二进制配置 LFS filter,卫生检查不得因此失败。检查输出只能包含文件路径和问题类型,不得包含命中的秘密或凭据值。
在含中文和空格的隔离目录测试 `prepare_credentials.py`:私有文件缺失时逐字复制示例、返回非零并要求用户填写;占位符、空值和缺字段继续失败;填写完整后成功;已有文件在所有路径均保持字节不变。随后检查文本中的 Windows/macOS/Linux 开发者主目录、当前用户名和主机名、私钥头、高可信秘密及非测试归档中的私有 IPv4;对大文件流式检查 ASCII、UTF-8 和 UTF-16LE 主机标识。测试假值、回环地址、硬件地址、设备固定部署路径和正式 IMG README 的公开默认值不得误报。
执行 `git diff --check`、`python -m pytest -q tests/test_repository_hygiene.py tests/test_workspace_layout.py` 和本机 `all` 套件。最终用 `git check-ignore -v` 复核私有文件由根规则命中,并确认 `git status --short --ignored` 只把秘密、本机状态、运行数据和可再生缓存列为忽略项;使用 `git lfs track` 与 `git lfs ls-files` 核对已配置和已暂存的 LFS 对象。本测试不执行 commit 或 push。
执行 `git diff --check`、`python -m pytest -q tests/test_repository_hygiene.py tests/test_workspace_layout.py` 和本机 `all` 套件。最终用 `git check-ignore -v` 复核私有文件由根规则命中,并确认 `git status --short --ignored` 把秘密、本机状态、运行数据、可再生缓存和仓库外发行的 IMG 列为忽略项;使用 `git lfs track` 与 `git lfs ls-files` 核对已配置和已暂存的 LFS 对象。本测试不执行 commit 或 push。
### Git / LFS 本地空间维护
本节仅在需要清理 Git 本地空间时执行,不属于每轮业务测试。先保存 HEAD、暂存区、工作区状态以及本地 LFS 对象的 OID 与大小清单。`git count-objects -vH` 只统计普通 Git 对象,不包含 `.git/lfs/objects`;无引用对象和中断操作的临时残留可用 `git gc` 按默认保留期限清理,执行期间避免其他 Git 写操作。
`*.img` 加入忽略并停止跟踪后,旧提交的 LFS 指针和本地缓存仍可能存在;`git gc` 不清理 LFS 缓存。先用 `git lfs ls-files --all --long --size` 将历史文件映射到 OID,再执行 `git lfs prune --dry-run --verbose --verify-remote --verify-unreachable`。必须核对完整候选 OID 集合及全部候选的远端副本,包括已无引用的对象;候选变化或远端验证失败时停止。非交互输出可能只显示最后一个候选,不能把最后一行当作完整清单;检查候选数、经验证的 OID 集合和本地对象清单。
确认候选都属于可回收的历史本地副本后,执行 `git lfs prune --verify-remote --verify-unreachable`。不使用 `--force`、`--when-unverified=continue`、`git gc --prune=now`,不直接删除 `.git/objects` 或整个 `.git/lfs`。此操作只回收本地副本,不删除工作区文件、远端 LFS 数据或历史指针,也不需要重写历史或强制推送。仍在使用的 OTA、离线依赖与镜像基线文件保持原样。
完成后比对对象清单,确认只有预先核对的候选消失,其余对象大小保持不变;核对 HEAD、已有引用、暂存区和工作区状态,运行 `git fsck --connectivity-only --no-dangling`,统计 `.git` 总体积。连接检查不替代全部内容校验或完整历史恢复测试。一次性清理对象、远端验证结果、前后清单和回收量写入 `各种归档/`,不把具体历史版本当作以后必须删除的固定目标。按影响选测:纯缓存维护与说明修订只做上述 Git 检查、仓库卫生检查和文档差异检查,不触发设备、Android 或全量业务测试。
## Android 0.2.1 界面专项映射