代码管理——VS Code|Git

代码管理------VS Code|Git

VS Code 与 Git 的教程网上已有很多,这里结合自己使用经验,整理一下笔记,方便自用查阅,也给有需要的朋友参考。(小白友好篇)

1、配置密钥

说明:为什么要配置密钥呢(其实主要是公钥),假设现在是这样的场景,使用VS Code通过SSH连接上了服务器上的代码工程(或者是本机硬盘中的代码工程),想要和远程仓库(GitLab为例)进行交互,如git pushgit pull 等涉及远程交互的操作时,如果没有在GitLab 上配置 SSH 公钥,则 Git 会要求输入 GitLab 的 用户名和密码 进行身份验证。
具体原因:Git 与远程仓库(如 GitLab)的身份验证方式(这里主要讲述基于SSH协议的连接方式,因为大多数情况下我们都是使用VS Code的Remote-SSH插件连接服务器,事实上还有基于HTTPS协议的连接),要求本地私钥与 GitLab 配置的公钥匹配进行验证,验证通过后,则无需每次输入密码(配置一次即可)。

为避免频繁输入密码,所以一般都在 GitLab 上配置 SSH 公钥,使用 SSH 协议连接远程仓库,一劳永逸解决身份验证问题。(如果之前配置过,则不需要重复再配置)


首先,进入VS Code 远程服务器的工程中,终端执行:

Shell 复制代码
# 在服务器上生成 SSH 密钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 例如
ssh-keygen -t rsa -b 4096 -C "123456789@qq.com"
  • ssh-keygen:生成 SSH 密钥的核心工具,是 OpenSSH 套件的一部分,几乎所有 Linux/Unix 系统(包括服务器)都预装。

  • -t rsa :指定密钥的加密算法为RSA (一种主流的非对称加密算法)。常见的算法还有ed25519(更安全高效,推荐优先使用)、dsa(已不安全,不建议)等。

  • -b 4096 :指定密钥的长度为4096 位。位数越高,密钥安全性越强(破解难度越大),4096 位是目前的推荐标准(替代了传统的 2048 位)。

  • -C "your_email@example.com" :给密钥添加一个注释(Comment),通常用邮箱或用户名,方便识别这个密钥的用途或归属(比如 "服务器 A 的登录密钥""GitHub 账号绑定" 等),不影响密钥功能。

运行后,会出现交互提示:Enter file in which to save the key (/root/.ssh/id_rsa):

解释:

  • 默认路径是当前用户的.ssh目录(如/root/.ssh/,普通用户是/home/用户名/.ssh/),文件名默认是id_rsa(私钥)和id_rsa.pub(公钥)。

  • 直接按回车使用默认路径;若想自定义(比如区分多个密钥),输入路径 + 文件名(如/root/.ssh/server_key)。

对于保存密钥的位置,直接按回车键,接受默认位置(/root/.ssh/id_rsa)即可。

【注意】如果是docker使用的话,最好放置在/home下面,可持久化,避免重启docker丢失数据,如果更改了密钥地址,如放置在/home/.ssh/id_rsa,则需设置Git的SSH命令 git config core.sshCommand "ssh -i /home/.ssh/id_rsa"来配置SSH默认在/home/.ssh/目录下查找密钥。

这里直接回车后,显示:

对于密码短语(passphrase),可以直接按回车键设置为空(推荐,这样后续使用 git 时不需要每次输入密码),或者设置一个密码(如果需要更高的安全性)。

我这里直接回车,即密码为空

完成后,系统会生成:

  • 私钥:/root/.ssh/id_rsa,私钥(重要!妥善保管,不可泄露给他人,相当于 "钥匙")。

  • 公钥:/root/.ssh/id_rsa.pub,公钥(可以公开,相当于 "锁",用于配置到需要登录的目标服务器、代码仓库等)。

Python 复制代码
# 查看公钥内容

cat ~/.ssh/id_rsa.pub

公钥内容,看起来类似于:

