课题组远程服务器Git版本控制实战

课题组远程服务器Git版本控制实战教程(从零开始)

📋 目录


前言

在课题组做科研项目时,经常会遇到这样的困扰:

  • 💥 改了代码出bug了,想回到上一个能跑的版本,但找不到了
  • 📁 项目文件夹里出现了 code_final.pycode_final_v2.pycode_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进行版本控制的完整流程:

核心要点

  1. 初始化git init → 配置.gitignore → 首次提交
  2. 日常使用git statusgit add .git commit -m "说明"
  3. 查看历史git log --oneline
  4. 版本回退git resetgit checkout
  5. 最佳实践:经常commit、写清楚说明、排除大文件

建议的工作流程

  • 每完成一个小功能就commit一次
  • 每天工作结束前至少commit一次
  • 每周回顾一次提交历史
  • 做实验时使用分支

下一步

  • 学习Git分支管理(适合多人协作)
  • 配置远程仓库(GitHub/GitLab)进行云端备份
  • 学习Git hooks自动化工作流

💡 小提示 :Git是一个强大的工具,但不要被复杂的功能吓到。日常使用中,掌握本文介绍的基础命令就足够应对95%的场景了。遇到问题时,git statusgit log 是你最好的朋友!

参考资料


如果本文对你有帮助,欢迎点赞收藏!有任何问题欢迎在评论区讨论交流~ 👇

相关推荐
未来之窗软件服务1 小时前
服务器运维(三十九)日服务器mysql错误日志分析工具—东方仙盟
运维·服务器·服务器运维·仙盟创梦ide·东方仙盟
怀旧诚子1 小时前
podman搭建freeswitch服务器
服务器·podman
skywalk81631 小时前
Easytier进行服务器安装@Ubuntu22.04
linux·运维·服务器
czhc11400756632 小时前
通信217
服务器·网络·tcp/ip
公子烨2 小时前
脏页“幽灵”的捕获与处理
服务器
拍客圈2 小时前
Discuz搜索报错
服务器·网络·安全
w***29853 小时前
Knife4j文档请求异常(基于SpringBoot3,查找原因并解决)
java·服务器·数据库
郝学胜-神的一滴3 小时前
深入理解TCP连接的优雅关闭:半关闭状态与四次挥手的艺术
linux·服务器·开发语言·网络·tcp/ip·程序人生
CCPC不拿奖不改名11 小时前
虚拟机基础:在VMware WorkStation上安装Linux为容器化部署打基础
linux·运维·服务器·人工智能·milvus·知识库搭建·容器化部署