课题组远程服务器Git版本控制实战教程(从零开始)
📋 目录
- 前言
- 一、为什么需要版本控制?
- 二、环境说明
- 三、Git初始化配置
- [3.1 配置用户信息](#3.1 配置用户信息)
- [3.2 初始化仓库](#3.2 初始化仓库)
- [3.3 配置.gitignore](#3.3 配置.gitignore)
- [3.4 首次提交](#3.4 首次提交)
- 四、日常使用工作流
- 五、查看历史与版本回退
- 六、常见问题与解决方案
- 七、进阶技巧
- 总结
前言
在课题组做科研项目时,经常会遇到这样的困扰:
- 💥 改了代码出bug了,想回到上一个能跑的版本,但找不到了
- 📁 项目文件夹里出现了
code_final.py、code_final_v2.py、code_really_final.py... - 🤔 一个月前的实验是怎么做的?当时的参数是多少?
- 😱 不小心删了关键代码,没有备份
如果你也有这些痛点,那么Git版本控制就是你的救星!本文将手把手教你在课题组的远程服务器上配置和使用Git,实现代码的版本回溯功能。
适用场景:
- ✅ 每个人有独立的服务器账号
- ✅ 需要对代码进行版本管理
- ✅ 需要记录实验过程和代码变化
- ✅ 多人协作开发(本文暂不涉及,后续可扩展)
一、为什么需要版本控制?
Git 是目前最流行的分布式版本控制系统,相比手动备份和文件命名法,它有以下优势:
| 传统方法 | Git方法 |
|---|---|
| 手动复制粘贴备份 | 自动管理所有历史版本 |
| 文件名越来越长且混乱 | 清晰的提交记录和说明 |
| 不知道改了什么 | 精确到每一行的修改记录 |
| 难以回退到某个版本 | 一条命令回到任意历史版本 |
| 占用大量磁盘空间 | 高效的存储机制 |
二、环境说明
服务器环境:
- 操作系统:Ubuntu 24(其他Linux发行版类似)
- 多用户环境:每个人有独立账号
- 项目路径:
/disk/xiahl/Codes/RT-DETR(示例)
前置条件:
- 已安装Git(大多数Linux服务器默认安装)
- 可以SSH登录到服务器
检查Git是否已安装:
bash
git --version
如果未安装,使用以下命令安装:
bash
# Ubuntu/Debian
sudo apt-get install git
# CentOS/RedHat
sudo yum install git
三、Git初始化配置
3.1 配置用户信息
首次使用Git必须配置用户信息,这样每次提交都会记录是谁提交的。
bash
# SSH登录到服务器
ssh your_username@server_address
# 配置用户名和邮箱(全局配置,一次即可)
git config --global user.name "你的名字"
git config --global user.email "your_email@example.com"
# 查看配置是否成功
git config --list
示例:
bash
git config --global user.name "xiahl"
git config --global user.email "2534463298@qq.com"
3.2 初始化仓库
进入你的项目目录,初始化Git仓库:
bash
# 进入项目目录
cd /disk/xiahl/Codes/RT-DETR
# 初始化Git仓库
git init
输出示例:
Initialized empty Git repository in /disk/xiahl/Codes/RT-DETR/.git/
这会在项目目录下创建一个隐藏的 .git 文件夹,用于存储所有版本信息。
3.3 配置.gitignore
在添加文件之前,先创建 .gitignore 文件,排除不需要版本控制的文件(如日志、临时文件、大数据集等)。
bash
# 创建.gitignore文件
nano .gitignore
推荐的 .gitignore 内容(针对深度学习项目):
gitignore
# Python缓存文件
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
# 虚拟环境
venv/
env/
ENV/
# 日志文件
logs/
*.log
# 输出目录(实验结果、checkpoints等)
output/
outputs/
results/
checkpoints/
# 数据集(通常很大,不建议纳入版本控制)
data/
dataset/
datasets/
# 模型权重文件(通常很大)
weights/
*.pth
*.pt
*.ckpt
*.h5
*.pb
# Jupyter Notebook检查点
.ipynb_checkpoints/
# IDE配置
.vscode/
.idea/
*.swp
*.swo
# 系统文件
.DS_Store
Thumbs.db
# 压缩包
*.zip
*.tar
*.tar.gz
*.rar
# 临时文件
tmp/
temp/
保存文件:按 Ctrl+X,然后按 Y,最后按 Enter
3.4 首次提交
现在可以添加文件并进行首次提交了:
bash
# 查看当前状态(哪些文件未被跟踪)
git status
# 添加所有文件到暂存区
git add .
# 再次查看状态(确认要提交的文件)
git status
# 提交到本地仓库
git commit -m "Initial commit - RT-DETR项目初始版本"
实际输出示例:
bash
(base) xiahl@user:/disk/xiahl/Codes/RT-DETR$ git add .
(base) xiahl@user:/disk/xiahl/Codes/RT-DETR$ git commit -m "Initial commit - RT-DETR项目初始版本"
[master (root-commit) 725e76c] Initial commit - RT-DETR项目初始版本
142 files changed, 25015 insertions(+)
create mode 100644 .gitignore
create mode 100644 README.md
create mode 100644 src/core/__init__.py
...
验证是否成功:
bash
# 查看提交历史
git log
# 或查看简洁版
git log --oneline
🎉 恭喜!你的Git仓库已经成功初始化了!
四、日常使用工作流
4.1 基本三步走
日常修改代码后,使用以下三步提交:
bash
# 第1步:查看修改了哪些文件
git status
# 第2步:添加修改的文件
git add . # 添加所有修改
# 或
git add file1.py file2.py # 只添加特定文件
# 第3步:提交并写清楚做了什么
git commit -m "修复了训练过程中的学习率bug"
4.2 查看修改内容
提交前可以查看具体改了什么:
bash
# 查看所有文件的修改
git diff
# 查看特定文件的修改
git diff src/train.py
# 查看已暂存的修改
git diff --staged
输出解释:
- 红色(-):删除的内容
- 绿色(+):新增的内容
4.3 提交信息的最佳实践
好的提交信息应该清楚说明做了什么:
✅ 好的例子:
bash
git commit -m "添加NWD loss函数,提升小目标检测性能"
git commit -m "修复数据加载时的内存泄漏问题"
git commit -m "优化模型推理速度,从30ms降到15ms"
git commit -m "实验记录:学习率0.001效果最佳"
❌ 不好的例子:
bash
git commit -m "修改"
git commit -m "update"
git commit -m "fix bug" # 什么bug?
五、查看历史与版本回退
5.1 查看提交历史
bash
# 查看详细历史(按q退出)
git log
# 查看简洁版历史(推荐)
git log --oneline
# 查看最近5条记录
git log -5
# 查看某个文件的修改历史
git log -- src/train.py
# 查看图形化分支历史
git log --oneline --graph --all
输出示例:
725e76c (HEAD -> master) Initial commit - RT-DETR项目初始版本
abc1234 添加NWD loss函数
def5678 修复数据加载bug
5.2 版本回退
场景1:撤销还未提交的修改
bash
# 撤销某个文件的修改(恢复到上次commit状态)
git checkout -- src/train.py
# 撤销所有文件的修改
git checkout -- .
场景2:回退到某个历史版本
bash
# 1. 先查看历史,找到commit ID(前7位即可)
git log --oneline
# 2. 回退到指定版本(保留工作区的修改)
git reset abc1234
# 3. 回退并丢弃所有修改(危险!慎用)
git reset --hard abc1234
# 4. 回到最新版本
git reset --hard HEAD
场景3:查看某个历史版本的文件
bash
# 查看某个commit时的文件内容(不影响当前代码)
git show abc1234:src/train.py
# 临时切换到某个版本查看
git checkout abc1234
# 查看完后切回最新版本
git checkout master
5.3 比较不同版本
bash
# 比较两个commit的差异
git diff abc1234 def5678
# 比较当前版本与某个历史版本
git diff abc1234
# 比较某个文件在两个版本间的差异
git diff abc1234 def5678 -- src/train.py
六、常见问题与解决方案
问题1:不小心commit了,想修改提交信息
bash
# 修改最后一次commit的信息
git commit --amend -m "新的提交信息"
问题2:想忽略某些文件,但已经被Git跟踪了
bash
# 1. 将文件加入.gitignore
echo "logs/*.log" >> .gitignore
# 2. 从Git中移除(不删除实际文件)
git rm --cached logs/train.log
# 3. 提交更改
git commit -m "停止跟踪日志文件"
问题3:误删了文件,想恢复
bash
# 恢复误删的文件
git checkout -- 误删的文件.py
# 如果已经commit了删除操作,想恢复
git checkout 删除前的commit_id -- 误删的文件.py
问题4:想查看是谁修改了某行代码
bash
# 查看文件的每一行是谁最后修改的
git blame src/train.py
# 查看特定行范围
git blame -L 100,120 src/train.py
问题5:仓库太大了,想减小体积
bash
# 查看仓库大小
du -sh .git
# 清理历史中的大文件(需要git-filter-repo工具)
# 通常建议重新建仓库,并在.gitignore中排除大文件
七、进阶技巧
7.1 使用分支进行实验
当你想尝试新想法但不想影响主代码时,可以创建分支:
bash
# 创建并切换到新分支
git checkout -b experiment-new-loss
# 在新分支上做实验,随意修改和提交
git add .
git commit -m "实验:尝试focal loss"
# 如果实验成功,合并回主分支
git checkout master
git merge experiment-new-loss
# 如果实验失败,直接删除分支
git branch -d experiment-new-loss
# 查看所有分支
git branch
7.2 配置命令别名
让常用命令更简短:
bash
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.cm commit
git config --global alias.lg "log --oneline --graph"
# 之后就可以使用:
git st # 等同于 git status
git lg # 等同于 git log --oneline --graph
7.3 暂存工作进度
当你需要临时切换任务时:
bash
# 暂存当前修改
git stash
# 查看暂存列表
git stash list
# 恢复暂存的修改
git stash pop
# 删除暂存
git stash drop
7.4 查找引入bug的commit
使用二分查找定位问题:
bash
# 开始二分查找
git bisect start
# 标记当前版本为坏的
git bisect bad
# 标记某个旧版本为好的
git bisect good abc1234
# Git会自动切换到中间版本,测试后标记
git bisect good # 或 git bisect bad
# 重复直到找到引入bug的commit
# 结束二分查找
git bisect reset
7.5 连接远程仓库(可选)
如果想要云端备份或多人协作,可以连接GitHub/GitLab:
bash
# 在GitHub上创建仓库后,连接远程仓库
git remote add origin https://github.com/username/repo.git
# 推送到远程
git push -u origin master
# 之后每次提交后推送
git push
# 从远程拉取更新
git pull
总结
本文详细介绍了在课题组远程服务器上使用Git进行版本控制的完整流程:
核心要点:
- ✅ 初始化 :
git init→ 配置.gitignore→ 首次提交 - ✅ 日常使用 :
git status→git add .→git commit -m "说明" - ✅ 查看历史 :
git log --oneline - ✅ 版本回退 :
git reset或git checkout - ✅ 最佳实践:经常commit、写清楚说明、排除大文件
建议的工作流程:
- 每完成一个小功能就commit一次
- 每天工作结束前至少commit一次
- 每周回顾一次提交历史
- 做实验时使用分支
下一步:
- 学习Git分支管理(适合多人协作)
- 配置远程仓库(GitHub/GitLab)进行云端备份
- 学习Git hooks自动化工作流
💡 小提示 :Git是一个强大的工具,但不要被复杂的功能吓到。日常使用中,掌握本文介绍的基础命令就足够应对95%的场景了。遇到问题时,
git status和git log是你最好的朋友!
参考资料:
- Git官方文档:https://git-scm.com/doc
- Pro Git中文版:https://git-scm.com/book/zh/v2
- Git命令速查表:https://training.github.com/downloads/zh_CN/github-git-cheat-sheet/
如果本文对你有帮助,欢迎点赞收藏!有任何问题欢迎在评论区讨论交流~ 👇