Python 复制代码
ssh-rsa AAAAB3NzaC1yc2E... your_email@example.com

生成密钥后,通常将公钥(id_rsa.pub)的内容添加到目标设备的授权列表中,例如:

  • 免密码登录其他服务器:将公钥内容追加到目标服务器的~/.ssh/authorized_keys文件中。

  • 授权访问 GitHub/GitLab:将公钥内容添加到平台的 "SSH 密钥" 设置中。

复制显示的公钥内容,将这个公钥添加到自己的 GitLab 账号中:

  • 登录 GitLab

  • 进入 Settings(设置)

  • 找到 SSH Keys

  • 粘贴公钥内容并保存

完成这些步骤后,就可以通过 SSH 来访问 GitLab 仓库了。

2、配置用户

说明:Git 是一个分布式版本控制系统,核心功能之一是记录代码的每一次修改(即 "提交")。每一次 git commit 操作都会生成一条提交记录,而 user.nameuser.email 会被嵌入到这条记录中,作为 "谁提交了这次修改" 的标识。配置用户身份其实就是配置user.nameuser.email,本质是为了明确代码提交的归属者,确保每一次代码变更都能追溯到具体的提交人。

例如,当我们执行 git log 查看提交历史时,会看到类似这样的信息:

Python 复制代码
commit a1b2c3d4e5f6...
Author: Your Name <your_email@example.com>
Date:   Thu Nov 6 10:00:00 2025 +0800

    修复了XX功能的bug

这里的 Author 信息就来自于 git config 配置的 user.nameuser.email

配置用户方式,可以分为全局Git身份和按仓库单独配置身份。

2.1 服务器配置全局Git用户身份

在服务器上配置 Git 全局设置(如果还没有配置):

Shell 复制代码
git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"

Your Name 是在 GitLab 上的用户名称,这个名字会显示在代码提交记录中,可以按以下步骤在 GitLab 中查看自己的用户名:

  1. 登录到 GitLab

  2. 点击右上角头像

  3. 查看个人资料(Profile)

在 GitLab 中,可以看到两个相关的名字:

  • Username:登录用户名

  • Name:显示名称

通常,我们在 git config 中设置的 user.name 应该使用显示名称(Name),这样在代码提交历史中会更容易识别。

例如,如果在 GitLab 中的显示名称是 "Zhang San",那么可以这样配置:

Shell 复制代码
git config --global user.name "Zhang San"
git config --global user.email "your_email@example.com"

可以通过以下命令验证设置:

Shell 复制代码
# 查看当前的 git 配置
git config --global --list

提示:

  • user.name 可以是中文名也可以是英文名。

  • user.email 应该使用在 GitLab 注册时使用的邮箱。

  • 这个设置是为了标识代码提交者的身份,建议使用真实姓名,这样团队协作时更容易识别。

2.1 按仓库单独配置身份

git config --global 配置的是当前用户(在服务器上通常是 root 或某个共享用户)的全局 Git 身份,这会导致所有通过该用户提交的代码都显示为同一个名字和邮箱,无法区分实际提交者,确实不适合多人共用的服务器环境。

其实更合理的做法是 不设置全局身份,而是在每个 Git 仓库中单独配置提交者信息,确保不同开发者提交的代码能正确显示各自的身份。

操作步骤:

  • 清除服务器上的全局 Git 身份(如果已配置),使用unset
Python 复制代码
git config --global --unset user.name
git config --global --unset user.email
  • 进入具体的 Git 仓库,单独配置当前仓库的提交者信息

每个开发者在服务器上操作自己的仓库时,先进入仓库目录,设置自己的身份:

Python 复制代码
# 进入仓库目录
cd /path/to/your/repo

# 配置当前仓库的提交者姓名(替换为实际姓名)
git config user.name "张三"

# 配置当前仓库的提交者邮箱(替换为实际邮箱)
git config user.email "zhangsan@example.com"

