Git 与 SVN 完全指南:从集中式到分布式的版本控制

大家好,版本控制系统是开发团队协作的基石,它记录文件的变更历史,支持多人协同开发。本文将系统性地讲解SVN(集中式)Git(分布式) 两大版本控制系统的核心概念与常用操作,帮助你快速上手并理解两者的区别。


一、版本控制概述

1.1 什么是版本控制

版本控制是一种记录文件变更的系统,以便日后查阅特定版本的历史记录。它是团队协作开发中不可或缺的工具。

1.2 SVN 与 Git 的核心区别

对比项 SVN(集中式) Git(分布式)
仓库位置 中央服务器 每个本地都有完整仓库
网络依赖 大部分操作需要联网 大部分操作离线完成
分支成本 较高 极低,分支切换快速
历史记录 仅存储在中央服务器 本地完整历史
协作方式 必须与中央服务器同步 可自由在本地操作后推送
适用场景 企业内部、权限管理严格 开源项目、分布式团队

一句话总结:SVN 是集中式的,所有操作依赖中央服务器;Git 是分布式的,每个人本地都有完整的仓库副本。


二、Git 核心概念

2.1 四大区域

区域 说明
工作区(Working Directory) 本地文件目录,即你编写代码的地方
暂存区(Staging Area) 存放准备提交的变更,也称为 Index
本地仓库(Local Repository) 提交历史存储在本地的 .git 目录中
远程仓库(Remote Repository) 托管在服务器上的共享仓库(如 GitHub、Gitee)

2.2 工作流程

复制代码
工作区 → git add → 暂存区 → git commit → 本地仓库 → git push → 远程仓库

三、Git 基础配置

3.1 配置用户信息

Git 需要知道提交者的身份信息。

复制代码
# 全局配置(针对电脑上的所有项目)
git config --global user.name "你的姓名"
git config --global user.email "你的邮箱"

# 局部配置(仅针对当前项目,优先级高于全局)
git config user.name "项目专用姓名"
git config user.email "项目专用邮箱"

# 查看所有配置
git config --list

3.2 初始化仓库

复制代码
# 将当前目录变为 Git 项目,生成 .git 隐藏文件夹
git init

四、Git 基本操作

4.1 查看状态:git status

复制代码
# 查看工作区和暂存区的状态
git status

# 状态颜色说明:
# 白色    正常
# 红色    工作区有修改未提交
# 绿色    暂存区有修改未提交

4.2 添加文件:git add

复制代码
# 将工作区的变更添加到暂存区
git add 文件名          # 添加单个文件
git add .              # 添加当前目录所有变更
git add *.py           # 添加所有 Python 文件

4.3 撤销暂存:git restore --staged

复制代码
# 将暂存区的内容撤销回工作区(取消 git add)
git restore --staged 文件名

# 撤销所有暂存内容
git restore --staged .

4.4 提交:git commit

复制代码
# 从暂存区提交到本地仓库
git commit -m "提交信息"

# 直接提交所有已追踪文件的变更(跳过 git add)
git commit -a -m "提交信息"

4.5 查看提交日志:git log

复制代码
# 查看提交历史(详细)
git log

# 简洁模式(一行一个提交)
git log --oneline

# 查看所有操作日志(包含版本切换记录)
git reflog

4.6 版本回退:git reset

复制代码
# 回退到指定版本(保留工作区变更)
git reset --soft 版本号前缀

# 回退到指定版本(丢弃工作区变更,谨慎使用)
git reset --hard 版本号前缀

不同模式对比

模式 工作区 暂存区 仓库
--soft 保留 保留 回退
--mixed(默认) 保留 清除 回退
--hard 清除 清除 回退

五、Git 分支管理

5.1 分支的核心概念

分支是 Git 最强大的特性之一,允许开发者在独立线上进行开发,不影响主分支。

复制代码
# 查看所有分支(* 表示当前分支)
git branch

# 查看所有分支(包含远程分支)
git branch -a

# 创建新分支
git branch 分支名

# 切换分支
git switch 分支名
# 或使用旧命令
git checkout 分支名

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

# 删除分支
git branch -d 分支名

# 强制删除分支(未合并时使用)
git branch -D 分支名

5.2 合并分支

复制代码
# 将目标分支合并到当前分支
git merge 目标分支名

# 示例:将 dev 分支的代码合并到 main 分支
# 1. 先切换到 main 分支
git switch main
# 2. 执行合并
git merge dev

5.3 合并冲突解决

当两个分支修改了同一文件的同一位置时,Git 无法自动合并,需要手动解决冲突。

复制代码
# 冲突文件中的标记:
<<<<<<< HEAD
当前分支的内容
=======
被合并分支的内容
>>>>>>> 分支名

# 解决步骤:
# 1. 手动编辑文件,删除冲突标记,保留想要的内容
# 2. 重新添加并提交
git add .
git commit -m "解决冲突"

六、Git 与远程仓库

6.1 关联远程仓库

复制代码
# 添加远程仓库
git remote add origin https://github.com/用户名/仓库名.git

