开发第零课:WSL/Conda/Docker/git/VSCode 入门使用一文速查

前言

  • 有很多开发工作在 Linux 上进行,但我们一般用的是 Windows 系统,一个简单的方法是借助虚拟机安装一个Linux系统,但其资源占用大,有一个更轻量高性能的解决方案是WSL2

    而使用WSL2及其中的各种环境配置往往使用命令行,因此写作此文,以便查询

WSL部分

准备工作

  1. 启用WSL2

    打开启用或关闭windows功能,启用WSL2需要勾选的组件包括:

    • 适用于 Linux 的 Windows 子系统
    • 虚拟机平台

    之后会提示重启系统

  2. 安装 Linux 系统

    打开终端(按下快捷键 win+R,在运行窗口中输入cmd后回车)

    输入下列命令,就会安装 WSL 和 Linux 的默认 Ubuntu 分发版

    wsl --install
    

    如果想要安装其他发行版,则使用以下指令(接下来以常见的 Ubuntu 26.04 LTS 为例):

    wsl --install -d Ubuntu-26.04
    

    在Win11版本上可以不输-d参数,如果不知道发行版的具体名称,可以使用如下命令列出可用的发行版名称:

    wsl --list --online
    

    如果下载出现错误,或者不想输入命令查询安装,可以直接在Microsoft商店中搜索 Linux 选用想要的发行版下载

Linux配置

  1. 进入系统

    系统安装完成后,会自动启动Linux系统,或者输入:

    wsl -d Ubuntu-26.04
    

    首次进入系统会提示创建一个默认账户:输入账户名后回车,再设定相应密码(输入密码时不会显示字符)回车后会要求重复输入一遍所设密码

    如果系统提问Would you like to opt-in to platform metrics collection,输入n再回车

    然后就会进入 Linux 系统中,之后想要启动可以使用如下命令:

    wsl ~
    
  2. 配置镜像

    为了加速软件包的下载,我们在Linux系统中设定软件包使用镜像站加速(新版本Ubuntu使用了新的配置方式,与之前的配置有所不同)

    sudo nano /etc/apt/sources.list.d/ubuntu.sources
    

    进入编辑器后移动到下方可见官方的配置格式,将其替换为镜像站(以阿里云镜像站为例)

    Types: deb
    URIs: http://mirrors.aliyun.com/ubuntu/
    Suites: resolute resolute-updates resolute-backports
    Components: main restricted universe multiverse
    Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
    
    Types: deb
    URIs: http://mirrors.aliyun.com/ubuntu/
    Suites: resolute-security
    Components: main restricted universe multiverse
    Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
    

    nano编辑器在下方有各种操作的快捷键提示(符号 ^​ 代表 Ctrl​ 键,M-​ 代表 Alt 键),具体操作如下:

    1. 首先按Alt+A进入选择模式,使用方向键移动选中原本的配置文件再删除
    2. 在复制镜像站配置后,到终端窗口单击鼠标右键即可粘贴(在Windows复制,则在WSL用鼠标右键粘贴,如果按照nano编辑器的提示使用Ctrl+U只能粘贴Linux内部复制的东西)
    3. 按 Ctrl + O​ 保存文件,然后按 Enter​ 确认文件名,按 Ctrl + X 退出编辑器

    完成后进行更新,让系统识别新的源:

    sudo apt update
    

    更新源后进行一次软件包更新:

    sudo apt upgrade -y
    

