LeRobot入门教程 03:Git 与 Python 环境

目录:00_LeRobot入门教程_目录.md

1. 使用 Git 管理代码

1.1 Git 是什么?Git 和 GitHub 有什么区别?

Git 是版本控制工具,用来记录代码的每次修改;GitHub、GitLab、Gitee 是存放 Git 仓库的网站。

可以把 Git 想象成游戏存档:

git init     = 开始记录存档
git add      = 选择要把哪些改动放进这次存档
git commit   = 真正保存一次存档
git push     = 把本地存档上传到云端
git pull     = 把云端的新存档下载到本地

1.2 安装和配置 Git

如果还没有安装:

apt update
apt install -y git

检查版本:

git --version

第一次使用前,配置你的名字和邮箱:

git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
git config --global init.defaultBranch main

查看配置:

git config --list

1.3 从 GitHub 克隆项目

git clone https://github.com/用户名/仓库名.git

如果 GitHub 很慢,可以先在同一个终端里开启 AutoDL 学术加速:

source /etc/network_turbo
git clone https://github.com/用户名/仓库名.git

克隆完成后进入目录:

cd 仓库名
git status

1.4 最常用的日常流程

在已有 Git 仓库中修改代码后,通常按下面顺序保存:

git status
git diff
git add 文件名
git commit -m "说明这次修改做了什么"
git pull
git push

常用命令:

命令作用
git status查看哪些文件被修改、新增或暂存
git diff查看未暂存的修改
git diff --staged查看已经 git add 的修改
git add 文件名暂存一个文件
git add .暂存当前目录下所有改动
git commit -m "message"保存一次版本记录
git log --oneline --graph --all查看简洁的提交历史
git pull拉取远程仓库最新提交
git push推送本地提交到远程仓库

1.5 创建一个新仓库

mkdir my_project
cd my_project
git init
echo "# My Project" > README.md
git add README.md
git commit -m "Initial commit"

如果要把这个本地仓库上传到 GitHub,需要先在 GitHub 网页上创建一个空仓库,然后:

git remote add origin https://github.com/用户名/仓库名.git
git push -u origin main

origin 是远程仓库的默认别名,main 是主分支名。

1.6 分支:安全地尝试新想法

分支可以理解成平行世界。main 分支保持可用版本,实验代码放在新分支里。

# 查看分支
git branch

# 创建并切换到新分支
git switch -c experiment

# 修改代码后提交
git add .
git commit -m "Try a new idea"

# 回到主分支
git switch main

# 合并实验分支
git merge experiment

# 删除已合并的分支
git branch -d experiment

1.7 .gitignore:不要提交大文件和临时文件

数据集、模型权重、日志和缓存通常不适合放进 Git。可以在仓库根目录创建 .gitignore:

__pycache__/
*.pyc
*.pth
*.safetensors
*.zip
*.tar.gz
runs/
outputs/
.ipynb_checkpoints/
.env

这样 git add . 时会自动忽略这些文件。

1.8 使用 SSH Key 连接 GitHub

HTTPS 克隆通常最简单;如果经常推送代码,可以配置 SSH Key。

  1. 在服务器上生成密钥:

    ssh-keygen -t ed25519 -C "你的邮箱"
    

    一路按 Enter 即可。

  2. 查看公钥:

    cat ~/.ssh/id_ed25519.pub
    
  3. 复制输出内容,到 GitHub 的 Settings → SSH and GPG keys → New SSH key 中添加。

  4. 测试连接:

    ssh -T git@github.com
    

注意:id_ed25519 是私钥,不要发给任何人;id_ed25519.pub 是公钥,可以添加到 GitHub。

1.9 出错时怎么补救

场景命令说明
修改了文件但还不想要git restore 文件名丢弃工作区修改,不可轻易恢复
文件已经 git add 但还没 commitgit restore --staged 文件名取消暂存,但保留文件内容
commit 信息写错了,还没 pushgit commit --amend修改最近一次提交
已 push 的提交需要撤销git revert 提交ID生成一个反向提交,比强制回退更安全
push 被拒绝git pull --rebase 后解决冲突,再 git push说明远程有新提交,先同步历史

1.10 Git 常见问题