# 查看远程仓库
git remote -v

# 修改远程仓库地址
git remote set-url origin 新地址

6.2 推送与拉取

复制代码
# 推送到远程仓库
git push origin 分支名

# 首次推送时设置上游分支
git push -u origin 分支名

# 从远程仓库拉取更新
git pull origin 分支名

# 只拉取不合并(查看远程变更)
git fetch origin 分支名

6.3 克隆仓库

复制代码
# 克隆远程仓库到本地
git clone 仓库地址

# 克隆指定分支
git clone -b 分支名 仓库地址

七、Git 操作流程图

text

复制代码
┌─────────────┐     git add     ┌─────────────┐     git commit    ┌─────────────┐     git push    ┌─────────────┐
│             │    ──────────►  │             │    ────────────►  │             │   ───────────►  │             │
│   工作区    │                  │   暂存区    │                   │  本地仓库   │                  │  远程仓库   │
│             │    ◄──────────  │             │    ◄────────────  │             │   ◄───────────  │             │
└─────────────┘   git restore   └─────────────┘   git reset       └─────────────┘   git pull      └─────────────┘

八、SVN 简介(集中式)

8.1 SVN 的核心概念

SVN(Subversion)是集中式版本控制系统,所有版本历史存储在中央服务器上,开发者需要从服务器获取代码并提交变更。

8.2 SVN 常用命令

命令 说明
svn checkout URL 从服务器检出代码
svn update 更新本地代码到最新版本
svn add 文件 添加文件到版本控制
svn commit -m "msg" 提交变更到服务器
svn status 查看工作副本状态
svn log 查看提交历史
svn diff 查看文件变更差异
svn revert 撤销本地修改

8.3 典型 SVN 工作流程

复制代码
# 1. 首次获取代码
svn checkout 仓库地址


# 2. 更新最新代码
svn update
修改后会变红



# 3. 修改代码后查看状态
svn status


# 4. 添加新文件
TortoiseSVN → Add


# 5. 提交变更
svn commit 

8.4 SVN 与 Git 的对比总结

特性 SVN Git
架构 集中式 分布式
离线操作 有限 完整
分支创建 较慢 极快
分支合并 复杂 高效
权限控制 细粒度 通过平台实现
存储方式 差异存储 快照存储
学习曲线 较平缓 较陡峭

九、常用命令速查表

Git 快速参考

操作 命令
初始化 git init
查看状态 git status
添加文件 git add .
提交变更 git commit -m "msg"
查看日志 git log --oneline
查看操作日志 git reflog
回退版本 git reset --hard 版本号
查看分支 git branch
切换分支 git switch 分支名
创建分支 git branch 分支名
创建并切换 git switch -c 分支名
删除分支 git branch -d 分支名
合并分支 git merge 分支名
关联远程 git remote add origin 地址
推送 git push origin 分支名
拉取 git pull origin 分支名
克隆 git clone 地址
从暂存区撤销 git restore --staged 文件名
丢弃工作区修改 git restore 文件名

SVN 快速参考

操作 命令
检出 svn checkout URL
更新 svn update
添加 svn add 文件
提交 svn commit -m "msg"
查看状态 svn status
查看日志 svn log
撤销修改 svn revert 文件

十、总结

分类 核心内容
SVN(集中式) 中央服务器存储所有版本,checkoutupdatecommit
Git(分布式) 本地完整仓库,addcommitpushpull
Git 四大区域 工作区 → 暂存区 → 本地仓库 → 远程仓库
Git 分支 branchswitchmergebranch -d
版本回退 git reset --hardgit reflog
冲突解决 手动编辑冲突文件,重新 add + commit

SVN 适合权限管理严格的集中式开发场景,Git 则凭借分布式特性和强大的分支管理能力,成为开源项目和现代开发团队的首选。掌握 Git 的基本操作是每位开发者的必修课,建议在实际项目中多练习,逐步熟悉工作流程。

如果觉得这篇内容对你有帮助,欢迎收藏备用。

相关推荐
2301_800954991 小时前
Git 版本控制核心概念详解:从集中式到分布式
分布式·git
天天喝旺仔1 小时前
gRPC 流式通信实战:从一元调用到双向流,吃透四种 RPC 模式(Go 版)
分布式·http·微服务·rpc·go
Draw Stars11 小时前
Git BASH安装教程
开发语言·git·bash
Akiyama_Mio-Kon11 小时前
2026 最新:Dify 本地 Docker 部署完整教程(Windows + Git Bash)
windows·git·docker
福如意如我心意16 小时前
Git Worktree开发指南
git
明达智控技术16 小时前
告别停机内卷!热插拔远程IO,解锁工控运维新范式
分布式·物联网·自动化
漂着的圆木17 小时前
MCP 2026-07-28 长任务改造:别再用 HTTP 超时判断任务失败
分布式·架构·状态模式·ai agent
Patrick_Wilson20 小时前
为什么gitlab的MR会默认有一个merge commit
前端·git·gitlab
是乐乐啊呀21 小时前
版本控制 GIT 和 SVN
git·svn