迁移系统

  • 为何推荐迁移系统

    此步并不必要,但做这一步有以下三个原因:

    1. WSL默认将数据都放在C盘的用户文件夹下,在使用过程中可能出现空间不足问题,因此我们希望将其数据移动到其他地方

      注:默认的系统存放位置为C:\Users\<用户名>\AppData\Local\Packages\<发行版包名>\LocalState\ext4.vhdx

    2. 防止系统所用虚拟磁盘损坏时波及主机系统的用户文件

    3. 哪怕C盘空间充足不需要迁移,也可以把配置好的系统导出一份镜像作为备份,可以再次导入免去重复配置的麻烦

    迁移(备份)系统在Windows的系统终端中进行,分为以下四步(下方的系统与路径名根据个人情况修改):

  1. 导出当前的系统

    首先查看要导出的系统名,使用如下指令列出安装的 Linux 系统

    wsl -l -v
    

    如果发现刚刚安装的系统是Running状态,就使用如下命令关闭WSL

    wsl --shutdown
    

    然后再导出系统,两个参数分别是要导出的系统名字,导出的路径及其文件名

    例如下列指令会把系统导出到D盘的Ubuntu.tar文件中(注意,路径需要存在才能执行,需要事先建好相应文件夹)

    wsl --export  Ubuntu-26.04 D:\Ubuntu.tar
    
  2. 卸载原来的系统
    wsl --unregister Ubuntu-26.04
    
  3. 重新导入系统

    导入命令的三个参数分别是导入的系统名,新的系统存放路径,要导入的系统镜像文件路径

    wsl --import Ubuntu-26.04 D:\WSL\Ubuntu D:\Ubuntu.tar
    
  4. 导入系统的配置

    重新导入的系统会继承之前的配置,也就可以跳过此步骤,需要注意的是,如果在导出前没有配置用户,那进入导入的系统会默认使用root用户,就需要再进行这一步自行添加用户:

    首先进入系统

    wsl -d Ubuntu-26.04
    

    然后在Linux中执行如下操作添加用户

    sudo adduser --gecos "" 用户名
    

    然后为用户设置密码,再将新添加的用户设置为默认用户

    echo -e "[user]\ndefault=用户名" | sudo tee -a /etc/wsl.conf
    

    最后在Windows终端关闭WSL,再次进入时就是添加的用户了

    wsl --shutdown
    

WSL配置

  • 性能限制

    在重新打开WSL之前,可以对WSL进行一些配置,主要是限制WSL2所能够占用主机的内存/CPU,防止WSL2的运行影响到主机

    这一部分可以在GUI界面中配置:打开WSL Setting,有内存与处理器选项,按需分配即可

  • 交换空间

    在处理器和内存配置的下方还可配置swap空间的大小与路径,交换空间是指当前运行程序超过分配内存大小时,需要借用硬盘空间,同样按需配置

常用指令

  • WSL操作

    更新WSL

    wsl --update
    

    配置默认发行版

    wsl --set-default 发行版名
    
  • WSL启动

    可以用这一简单的命令快速启动WSL,以默认用户进入默认系统

    wsl
    

    需要注意的是默认进入的位置/mnt/c/Users/你的用户名是 Windows 用户文件夹在 WSL 中的“挂载点”,这意味着正在通过一个“转换层”读取 Windows 文件,这会带来一定性能损耗,可以使用如下命令默认启动进入 Linux 下的家目录

    wsl ~
    

    如果要启动并以指定用户进入指定系统,用如下指令:

    wsl -d 发行版名 --user 用户名
    
  • WSL关闭

    立即终止WSL和所有正在运行的系统:

    wsl --shutdown
    

    如果想要终止指定的发行版,用如下指令:

    wsl --terminate 发行版名
    