报错 / 现象可能原因处理方法
command not found: gitGit 没安装apt update && apt install -y git
clone 很慢GitHub 访问不稳定开启 AutoDL 学术加速,或使用镜像仓库
Please tell me who you are没配置用户名邮箱执行 git config --global user.name ... 和 user.email ...
push 要求密码GitHub HTTPS 已不支持账号密码使用 Personal Access Token 或 SSH Key
Permission denied (publickey)SSH Key 没配置好检查 ssh -T git@github.com 和 GitHub 公钥
不小心提交了大文件没写 .gitignore尽早添加 .gitignore;已提交的大文件要谨慎清理历史
!git --version
!git config --global --list 2>/dev/null || echo "还没有全局 Git 配置"
%%bash
set -e

demo="$HOME/LeRobot入门教程_git_demo"
mkdir -p "$demo"
cd "$demo"

# 如果目录还不是 Git 仓库,就初始化它
if [ ! -d .git ]; then
    git init -b main
fi

echo "# LeRobot入门教程 Git Demo" > README.md
git add README.md

# 这里用 -c 只为本次提交临时提供用户名邮箱,不改全局配置
git -c user.name="LeRobot入门教程 Demo" -c user.email="demo@example.com" \
    commit -m "Add README" || echo "没有新的改动可以提交"

git log --oneline -n 3
git status --short

2. 什么是 Python?

Python 是一种编程语言,可以理解为“给电脑下达指令的语言”。它语法接近自然语言,因此在科研、数据分析、人工智能领域非常流行。

你可以把编程想象成写菜谱:

1. 拿到数据。
2. 处理数据。
3. 训练模型。
4. 保存结果。

Python 会把这些步骤写成电脑能执行的代码。

Python 里最基础的几个概念

  • 变量:给一个值起名字,例如 learning_rate = 0.001。
  • 数据类型:整数、浮点数、字符串、列表、字典等。
  • 函数:把一段可重复使用的工作打包。
  • 类:把数据和操作组织在一起,深度学习模型通常用类写。
  • 包 / 库:别人写好的工具箱,例如 NumPy、PyTorch、pandas。
  • 解释器:真正运行 Python 代码的程序。服务器上可能有多个 Python 环境。
# 变量和打印
name = "robot"
epoch = 10
learning_rate = 0.001

print("实验名称:", name)
print("训练轮数:", epoch)
print("学习率:", learning_rate)

# 条件判断
if epoch >= 10:
    print("这个训练时间可能比较久")
else:
    print("这个训练应该比较快")

# 循环
for i in range(3):
    print(f"第 {i + 1} 次迭代")
# 列表:有序的一组数据
losses = [1.20, 0.95, 0.71, 0.55]
print("losses:", losses)
print("第一个 loss:", losses[0])
print("最后一个 loss:", losses[-1])

# 字典:用键值对保存信息
experiment = {
    "name": "baseline",
    "epochs": 20,
    "batch_size": 32,
    "use_gpu": True,
}

print("实验名:", experiment["name"])
print("batch size:", experiment["batch_size"])
# 函数:把一段逻辑打包,方便重复使用
def describe_dataset(num_images, num_actions):
    total = num_images * num_actions
    return f"图像数量 {num_images},每个图像关联 {num_actions} 个动作,共 {total} 条监督信息"

print(describe_dataset(100, 8))

# 类:把数据和行为组织在一起
class SimpleTrainer:
    def __init__(self, model_name, epochs):
        self.model_name = model_name
        self.epochs = epochs

    def describe(self):
        return f"模型 {self.model_name} 将训练 {self.epochs} 轮"

trainer = SimpleTrainer("small_policy", 5)
print(trainer.describe())

3. Python 环境和包管理

一个 Python 环境可以理解成一套独立的工具箱。环境里装了 Python 解释器和各种包。

为什么要用独立环境?因为不同项目可能需要不同版本的包。例如项目 A 需要 PyTorch 2.1,项目 B 需要 PyTorch 2.8。如果都装在一起,容易冲突。

常见工具

  • pip:Python 官方常用的包安装工具。
  • conda / mamba:管理 Python 版本和包的工具。
  • venv:Python 自带的轻量虚拟环境工具。
  • uv:较新的快速包管理工具。

常见命令

# 查看当前 Python
which python
python --version

# 查看 pip
python -m pip --version

# 安装包
python -m pip install numpy

# 查看某个包是否安装
python -m pip show torch

# 导出当前环境
python -m pip freeze > requirements.txt
!which python
!python --version
!python -m pip --version