计算机视觉科研 Git 实操命令手册：从建仓到论文复现的一套命令流

计算机视觉科研 Git 实操命令手册：从建仓到论文复现的一套命令流上一篇讲了策略，这一篇只做一件事：给你一套可以直接复制的命令流。适用场景：CV 科研项目，包含数据处理、训练、评估、部署等多个模块，需要多人协作并保证复现。 0. 一次性初始化（新项目） # 1) 初始化仓库 git init # 2) 基础身份配置（仅首次） git config --global user.name "Your Name" git config --global user.email "you@example.com" # 3) 建立基础目录 mkdir -p configs src scripts experiments data/manifests # 4) 忽略不该进仓库的内容 cat > .gitignore << 'EOF' __pycache__/ *.pyc *.pth *.pt *.onnx *.engine logs/ outputs/ wandb/ .env EOF # 5) 首次提交 git add . git commit -m "chore: initialize cv research project" 1. 分支工作流（轻量版，科研够用）目标：main 永远可运行，实验在 exp/* 分支完成。 # 从 main 开实验分支 git checkout main git pull origin main git checkout -b exp/yolov11-ablation-lr # 开发中提交 git add -A git commit -m "exp: ablation lr=1e-3 with cosine schedule" # 同步主干，减少后续冲突 git checkout main git pull origin main git checkout exp/yolov11-ablation-lr git rebase main # 实验完成后回到 main 合并 git checkout main git merge --no-ff exp/yolov11-ablation-lr -m "merge: yolov11 lr ablation" git push origin main 建议：每个实验分支只做一个主题，不要把数据清洗改动和模型结构改动混在一起。 2. 提交规范模板（直接抄） feat: add ema support for detector training fix: correct coco evaluator area range bug refactor: split dataloader builder and transforms exp: run ablation on augment policy v3 docs: update reproduce steps for iccv submission chore: lock dependency versions for paper release 高频原则：一个 commit 只做一件事 commit message 必须说明“改动目的” 能复现主结论的关键改动要单独 commit 3. 子模块管理（多仓库协作最常见）当你把 train-engine、model-zoo 拆成独立仓库时： # 添加子模块 git submodule add https://github.com/your-org/model-zoo.git third_party/model-zoo git submodule add https://github.com/your-org/train-engine.git third_party/train-engine # 拉取子模块 git submodule update --init --recursive # 查看子模块当前指向 git submodule status 更新子模块到新版本： # 进入子模块切到目标 tag/commit cd third_party/model-zoo git fetch --tags git checkout v1.3.2 cd ../.. # 提交主仓库中的“子模块指针变化” git add third_party/model-zoo git commit -m "chore: bump model-zoo to v1.3.2" 团队最低规范：子模块只指向确定 commit/tag 禁止直接依赖子模块 main 浮动头更新子模块后必须在主仓库提交一次“指针更新” 4. 版本冻结（投稿前必须做）先生成 versions.lock（可手工或脚本）： cat > versions.lock << 'EOF' model_zoo=3fa91bc train_engine=7b2c0a1 eval_benchmark=19cd882 data_pipeline=84d0f3e EOF 为论文结果打 tag： # 确认工作区干净 git status # 打带注释标签 git tag -a paper-iccv26-r1 -m "ICCV26 submission R1 reproducible snapshot" # 推送分支和标签 git push origin main git push origin paper-iccv26-r1 5. 实验登记（强烈建议自动化）在 experiments/registry.md 或 registry.csv 记录： exp_id git_commit config_path data_manifest pretrain_hash seed result 快速记录当前 commit： git rev-parse --short HEAD 把它写进实验记录（示例）： exp_id=exp_20260318_yolo_lr_sweep git_commit=3fa91bc config=configs/yolo/lr_sweep.yaml data_manifest=data/manifests/coco_v4.json pretrain_hash=sha256:xxxx seed=3407 result=AP50:95=51.3 6. 常用排障命令（救命清单） 1) 我到底改了什么？ git status git diff git diff --staged 2) 谁改坏了评估脚本？ # 查看某文件历史 git log -- src/eval/coco_eval.py # 查看每行是谁改的（定位责任提交） git blame src/eval/coco_eval.py 3) 想临时回到某次提交验证结果 git checkout # 验证后切回 git checkout main 4) 回滚一个错误提交（团队协作推荐） git revert 注意：协作分支上优先 revert，少用改写历史的操作。 7. 复现发布脚本（最小可用）你可以准备一个 scripts/reproduce_paper.sh： #!/usr/bin/env bash set -e # 1) 固定代码版本 git checkout paper-iccv26-r1 # 2) 同步子模块 git submodule update --init --recursive # 3) 安装依赖 pip install -r requirements.txt # 4) 跑评估或最小训练 bash scripts/eval.sh configs/paper/final.yaml 并给执行权限： chmod +x scripts/reproduce_paper.sh 8. 团队协作“禁令”清单下面三条能让大多数仓库灾难减少 80%：禁止把数据集和大权重直接提交到 Git 主仓库禁止在 main 直接开发禁止“改了评估逻辑但不写说明” 结尾：一条最小落地路径如果你今天就要把项目从“能跑”升级到“能复现”，按这个顺序做：建立 exp/* 分支开发习惯对论文里程碑打 tag 维护 versions.lock + experiments/registry 准备 reproduce_paper.sh 做到这四步，你的 CV 科研项目就具备了工程级版本管理能力。