开发第零课:WSL/Conda/Docker/git/VSCode 入门使用一文速查
前言
-
有很多开发工作在 Linux 上进行,但我们一般用的是 Windows 系统,一个简单的方法是借助虚拟机安装一个Linux系统,但其资源占用大,有一个更轻量高性能的解决方案是WSL2
而使用WSL2及其中的各种环境配置往往使用命令行,因此写作此文,以便查询
WSL部分
准备工作
-
启用WSL2
打开启用或关闭windows功能,启用WSL2需要勾选的组件包括:
- 适用于 Linux 的 Windows 子系统
- 虚拟机平台
之后会提示重启系统
-
安装 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配置
-
进入系统
系统安装完成后,会自动启动Linux系统,或者输入:
wsl -d Ubuntu-26.04首次进入系统会提示创建一个默认账户:输入账户名后回车,再设定相应密码(输入密码时不会显示字符)回车后会要求重复输入一遍所设密码
如果系统提问
Would you like to opt-in to platform metrics collection,输入n再回车然后就会进入 Linux 系统中,之后想要启动可以使用如下命令:
wsl ~ -
配置镜像
为了加速软件包的下载,我们在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.gpgnano编辑器在下方有各种操作的快捷键提示(符号
^ 代表Ctrl 键,M- 代表Alt键),具体操作如下:- 首先按
Alt+A进入选择模式,使用方向键移动选中原本的配置文件再删除 - 在复制镜像站配置后,到终端窗口单击鼠标右键即可粘贴(在Windows复制,则在WSL用鼠标右键粘贴,如果按照nano编辑器的提示使用
Ctrl+U只能粘贴Linux内部复制的东西) - 按
Ctrl + O 保存文件,然后按Enter 确认文件名,按Ctrl + X退出编辑器
完成后进行更新,让系统识别新的源:
sudo apt update更新源后进行一次软件包更新:
sudo apt upgrade -y - 首先按
迁移系统
-
为何推荐迁移系统
此步并不必要,但做这一步有以下三个原因:
-
WSL默认将数据都放在C盘的用户文件夹下,在使用过程中可能出现空间不足问题,因此我们希望将其数据移动到其他地方
注:默认的系统存放位置为
C:\Users\<用户名>\AppData\Local\Packages\<发行版包名>\LocalState\ext4.vhdx -
防止系统所用虚拟磁盘损坏时波及主机系统的用户文件
-
哪怕C盘空间充足不需要迁移,也可以把配置好的系统导出一份镜像作为备份,可以再次导入免去重复配置的麻烦
迁移(备份)系统在Windows的系统终端中进行,分为以下四步(下方的系统与路径名根据个人情况修改):
-
-
导出当前的系统
首先查看要导出的系统名,使用如下指令列出安装的 Linux 系统
wsl -l -v如果发现刚刚安装的系统是
Running状态,就使用如下命令关闭WSLwsl --shutdown然后再导出系统,两个参数分别是要导出的系统名字,导出的路径及其文件名
例如下列指令会把系统导出到D盘的
Ubuntu.tar文件中(注意,路径需要存在才能执行,需要事先建好相应文件夹)wsl --export Ubuntu-26.04 D:\Ubuntu.tar -
卸载原来的系统
wsl --unregister Ubuntu-26.04 -
重新导入系统
导入命令的三个参数分别是导入的系统名,新的系统存放路径,要导入的系统镜像文件路径
wsl --import Ubuntu-26.04 D:\WSL\Ubuntu D:\Ubuntu.tar -
导入系统的配置
重新导入的系统会继承之前的配置,也就可以跳过此步骤,需要注意的是,如果在导出前没有配置用户,那进入导入的系统会默认使用
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部分
安装流程
-
先更新系统包,安装wget(之前执行过可跳过)
sudo apt update && sudo apt upgrade -ysudo apt install wget -y -
下载安装脚本
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -
运行安装脚本
bash Miniconda3-latest-Linux-x86_64.sh -
然后一直yes和回车,保持默认配置即可
-
安装完成后使用版本命令检查是否安装成功
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环境
- 需要先为 VS code 安装 Python 插件,在 WSL 中启用
- 在 WSL 连接状态下按
Ctrl + Shift + P 打开命令面板,输入Python: Select Interpreter选择解释器 - 会列出所有 conda 环境,选择
~/miniconda3/envs/创建的虚拟环境名称/bin/python即可
Docker部分
安装流程
-
一键安装脚本
curl -fsSL https://get.docker.com | sh #官方一键安装脚本 bash <(curl -sSL https://xuanyuan.cloud/docker.sh) #如果无法连接到官方服务器,可以使用这个镜像脚本 -
权限配置
docker 的运行需要使用 sudo 权限,为了方便可以将我们的用户添加到 docker 的用户组,让普通用户以 root 权限运行 docker 命令(需要重启生效)
sudo usermod -aG docker $USER -
配置自启动
每次打开 Linux 都需要启动 Docker,再开所需要的容器,太麻烦了,可以配置让 Docker 的后台服务随着 Linux 自启动
(若提示 systemd 相关错误,需要先设置
systemd=true后重启)sudo systemctl enable docker -
安装完成后使用命令检查是否安装成功
docker run hello-world如果安装成功,稍等一会,输出内容应该包含如下一句(其他不用管)
Hello from Docker! -
安装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,而是用startdocker start 容器名 -
镜像管理
查看镜像
docker images删除镜像
docker rmi 镜像名 -
容器管理
查看容器
docker ps #这里看到的是运行中的容器 docker ps -a #所有的容器停止容器
docker stop 容器名删除容器
docker rm 容器名
VSCode中连接Docker容器
-
Docker扩展
安装 Dev Containers 扩展与 Docker 扩展(还需要前文提到的WSL扩展)
-
连接流程
- 在 WSL 连接状态下按
Ctrl + Shift + P 打开命令面板,输入Dev Containers: Attach to Running Container... - 会列出所有容器,选择正在运行的容器即可
- 在 WSL 连接状态下按
关于跨平台开发
-
因为我们是在 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部分
安装流程
-
一键安装
sudo apt-get install git -
安装完成后使用版本命令检查是否安装成功
git --version如果安装成功,那么应该输出当前 git 的版本号
-
配置身份信息
git安装完成后需要配置身份信息,以在提交时标示这次提交是谁做的(这里使用
--global参数配置了全局的身份,去掉这个参数就只对当前仓库生效,适用于以不同身份参加不同项目的情况)建议将这里的名字设置为 Github 用户名,邮箱设置为 Github 注册邮箱(或者在 Github 设置页面的 Emails 中打开 Keep my email addresses private 使用 noreply 邮箱避免公开自己的邮箱),方便之后的连接
git config --global user.name "你的名字" git config --global user.email "你的邮箱@example.com" -
配置默认编辑器
在进行交互式操作时自动打开VS Code(因为我们已经将 VSCode 连接到了 WSL,这行命令会使用 Windows 的 VS Code 作为编辑器)
git config --global core.editor "code --wait" -
配置main
在创建仓库时产生的默认分支可能是
master,而Github 默认用main,为了之后连接远程仓库方便最好设置一下git config --global init.defaultBranch main -
换行符配置
由于不同系统用于标识一行结束的字符是不一样的: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 扩展会自动处理身份信息共享,也能读取之前的配置)
-
初始化仓库
首先,我们需要为需要管理的项目新建一个仓库,这个仓库好比游戏存档的卡槽位,每次打完都要把进度信息保存到这里
初始化一个仓库的方法如下:首先进入到项目文件夹的目录下,执行初始化命令
git init这样当前打开的文件夹内会产生一个.git 目录,从而成为一个仓库(可以通过
rm -rf .git将这个文件夹恢复为普通文件夹,这只会移除 Git 版本控制,不会影响其中文件)-
而在 VS Code 中,同样进入到要管理项目的文件夹下,在左侧栏按下源代码管理的图标,然后单击初始化仓库即可
如果觉得用命令查看、切换各个文件夹路径太麻烦,可以直接点左侧栏上方的资源管理器图标,在此处可以浏览各个文件并新建文件与文件夹
需要注意的是,单击初始化仓库会将当前打开的文件夹作为项目文件夹,如果想要切换项目文件夹,在菜单栏的 文件 - 打开文件夹 - 按路径逐步选择想作为仓库的文件夹,进入该文件夹后单击右侧 确定,在新打开的 VS Code 单击初始化仓库即可
-
-
提交代码
首先进入到仓库文件夹的目录下,可以随时用如下命令查看当前状态:哪些文件被修改了、哪些已经进入暂存区、哪些还没被 git 管理
git status把文件送进暂存区(对应工作区 → 暂存区这一步),可以指定文件,也可以用
.表示全部文件:git add 文件名 git add .然后把暂存区的内容提交成一次快照(对应从暂存区送进仓库这一步),
-m后面跟本次提交的说明:git commit -m "本次提交的说明"可以查看已经提交的历史记录,按时间倒序排列,同时这里也会给出每次
commit的ID供回退使用:git log想看具体改了什么:
git diff #工作区相对暂存区的改动 git diff --staged #暂存区相对上一次提交的改动-
在 VS Code 中,这些操作都在左侧栏的源代码管理面板完成:
发生改动(和新建)的文件会自动在更改菜单下列出来,单击文件旁的 + 即可把这一个文件送进暂存
在对加入暂存区的文件更改完成并在上方输入框(写有“消息”)填写提交说明后,单击下方提交按钮即可
源代码管理下方的图表面板会显示提交的关系(也就是前面说的提交串成的链),在此单击任意提交还能看到具体的改动对比
-
-
.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 文件名把误添加的文件从跟踪列表里移除 -
撤销与回退
把文件撤出暂存区(文件内容不变,只是下次提交不再包含它):
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)
-
-
分支
查看所有分支(当前所在分支会有
*标记):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 pushVS 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一次即可
本文来自博客园,作者:无术师,转载请注明原文链接:https://www.cnblogs.com/artlessist/p/23108486
本文使用知识共享4.0协议许可 CC BY-NC-SA 4.0
特别说明版权归属的文章以及不归属于本人的转载内容(如引用的文章与图片)除外

浙公网安备 33010602011771号