这样,该仓库的所有提交都会使用这里配置的身份,不影响其他仓库。

3、关联远程仓库及提交

3.1 关联

初始化本地仓库并关联远程仓库:

Shell 复制代码
# 进入项目目录,例如
cd /home/Projects/my_pro

# 初始化 Git 仓库(如果还没有初始化),会在工程目录中出现.git
git init

# 添加远程仓库,例如
git remote add origin ssh://git@192.11.22.33:44/a/b.git

# 确认远程仓库已添加
git remote -v

关联作用:告诉Git远程仓库的位置,后续可以推送和拉取代码。

指令解释:

  • git remote add <名称> <URL>: 添加远程仓库

  • origin: 远程仓库的默认名称(可以自定义)

  • 可用git remote -v查看已配置的远程仓库

3.2 .gitignore文件创建(可选)

一般情况下,我们的工程根目录下可能会存在一些测试用的文件(如视频、图像等)或者内存占用较大的文件(模型等),在管理或提交Git时,我们是不想将这类文件上传至远端的,故会通过.gitignore文件排除这些文件类型。

例如:

  • Python缓存:__pycache__/, *.pyc

  • 日志文件:logs/, *.log

  • 大型数据文件:*.tif, *.jpg, *.png, *.gif, *.mp4

  • 临时文件:tmp/, *.tmp

  • 环境文件:.env, venv/

  • IDE文件:.vscode/, .idea/

示例.gitignore

Python 复制代码
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyTorch models and weights
*.pth
*.pt
*.bin
*.safetensors
*.ckpt
*.model

# Model directories
clip_algorithms/weights/
vlm_algorithm/Qwen2-VL-2B-Instruct/
match_algorithms/XFeat/weights/
scd_algorithm/weights/
scd_algorithm/src/segment_anything/sam_vit_h_4b8939.pth
docs/
cache_results/

# Large data files
*.tif
*.tiff
*.jpg
*.jpeg
*.png
*.gif
*.mp4
*.avi
*.mov
*.pdf
*.md

# Logs
logs/
*.log

# IDE
.vscode/
.idea/
*.swp
*.swo
*~

# OS
.DS_Store
Thumbs.db

# Temporary files
tmp/
temp/
*.tmp

# Environment
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Jupyter Notebook
.ipynb_checkpoints

4.3 代码提交

首先是使用 git add .git commit -m "..." 这两步操作,将代码变更提交到本地的版本历史中,但不会自动推送到远程的 GitLab 仓库。

Python 复制代码
# 将所有文件添加到暂存区(.gitignore会自动排除不需要的文件)
git add .
# 作用:准备要提交的文件,Git会跟踪这些文件的变化

# 提交代码到本地仓库,-m参数指定提交信息
git commit -m "Initial commit: 填你的改动信息用于日志记录"

指令解释:

  • git add .: 添加当前目录下所有文件到暂存区

  • git add <文件名>: 添加指定文件到暂存区

  • git commit -m "信息": 提交暂存区的文件到本地仓库

  • 提交信息应该清晰描述本次修改的内容。

接着,将本地提交推送到远程 GitLab,执行:

Shell 复制代码
git push origin <分支名>

其中, origin 是远程仓库的默认别名(初始化仓库时通过 git remote add origin <远程地址> 设置)。
<分支名> 通常是我们当前工作的分支(如 mainmaster,多人协作时可能是 feature 分支)。

例如,我这里执行:

Shell 复制代码
git push -u origin master

其中的 -u 是因为第一次推送该分支到远程,需要加上 -u 参数关联分支(后续推送可省略),完成推送。