VScode连接WSL

  • WSL扩展

    我们的开发工作仍在我们熟悉的 Windows 环境下进行,现在需要将Windows下的编辑器连接到WSL中,首先在 VS code 编辑器中安装所需名为WSL的扩展(微软官方,发布者为 Microsoft)

  • 连接WSL

    重启VS code,现在有三种方式连接到WSL(需要先启动系统):

    • 按 Ctrl + Shift + P​打开命令,输入 WSL: Connect to WSL
    • 单击左下角的“连接到远程窗口”图标,在弹出窗口中选择连接到WSL
    • 在 WSL 终端中进入项目目录后直接输入code .启用编辑器

    首次访问会自动安装VS Code Server for Linux

  • 文件位置问题

    远程连接WSL时,打开的终端、文件编辑、调试都直接运行在 Ubuntu 环境中,所以如前文所述为避免性能损失,代码文件放在 WSL 的文件系统更好

    如果启动后处在/mnt/c/Users/你的用户名,使用如下命令切换回 Linux 的家目录

    cd ~
    

    然后在此可以创建项目所用的文件夹

    mkdir project
    cd project
    

    当然,放在 Linux 目录并不代表着与 Windows 隔绝,可以通过在文件管理器的地址栏中输入以下路径:

    \\wsl.localhost\
    

    然后打开相应的发行版就能访问其中文件了

    之后的Conda等安装最好也放在默认的/home/用户名​而非/mnt/目录下,以免性能问题或报错

Conda部分

安装流程

  1. 先更新系统包,安装wget(之前执行过可跳过)

    sudo apt update && sudo apt upgrade -y
    
    sudo apt install wget -y
    
  2. 下载安装脚本
    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
    
  3. 运行安装脚本
    bash Miniconda3-latest-Linux-x86_64.sh
    
  4. 然后一直yes和回车,保持默认配置即可

  5. 安装完成后使用版本命令检查是否安装成功

    conda --version
    

    如果安装成功,那么应该输出当前conda的版本号

常用操作

  • 创建环境并激活使用

    创建一个新的虚拟环境

    conda create --name 环境名称
    

    还可以用参数指定环境中安装的 Python 版本,如下:

    conda create --name 环境名称 python=3.11
    

    在创建完成后,可以激活环境从而进入这一虚拟环境中

    conda activate 已经创建的环境名称
    

    使用完成后可以退出激活的虚拟环境

    conda deactivate
    
  • 环境配置

    在激活环境后,就可以安装各种依赖,与其他环境互不干扰

    建议优先使用 conda 的安装命令,如果 conda 仓库中没有,再使用 pip 命令安装(conda 方式安装的软件包是经过专门适配的,而且能安装非 Python 的包)

    conda install 要安装的包名
    

    查看当前环境下安装的包:

    conda list
    conda list 软件包名称 #查看这个软件包的版本
    conda list --explicit #列出所有安装包带版本的列表
    

    如果不需要,可以卸载包

    conda remove 软件包名称
    

    在依赖配置完成后,可以导出当前环境

    conda env export > env.yml #这里是通过conda方式安装的包列表
    pip freeze > requirements.txt # 这里是通过pip方式安装的包列表
    

    然后在另一台电脑上可以利用这些列表一键安装所有包

    conda env create -f env.yml
    pip install -r requirements.txt
    
  • 管理环境

    列出当前已经创建的所有环境

    conda env list
    

    克隆一份现有的环境

    conda create --name 克隆出的环境名 --clone 原有的环境名
    

    删除环境(激活状态下需要先退出)

    conda env remove --name 要删除的环境名
    

    清除缓存(删除环境后Conda 默认保留缓存,可用此命令释放磁盘空间,或者是下载失败后清理重试)

    conda clean --all
    

VSCode中使用Conda环境

  1. 需要先为 VS code 安装 Python 插件,在 WSL 中启用
  2. 在 WSL 连接状态下按 Ctrl + Shift + P​ 打开命令面板,输入 Python: Select Interpreter选择解释器
  3. 会列出所有 conda 环境,选择 ~/miniconda3/envs/创建的虚拟环境名称/bin/python 即可

Docker部分

