Skip to content

Git 与代码协作

Git 的价值不是“备份代码”,而是让每次改动有来源、目的、审查和恢复路径。数据、权重与生成日志则应按体积和生命周期进入更合适的存储。

Git

bash
git init
git status
git diff
git add src/train.py tests/test_train.py
git diff --cached
git commit -m "feat(training): add checkpoint resume"

提交前依次看 git status、工作区差异和暂存区差异。一次提交只包含一个可独立撤销的结果;不要混入密钥、环境文件、数据集、权重和无关格式化。

Branch、Worktree 与 Stash

分支表达独立变化,worktree 让分支同时出现在不同目录:

bash
git switch -c feat/new-baseline
git worktree add ../project-ablation -b exp/ablation
git worktree list
git worktree remove ../project-ablation

并行 Agent 更适合使用不同 worktree,而不是在同一目录频繁切分支。git stash push -u -m 'temporary experiment' 可临时收起修改,但 stash 不应成为长期存档。

Rebase、Tag 与 Conventional Commits

在自己的未共享分支上 rebase 可以整理提交;已共享历史不要随意改写。Tag 用于标记论文结果、Release 或可复现版本:

bash
git fetch origin
git rebase origin/main
git tag -a v1.0.0 -m "camera-ready release"
git push origin v1.0.0

Conventional Commits 使用 featfixdocstestrefactor 等前缀表达目的。它是沟通约定,不应掩盖含糊的提交范围。

Git LFS

Git LFS 在 Git 中保存指针,把实际大文件放入 LFS 存储:

bash
git lfs install
git lfs track '*.safetensors'
git add .gitattributes

它适合必须与代码版本绑定、数量有限的大文件;大型数据集、频繁变化的 Checkpoint 和海量日志通常更适合对象存储或模型 Hub。开始使用前确认托管平台的容量和流量规则。

GitHub

仓库至少应明确 README、许可证、环境安装、数据获取、训练入口、评估入口和结果复现方式。保护主分支,通过 Pull Request 审查改动;Issue 记录可验证的问题或任务,而不是取代项目文档。

GitHub CLI

bash
gh repo clone owner/project
gh pr create --fill
gh pr checks
gh run watch
gh release create v1.0.0 --generate-notes

CLI 适合重复工作和 Agent,但创建 PR、Release 或外部 Issue 都会改变远端状态,应先确认内容和目标仓库。

Pull Request、Issues 与 Actions

Pull Request 说明问题、方案、验证和风险。Actions 至少运行格式检查、类型检查、单元测试或文档构建;密钥存入仓库 Secrets,通过最小权限的 GITHUB_TOKEN 或短期凭据访问外部系统。

Workflow 应固定 Action 的可信版本,并设置超时。CI 能证明命令在指定环境下通过,但不能证明数据处理或评价协议科学正确。

Releases 与 GitHub Pages

Release 固化可引用产物,适合附上源码归档、小型结果和变更说明。GitHub Pages 适合文档与静态项目主页;需要服务端计算、私有数据或数据库时应选择其他部署方案。

DVC

DVC 用小型元数据文件把数据版本接入 Git,并把内容放到远程存储:

bash
dvc init
dvc add data/train.parquet
git add data/train.parquet.dvc .gitignore
dvc remote add -d storage s3://research-bucket/project
dvc push

它适合数据管线和版本之间存在明确关系的项目。若团队只需要发布稳定数据集,Hugging Face Hub 可能更直接;无论使用哪种方案,都应记录数据许可、来源与生成脚本。

参考:Git 文档GitHub 文档Git LFSDVC 文档