【注意】因为是第一次提交,这里需要确保远程仓库(GitLab)的 master 分支为空,或者和本地代码一样,为空的话,会直接提交成功,不为空的话,若master 分支存在本地没有的更新,此时 Git 会拒绝推送,防止覆盖远程的变更,此时就需要执行 git pull 命令,将远程 master 分支的更新拉到本地,并自动合并到你的本地 master 分支:git pull origin master --allow-unrelated-histories(其中的--allow-unrelated-histories是用于强制合并两个 "无关联历史" 的仓库,避免两者没有共同的历史提交,或者本地和远程的仓库起源不同,如本地是全新仓库,远程是另一个独立仓库),如果合并过程中出现 冲突(Conflict),终端会提示哪些文件有冲突。此时需要打开这些文件,找到类似 <<<<<<< HEAD、=======、>>>>>>> origin/master 的标记,手动编辑保留正确的代码,然后保存文件。解决冲突后,需要手动提交合并结果:

Shell 复制代码
git add .  # 暂存冲突文件
git commit -m "解决合并冲突,整合远程更新"  # 提交合并

接着再次推送本地代码,重新执行推送命令即可:

Shell 复制代码
git push -u origin master

习惯使用VS Code后,这些操作都可以在源代码管理界面中点击对应按钮来完成,无需手动输入命令。

4、Git使用

本地工程关联远程仓库之后,就可以执行Git相关的操作了。为了保持知识完整,这里补充一下Git相关知识和操作指令等。

4.1 Git概念

概念性的东西了解一下即可,不断使用的过程中才能逐步加深理解。

Git是一个分布式版本控制系统,用于跟踪文件的变化历史,支持多人协作开发。

Git有几个核心概念:

  • 仓库(Repository): 存储项目文件和版本历史的地方。

  • 提交(Commit): 保存文件变化的快照。

  • 分支(Branch) : 独立的开发线,默认分支通常是mastermain

  • 远程仓库(Remote): 托管在服务器上的仓库,用于团队协作。

  • 克隆(Clone): 从远程仓库复制到本地。

  • 推送(Push): 将本地提交上传到远程仓库。

  • 拉取(Pull): 从远程仓库下载最新变化。

还有三个区域概念:

  • 工作区(Working Directory): 你直接编辑的文件。

  • 暂存区(Staging Area) : git add后文件存放的地方。

  • 本地仓库(Repository) : git commit后文件存放的地方。

4.2 Git操作一般流程

1、初始化项目流程:

Python 复制代码
创建项目 → 初始化Git → 添加文件 → 提交 → 连接远程仓库 → 推送

操作总结:

