banner
约 1,200 字
4 分钟

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

2026年3月18日

摘要

上一篇偏方法论,这一篇只讲可直接复制的 Git 命令模板:分支管理、子模块、版本冻结、回滚排障与论文复现发布流程。

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

上一篇讲了策略,这一篇只做一件事:给你一套可以直接复制的命令流

适用场景:CV 科研项目,包含数据处理、训练、评估、部署等多个模块,需要多人协作并保证复现。

0. 一次性初始化(新项目)

bash
# 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/* 分支完成。

bash
# 从 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-enginemodel-zoo 拆成独立仓库时:

bash
# 添加子模块
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

更新子模块到新版本:

bash
# 进入子模块切到目标 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(可手工或脚本):

bash
cat > versions.lock << 'EOF'
model_zoo=3fa91bc
train_engine=7b2c0a1
eval_benchmark=19cd882
data_pipeline=84d0f3e
EOF

为论文结果打 tag:

bash
# 确认工作区干净
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.mdregistry.csv 记录:

  • exp_id

  • git_commit

  • config_path

  • data_manifest

  • pretrain_hash

  • seed

  • result

快速记录当前 commit:

bash
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) 我到底改了什么?

bash
git status
git diff
git diff --staged

2) 谁改坏了评估脚本?

bash
# 查看某文件历史
git log -- src/eval/coco_eval.py

# 查看每行是谁改的(定位责任提交)
git blame src/eval/coco_eval.py

3) 想临时回到某次提交验证结果

bash
git checkout <commit_hash>
# 验证后切回
git checkout main

4) 回滚一个错误提交(团队协作推荐)

bash
git revert <bad_commit_hash>

注意:协作分支上优先 revert,少用改写历史的操作。

7. 复现发布脚本(最小可用)

你可以准备一个 scripts/reproduce_paper.sh

bash
#!/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

并给执行权限:

bash
chmod +x scripts/reproduce_paper.sh

8. 团队协作“禁令”清单

下面三条能让大多数仓库灾难减少 80%:

  1. 禁止把数据集和大权重直接提交到 Git 主仓库

  2. 禁止在 main 直接开发

  3. 禁止“改了评估逻辑但不写说明”

结尾:一条最小落地路径

如果你今天就要把项目从“能跑”升级到“能复现”,按这个顺序做:

  1. 建立 exp/* 分支开发习惯

  2. 对论文里程碑打 tag

  3. 维护 versions.lock + experiments/registry

  4. 准备 reproduce_paper.sh

做到这四步,你的 CV 科研项目就具备了工程级版本管理能力。

END

相关文章

暂无相关文章

© 2026 K1ne. All Rights Reserved. / RSS / Sitemap
Powered by Tanstack Start & Flare Stack Blog