安装流程

  1. 一键安装脚本
    curl -fsSL https://get.docker.com | sh #官方一键安装脚本
    bash <(curl -sSL https://xuanyuan.cloud/docker.sh) #如果无法连接到官方服务器,可以使用这个镜像脚本
    
  2. 权限配置

    docker 的运行需要使用 sudo 权限,为了方便可以将我们的用户添加到 docker 的用户组,让普通用户以 root 权限运行 docker 命令(需要重启生效)

    sudo usermod -aG docker $USER
    
  3. 配置自启动

    每次打开 Linux 都需要启动 Docker,再开所需要的容器,太麻烦了,可以配置让 Docker 的后台服务随着 Linux 自启动

    (若提示 systemd 相关错误,需要先设置systemd=true后重启)

    sudo systemctl enable docker
    
  4. 安装完成后使用命令检查是否安装成功

    docker run hello-world
    

    如果安装成功,稍等一会,输出内容应该包含如下一句(其他不用管)

    Hello from Docker!
    
  5. 安装GPU加速工具包

    如果需要运行GPU加速的容器(如AI相关的 PyTorch、TensorFlow),必须安装 NVIDIA Container Toolkit 工具包,让容器能够识别和使用宿主机的NVIDIA GPU,首先配置软件源(以下是同一行命令,直接复制粘贴运行即可):

    curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
      && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
        sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
        sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
    

    之后更新软件包列表

    sudo apt-get update
    

    再进行安装

    sudo apt-get install -y nvidia-container-toolkit
    

    安装完成后,先配置docker使用 NVIDIA 运行时

    sudo nvidia-ctk runtime configure --runtime=docker
    

    最后先重启一遍docker

    sudo systemctl restart docker
    

    然后验证安装是否成功,执行以下命令(不必修改各个版本数字),如果出现了GPU信息列表即成功(也可能因为网络问题无法下载对应镜像失败)

    sudo docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi
    

基本概念

  • 镜像

    代码 + 环境 + 依赖被统一打包成一个镜像,从而免去依赖配置的烦恼

  • 容器

    将镜像运行起来就是一个容器,各个容器之间分离开,避免不同依赖环境之间相互干扰

  • Dockerfile

    用于描述如何构建镜像的脚本,格式如下:

    FROM python:3.11 
    #容器使用的镜像
    WORKDIR /app 
    #之后所有Docker命令的工作路径
    COPY . . 
    #将所有程序拷贝到镜像中,参数分别是 本地路径 目标路径,两个点分别表示程序根目录下所有文件/Docker镜像的工作路径(之前的app目录)
    RUN pip install -r requirements.txt 
    #RUN执行任意命令
    CMD ["python", "train.py"]
    #CMD指定容器运行起来后要执行的命令
    

    在有了dockerfile后可以用如下命令构建镜像:

    docker build -t 镜像名 dockerfile所在目录
    

常用操作

  • 拉取镜像并运行

    Docker强大之处在于可以拉取别人已经配置好的镜像,从而简单地搭建环境或者部署别人的项目,网上有很多针对某种语言/框架开发的环境镜像,此处以 Python 开发为例:

    docker pull python:3.11
    

    或者使用刚刚写的dockerfile并使用build命令创建镜像

    有了镜像后可以运行它产生一个容器

    docker run -p 80:5000 -d --name 容器名 镜像名  #将容器的端口5000映射到主机的80上,从而让主机能够访问
    

    此外,容器如果被删除将一并清空其中数据,因此在做需要交互文件的工作时还需要把容器中的文件挂载到 WSL 的文件系统中

    docker run -p 80:5000 -d \
    	--name 容器名 \
    	-v /本地路径:/容器中的路径 \
    	-v /home/user/data:/app/data \
    	镜像名
    #可以挂载多个路径
    #注意镜像名之后的内容一律被当成容器的启动命令,所有参数选项要在镜像名之前
    

    需要注意的是run​是创建容器的方法,在停止后重新启动已有容器就不用run​,而是用start

    docker start 容器名
    
  • 镜像管理

    查看镜像

    docker images
    

    删除镜像

    docker rmi 镜像名
    
  • 容器管理

    查看容器

    docker ps #这里看到的是运行中的容器
    docker ps -a #所有的容器
    

    停止容器

    docker stop 容器名   
    

    删除容器

    docker rm 容器名
    

VSCode中连接Docker容器

  • Docker扩展

    安装 Dev Containers 扩展与 Docker 扩展(还需要前文提到的WSL扩展)

  • 连接流程
    1. 在 WSL 连接状态下按 Ctrl + Shift + P​ 打开命令面板,输入 Dev Containers: Attach to Running Container...
    2. 会列出所有容器,选择正在运行的容器即可

关于跨平台开发

  • 因为我们是在 Win 电脑上的 WSL 中开发,如果进行的是 Win 程序的开发,那这种一层套一层的情况很容易把人绕晕,由此特别说明:

  • 我们的开发环境在 Linux 系统(WSL)中,我们打交道的 Win 上面的 VS code 只是一个远程连接到上面的窗口,实际用到的git、conda等都是 Linux 里安装的那个,文件系统、句尾换行符都按 Linux 的标准

    因此,当开发的程序需要使用预编译的外部可执行文件或者引擎时,必须使用 Linux 版本,这样才能在那个环境中正常运行

  • 如果我们想要开发 Win 端的程序,仍然可以使用 WSL 中的环境(因为 Python 的代码是跨平台的,在不同地方写法一样),唯一需要改是:哪些不属于程序一部分的外部引擎、可执行文件,要切换为 Win 的 exe

  • 最重要的一点:将代码打包为程序的PyInstaller是不能交叉打包的,意思是在 Linux 上把代码打包,得到的就是 Linux 的应用程序,要进行Win 开发,那就要把 WSL 里写好的代码移出来,在 Win 系统里打包(但这样就失去了 WSL 的隔离作用,更推荐的办法是借助Github 的 action)


Git部分

安装流程

  1. 一键安装
    sudo apt-get install git
    
  2. 安装完成后使用版本命令检查是否安装成功

    git --version
    

    如果安装成功,那么应该输出当前 git 的版本号

  3. 配置身份信息

    git安装完成后需要配置身份信息,以在提交时标示这次提交是谁做的(这里使用--global参数配置了全局的身份,去掉这个参数就只对当前仓库生效,适用于以不同身份参加不同项目的情况)

    建议将这里的名字设置为 Github 用户名,邮箱设置为 Github 注册邮箱(或者在 Github 设置页面的 Emails 中打开 Keep my email addresses private 使用 noreply 邮箱避免公开自己的邮箱),方便之后的连接

    git config --global user.name "你的名字"
    git config --global user.email "你的邮箱@example.com"
    
  4. 配置默认编辑器

    在进行交互式操作时自动打开VS Code(因为我们已经将 VSCode 连接到了 WSL,这行命令会使用 Windows 的 VS Code 作为编辑器)

    git config --global core.editor "code --wait"
    
  5. 配置main

    在创建仓库时产生的默认分支可能是 master​,而Github 默认用 main,为了之后连接远程仓库方便最好设置一下

    git config --global init.defaultBranch main
    
  6. 换行符配置

    由于不同系统用于标识一行结束的字符是不一样的:win 用 CRLF,而Linux 用 LF,因此在跨平台协作修改同一文件会导致问题,为此 git 提供了一个转换功能,针对我们的情况,建议将其配置为input,这样读写 WSL 中文件时使用的就都是 Linux 所用的 LF 而不会被转换为 CRLF:

    git config --global core.autocrlf input
    

工作原理

  • 分布式版本管理

    因为git的工作过程并不像上面介绍的 conda/docker 的“隔离”那么直观,有必要先对 git 作一些介绍,这样才方便我们之后理解怎么使用:

    git 是一种分布式的版本管理工具,所谓分布式是指记录着全部版本信息的版本库(也就是项目文件夹下那个 .git 目录)在每个开发者自己的电脑里都有一份完整副本,因此提交、查看历史、回退版本这些操作全都能在本地完成,不需要联网

    而在多人协作时,各自把改动推送到一个约定好的共享远程仓库(例如我们之后要用到的 Github),再由其他人从那里拉取,这样就能看见彼此的修改

  • git 的工作过程

    在工作过程中,git 将文件分为三种状态,交由三个区域处理,整个开发过程就是文件在这三种状态之间切换、在这三个区域之间来回移动的过程:

    • 工作区(Working Directory):正在编辑的文件所在的目录,在对文件进行改动后用 git add 把这里改动过的文件送进暂存区

    • 暂存区(Staging Area,也称索引 index​):一份“下次提交要包含哪些内容”的清单,暂存区内是对工作区执行 git add​ 那一刻的文件内容(如果之后又改了同一个文件,得再add一次,否则不会提交新的修改)

      之所以需要这一个区是为了挑选哪些改动会进入下一个版本,用 git commit 把其中的内容送进仓库

    • 仓库(Repository,即 .git 目录):已提交的快照被保存在这里,成为项目历史的一部分

    也就是说文件只朝一个方向走:工作区经 git add​ 进入暂存区,再经 git commit 进入仓库(也可以进行回撤操作)

  • 分支与回退

    版本管理的重要之处在于可以分支(另起炉灶进行其他开发而不干扰原开发线路)与回退(回到之前的版本),这些功能是这样实现的:

    每一次提交,git 都会对整个项目拍一张“快照”,称为commit,而不是记下“哪个文件改了哪几行”,对于没有变化的文件,git 不重复存储,而是让新的快照直接指向上一次那份文件,由此节省开销

    关键在于提交会产生如下信息(了解过 C 语言中的指针与链表会比较好理解接下来的内容)

    • 每一次提交生成的commit记录自己的父提交(同一分支下的前一次提交)是谁,一次次的提交就可被串成一条链
    • 另外有:一个特殊的指针HEAD​,它通常指向当前所在的分支,再由分支指向这条链末尾的那个提交(不是 HEAD 直接指着某个提交)

    在此基础上,通过对指针进行操作,就可以轻松实现分支与回退:

    • 新建分支:就是新建一个指向当前提交的指针,既不移动 HEAD​,也不产生新的提交;在新分支上做第一次提交时,新的 commit 仍以原来那个提交为父,从此长出两条链
    • 回退版本:就是把指针顺着链往回挪,可以选择只回退提交记录,也可以连暂存区、工作区的文件内容一起回退

本地提交管理

  • 注意,因为我们使用 VS code 连接了 WSL 环境,因此虽然 git 运行在 Linux 系统中,但我们仍可以使用 VS code 集成的 git 扩展,将很多操作通过可视化界面实现,在使用命令行时则打开 VS code 的终端即可(接下来的操作会同时给出命令行与图形界面操作的做法)

    另外,git 是一个独立的系统工具,配置文件是全局的,因此在 conda 激活虚拟环境后仍能直接使用 git,各种配置能直接读取(代理设置等环境变量除外);但是docker 却会隔离 git,因此需要在容器内安装 git 才能使用(VS code 的 Dev Containers 扩展会自动处理身份信息共享,也能读取之前的配置)

  1. 初始化仓库

    首先,我们需要为需要管理的项目新建一个仓库,这个仓库好比游戏存档的卡槽位,每次打完都要把进度信息保存到这里

    初始化一个仓库的方法如下:首先进入到项目文件夹的目录下,执行初始化命令

    git init
    

    这样当前打开的文件夹内会产生一个.git 目录,从而成为一个仓库(可以通过rm -rf .git将这个文件夹恢复为普通文件夹,这只会移除 Git 版本控制,不会影响其中文件)

    • 而在 VS Code 中,同样进入到要管理项目的文件夹下,在左侧栏按下源代码管理的图标,然后单击初始化仓库即可

      如果觉得用命令查看、切换各个文件夹路径太麻烦,可以直接点左侧栏上方的资源管理器图标,在此处可以浏览各个文件并新建文件与文件夹

      需要注意的是,单击初始化仓库会将当前打开的文件夹作为项目文件夹,如果想要切换项目文件夹,在菜单栏的 文件 - 打开文件夹 - 按路径逐步选择想作为仓库的文件夹,进入该文件夹后单击右侧 确定,在新打开的 VS Code 单击初始化仓库即可

  2. 提交代码

    首先进入到仓库文件夹的目录下,可以随时用如下命令查看当前状态:哪些文件被修改了、哪些已经进入暂存区、哪些还没被 git 管理

    git status
    

    把文件送进暂存区(对应工作区 → 暂存区这一步),可以指定文件,也可以用 . 表示全部文件:

    git add 文件名
    git add .
    

    然后把暂存区的内容提交成一次快照(对应从暂存区送进仓库这一步),-m 后面跟本次提交的说明:

    git commit -m "本次提交的说明"
    

    可以查看已经提交的历史记录,按时间倒序排列,同时这里也会给出每次commit的ID供回退使用:

    git log
    

    想看具体改了什么:

    git diff #工作区相对暂存区的改动
    git diff --staged #暂存区相对上一次提交的改动
    
    • 在 VS Code 中,这些操作都在左侧栏的源代码管理面板完成:

      发生改动(和新建)的文件会自动在更改菜单下列出来,单击文件旁的 + 即可把这一个文件送进暂存

      在对加入暂存区的文件更改完成并在上方输入框(写有“消息”)填写提交说明后,单击下方提交按钮即可

      源代码管理下方的图表面板会显示提交的关系(也就是前面说的提交串成的链),在此单击任意提交还能看到具体的改动对比

  3. .gitignore

    需要注意的是,并非所有文件都需要进行追踪,比如体积很大的模型、缓存、密钥文件等

    因此在git add .​之前,可以在仓库根目录创建一个.gitignore文件,来告诉 Git 哪些文件/目录不需要纳入版本控制

    示例如下:

    # Python
    
    __pycache__/ 
    # 忽略某个目录的写法
    
    *.py[cod] 
    # 忽略所有同类文件的写法
    
    .venv/ 
    .ipynb_checkpoints/
    
    # 数据与模型(体积大,不要进仓库)
    data/
    *.pth
    *.ckpt
    
    # 更具体的模板可以在https://github.com/github/gitignore/blob/main/Python.gitignore 查询
    

    需要注意的是:如果文件已经被添加过,那.gitignore​的排除就不会生效,需要先执行 git rm --cached 文件名 把误添加的文件从跟踪列表里移除

  4. 撤销与回退

    把文件撤出暂存区(文件内容不变,只是下次提交不再包含它):

    git restore --staged 文件名
    

    放弃工作区里的改动,把文件恢复到上次暂存/提交时的样子(改动会丢):

    git restore 文件名
    

    回退到之前的某次提交,即“把指针往回挪”,用 git reset 加上提交 ID,按彻底程度分三档:

    git reset --soft 提交ID #只移动分支指针,改动全部回到暂存区
    git reset --mixed 提交ID #改动回到工作区(不加参数时的默认行为)
    git reset --hard 提交ID #指针、暂存区、工作区一起退回去,会把未提交的改动一并丢掉,用之前务必确认
    
    • 在 VS Code 中,源代码管理面板里每个文件旁都有放弃更改的按钮(对应 git restore)

      已暂存的文件可以在暂存的更改列表里用 − 号撤出(对应 git restore --staged)

  5. 分支

    查看所有分支(当前所在分支会有 * 标记):

    git branch
    

    新建分支并切换过去,即“新建一个指针并让 HEAD 指过去”:

    git switch -c 分支名 #新建并切换
    git branch 分支名 #只新建,不切换
    git switch 分支名 #切换到已有分支
    

    在分支上做完改动并提交后,可以把分支的修改合并回主分支(主分支名为main​ 或 master​,以 git branch 显示的为准):

    git switch main
    git merge 分支名
    

    合并完如果不再需要这条分支,可以删除:

    git branch -d 分支名
    
    • 在 VS Code 中,单击左下角状态栏的分支名(在远程连接的蓝色按钮右侧)即可新建或切换分支

      合并则通过命令面板(Ctrl + Shift + P)输入 Git: Merge Branch 完成

连接远程仓库

  • 关联远程仓库

    接下来使用SSH方法连接到 Github,配置麻烦一点,但可以一劳永逸(使用 HTTPS 每次操作需要登录验证):

    首先生成SSH密钥

    ssh-keygen -t ed25519 -C "你的邮箱@example.com"
    

    接下来连按三次回车以使用默认设置,然后查看名为id_ed25519.pub的公钥文件:

    cat ~/.ssh/id_ed25519.pub
    

    执行这行命令后,把弹出的整行复制下来,去 GitHub 设置页面的 SSH and GPG keys 单击绿色的 New SSH key,将复制的公钥内容粘贴到 Key 文本框中,Title 可随意填写,然后点击 Add SSH key,之后需要再次登录认证

    然后输入以下命令验证连接是否成功(此处用443端口,避免22端口无法访问):

    ssh -T -p 443 git@ssh.github.com
    

    如果弹出This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])?​ 输入 yes 回车,即可看到Hi 你的用户名! You've successfully authenticated, but GitHub does not provide shell access.

    关联完成后就可以将项目推送到远程仓库,第一步是创建一个远程仓库,在 Github 上新建一个仓库后单击仓库页面的绿色code按钮,单击SSH按键复制git@github.com:...形式的SSH远程仓库网址,接着把本地创建的仓库与这个远程仓库关联起来:

    git remote add origin 远程仓库网址 #origin 就是给这个网址起的默认别名
    git remote -v #查看已经关联的远程仓库
    
    • 在 VS Code 中也可以使用 HTTPS 连接,在提交完成后,源代码管理面板中更改菜单下方的按钮会变成发布Branch,但第一次点击是无法发布的(因为还没有远程仓库可用),在提示需要登录Github的弹出窗口单击允许在浏览器中操作即可

      登录授权之后再在命令面板选择发布到public(代码将公开)或private(私有)仓库提交即可,免去上述的配置操作

  • 推送与拉取

    把本地的提交推送到远程仓库:

    git push
    

    第一次推送某个分支时需要建立关联,之后就可以直接 git push:

    git push -u origin 分支名
    

    反之也可以把远程仓库的新提交拉取到本地:

    git pull
    
    • 在 VS Code 的源代码管理面板中:

      发布Branch对应第一次 git push

      当本地与远程仓库进度不一致时,按钮会变成同步更改,相当于先 git pull​ 再 git push

      VS Code默认使用HTTPS方式连接,如果报错了,可以自行切换到TTS方式,在待同步项目的终端中执行如下命令后再单击同步按键:

      git remote set-url origin git@github.com:你的项目仓库.git
      
  • 获取别人的仓库

    想要开发别人的项目,可以通过刚刚配置的SSH从远程仓库把整个项目连同全部历史下载到本地:

    git clone 远程仓库网址 #单击github仓库页面的绿色code按钮,切换到SSH复制这一串git@github.com:用户名/仓库名.git
    

    之后这个文件夹本身就是一个完整的仓库,可以直接在上面开发提交

  • 协作流程

    日常开发的循环基本是:git pull​ 拉取最新 → 修改文件 → git add​ → git commit​ → git push

    如果两个人改了同一个文件的同一处,git pull​ 时会提示冲突,文件里会用标记把两边的版本都列出来,手动改成想要的样子后,再 git add​ 和 git commit 一次即可

posted @ 2026-09-24 11:41  无术师  阅读(15)  评论(0)    收藏  举报