Python 复制代码
1、初始化本地git
git init
2、将工程文件添加到暂存区
git add .
3、提交本地代码,提交暂存区文件到本地仓库:
git commit -m "初始化项目提交"  # 引号内为提交说明,可自定义
4、在GitLab上创建新项目,创建后,复制项目的HTTPS或SSH地址(如:https://gitlab.com/用户名/项目名.git)
5、关联本地仓库与GitLab远程仓库
在 VS Code 终端中执行:
git remote add origin 你复制的GitLab仓库地址
(如果提示remote origin already exists,可先执行git remote rm origin删除旧关联)
6、推送本地代码到 GitLab
首次推送需指定分支(默认主分支为main或master):
git push -u origin main  # 若分支是master则替换为git push -u origin master,第一次关联需要加-u
此时会提示输入 GitLab 的账号密码(或 SSH 密钥验证)。
另外,需确保远端仓库为空或者远端与要推送的代码无变更,否则Git会拒绝推送,防止覆盖远程的变更。
解决方法:先拉取远程的最新代码,合并到本地后再推送。
7、验证配置成功
刷新 GitLab 项目页面,若能看到本地工程文件,说明配置完成
后续开发时,只需通过 VS Code 左侧的 "源代码管理" 图标(或快捷键Ctrl+Shift+G)进行提交、拉取、推送等操作即可。

2、日常开发流程:

Python 复制代码
拉取最新代码 → 修改文件 → 添加到暂存区 → 提交 → 推送到远程

3、团队协作流程:

Python 复制代码
克隆仓库 → 创建分支 → 开发功能 → 提交 → 推送分支 → 合并请求

4.3 常用Git指令

1、查看状态和历史

Python 复制代码
git status          # 查看工作区状态
git log             # 查看提交历史
git log --oneline   # 简洁的提交历史
git diff            # 查看工作区与暂存区的差异
git diff --cached   # 查看暂存区与仓库的差异

2、分支操作

Python 复制代码
git branch          # 查看本地分支
git branch -r       # 查看远程分支
git branch -a       # 查看所有分支
git checkout -b 新分支名  # 创建并切换到新分支
git checkout 分支名      # 切换分支
git merge 分支名         # 合并分支

3、撤销操作

Python 复制代码
git checkout -- 文件名   # 撤销工作区修改
git reset HEAD 文件名    # 撤销暂存区修改
git reset --hard HEAD~1  # 撤销最近一次提交

4、远程仓库操作

Python 复制代码
git remote -v           # 查看远程仓库
git fetch origin        # 获取远程更新(不合并)
git pull origin master  # 拉取并合并远程更新
git push origin master  # 推送到远程仓库

4.4 VSCode中使用Git

  • VSCode 远程 SSH 连接后(或者直接使用本机本地代码工程),会自动识别项目中的 Git 仓库

  • 在左侧活动栏中点击 "源代码管理" 图标(分支图标)

  • 可以直接在 VSCode 中:

    • 查看文件变更

    • 暂存更改

    • 提交代码

    • 推送/拉取代码

    • 切换分支

    • 查看历史记录等等

4.5 实用Git插件

  • Git History

  • Git Graph

4.6 常见问题

1、执行 git push -u origin master 时报错,错误关键字包含类似 "Connection closed by GitLab的IP port"的错误,导致无法连接远程仓库,通常是 SSH 密钥认证失败 或 服务器配置限制 导致的,可以:

  • 重新查看本地公钥(确保复制完整), cat ~/.ssh/id_rsa.pub,确保公钥从 ssh-rsa 开头到 邮箱 结尾的全部内容粘贴至GitLab的"Add key" 中并保存。
  • 手动测试与 GitLab 服务器的 SSH 连接,确认是否能成功认证,例如出现 Connection closed by 192.000.111.22 port 7022 错误,可以输入 ssh -T -p 7022 git@192.000.111.22来确认(如果改过密钥地址,则加-i参数来指定其地址,例如 ssh -i /home/.ssh/id_rsa -T -p 7022 git@192.000.111.22),正常情况下,成功会提示:Welcome to GitLab, @你的GitLab用户名!。
  • 检查仓库成员权限,确认被添加到仓库成员中,且权限级别允许推送代码。

2、如果原本GitLab的<远程地址>本来就存在代码,而我们第一次要推送的代码存在更新,则需要先拉取远程的最新代码,合并到本地后再推送。

3、如果更改了密钥地址,如放置在/home/.ssh/id_rsa,则需设置Git的SSH命令 git config core.sshCommand "ssh -i /home/.ssh/id_rsa"来配置SSH默认在/home/.ssh/目录下查找密钥。

相关推荐
Trouville012 小时前
如何在VScode环境下使用git进行版本控制,并上传到gitee远程仓库
ide·git·vscode
weixin_423391933 小时前
从开发到合并:AICR 项目 Git 协作提交全流程指南
git
paishishaba5 小时前
Git常用命令大全及提交推送详解
git
卡洛斯(编程版7 小时前
大仓库推到GitHub大踩坑-Git LFS从安装到使用
git·github
玥轩_5217 小时前
Git命令速查手册
大数据·git·elasticsearch·gitee·github·命令速查
诸葛思颖12 小时前
把本地 Python 项目用 Git 进行版本控制并推送到 GitHub
git·python·github
chhanz1 天前
git/github入门基操(终端版)
git·github
林晓lx1 天前
使用Git钩子+ husky + lint语法检查提高前端项目代码质量
前端·git·gitlab·源代码管理
诸葛思颖1 天前
一个本地 Git 仓库关联多个远程仓库
git