SVN学习笔记(一)

目录

一、SVN概述

[1. SVN定义:](#1. SVN定义:)

[2. SVN特点:](#2. SVN特点:)

二、SVN下载与安装

[1. SVN 服务端下载、安装与配置(Windows版):](#1. SVN 服务端下载、安装与配置(Windows版):)

[2. SVN客户端下载与安装:](#2. SVN客户端下载与安装:)

三、SVN使用

[1. SVN三大指令:](#1. SVN三大指令:)

[(1) 检出(Checkout):](#(1) 检出(Checkout):)

[(2) 提交(Commit):](#(2) 提交(Commit):)

[(3) 更新(Update):](#(3) 更新(Update):)

[2. 其他常用功能:](#2. 其他常用功能:)

[(1) 与前一版本比较](#(1) 与前一版本比较)

[(2) 显示日志,比较版本差异](#(2) 显示日志,比较版本差异)

[(3) 更新至版本(版本回退)](#(3) 更新至版本(版本回退))

[(4) 获取锁定](#(4) 获取锁定)

[(5) 版本库浏览器](#(5) 版本库浏览器)

[(6) 忽略文件](#(6) 忽略文件)

[(7) 解决冲突](#(7) 解决冲突)

[(8) 属性](#(8) 属性)

[3. SVN 常见图标及含义:](#3. SVN 常见图标及含义:)

[(1) 常见的SVN图标如下图:](#(1) 常见的SVN图标如下图:)


一、SVN概述

1. SVN定义:

SVN 是 subversion 的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。

2. SVN特点:

(1)‌集中式管理‌:所有文件版本都存储在中央服务器,客户端只有工作副本,没有完整历史记录;管理员可以轻松掌握每个人的开发权限。

‌(2)全局版本号‌:每次提交都会生成一个唯一的全局版本号,不同文件的修改共享同一个版本号,方便回溯和对比。

‌(3)原子提交‌:提交操作要么全部成功,要么全部失败,不会出现部分文件更新而其他文件未更新的情况,保证版本完整性。

‌(4)分支和标签管理‌:通过目录复制实现分支和标签,结构清晰,适合企业级项目管理。

‌(5)网络依赖‌:必须联网才能工作,操作都依赖中央服务器,对网络带宽有一定要求。

‌(6)权限控制‌:支持路径级别的访问权限设置,可以针对不同目录或文件分配不同的访问权限。‌‌

二、SVN下载与安装

1. SVN 服务端下载、安装与配置(Windows版):

参考我写的另一篇文章,点击跳转到SVN服务端下载、安装与配置(Windows版)。

2. SVN客户端下载与安装:

参考我写的另一篇文章,点击跳转到 TortoiseSVN 下载与安装。

三、SVN使用

1. SVN三大指令:

(1) 检出(Checkout):

SVN检出是从服务器把代码或文档下载到本地。

**注意:**Checkout只在第一次链接时操作一次,以后如果进行更新操作需使用Update指令。‌‌‌

步骤:

① 在空白目录中"右键 -> SVN检出(K)...":

② 录入版本库URL(新仓库创建完成时显示的"仓库URL")和准备存放的路径:


③ 录入用户名和密码,勾选"保存认证"后,点击"确定":

④ 等待系统检出完成:

⑤ 检出完成后,文件夹中多了一个.svn的隐藏目录(我的是空仓库,所以没有其他文件):

(2) 提交(Commit):

把本地写好的代码上传到服务器,让团队其他人能同步到你的改动。

步骤:

新建文件 --> 右键 --> SVN提交(C)...

(3) 更新(Update):

把服务器上的最新代码拉到本地,确保你基于最新版本开发。

步骤:

右键 --> SVN更新(U)...

2. 其他常用功能:

(1) 与前一版本比较

查看当前文件(或工作副本)和上一次提交版本之间的具体改动‌。

步骤:

在文件(或文件夹)上右键 --> TortoiseSVN --> 与前一版本比较(D)

效果如下图:

(2) 显示日志,比较版本差异

查看仓库提交历史日志,每次commit都会生成一条日志记录。

步骤:

在文件(或文件夹)上右键 --> TortoiseSVN --> 显示日志(L)

效果如下图:

日志里的每一条记录,对应一个修订号。比较任意两条日志差异,本质就是:比较两个修订版本的代码差异,不限于相邻版本。

步骤:

① 选中两个版本(可以不相邻),右键-->点击"比较版本差异(C)":

② 版本2和版本4的差异如下:

(3) 更新至版本(版本回退)

把本地工作副本更新到仓库某个指定历史版本。

步骤:

① 在文件上右键 --> TortoiseSVN --> 更新至版本(U)...,在打开的页面点击"显示日志(L)":

② 选中要回退的版本后(版本3),点击"确定":

③ 刚才选中的版本号(版本3)会显示在下面位置,然后点击"确定":

④看到这个提示,说明回退完成:

(4) 获取锁定

只有你当前这个工作副本,可以提交该文件;其他人提交这个文件会直接被服务器拒绝,防止多人同时修改产生冲突。

步骤:

在文件(或文件夹)上右键 --> TortoiseSVN --> 获取锁定(K)

锁定成功提示如下:

(5) 版本库浏览器

用来直接浏览服务器上的版本库(仓库),不需要本地工作副本。

步骤:

在文件(或文件夹)上右键 --> TortoiseSVN --> 版本库浏览器(R)

效果如下图:

(6) 忽略文件

有些文件不希望上传至svn服务器,应该将该文件或该类型的文件添加至忽略列表。

步骤:

在文件(或文件夹)上右键 --> TortoiseSVN --> 增加到忽略列表(I) --> "可忽略

文件.docx"

|--------------------------|----------------------------------------|
| 可忽略文件.docx | 只忽略文件名叫"可忽略文件.docx"这一个文件。 |
| *.docx | 忽略本文件夹下所有后缀docx文件。 |
| 可忽略文件.docx(recursively ) | 本文件夹 + 所有子文件夹,只要文件名是"可忽略文件.docx",全部忽略。 |
| *.docx(recursively ) | 本文件夹 + 所有子文件夹,所有docx文件全部忽略。 |
| recursively = 递归遍历整棵目录树,包含当前选中目录,连同所有子目录、子目录下全部文件。 ||

(7) 解决冲突

系统提示:

① 当修改完某个文件准备"提交"时,系统提示"提交失败",提示信息如下,说明在你提交前有其他人已经提交过此文件,此时需先更新工作副本。

② 由于你本地文件已经修改过,在点击"更新"后,系统提示信息如下:

解决步骤:

① 产生冲突时,更新后在当前目录下会多出3个文件,如下图:

说明:

|----------------------|---------------------------------------------------------------------------------------------------|
| HelloWorld.java | 主文件,里面带冲突标记。 <<<<<<<和=======之间:**你的本地修改** =======和>>>>>>>之间:**服务器上别人提交的修改** |
| HelloWorld.java.mine | 更新操作之前,你本地修改后的版本。 |
| HelloWorld.java.r3 | 基础版本(版本号为:3),你上次更新后、还没做任何修改的原始文件,是你和对方共同的起点版本。即:你们两个人都是基于 r3 这个版本开始修改代码。 |
| HelloWorld.java.r8 | 服务器最新版本(版本号为:8),别人已经提交到 SVN 仓库的版本(r8),即:别人改完提交后的代码。 |

② 打开HelloWorld.java文件:

③ 保留你们俩人修改的内容,并删除SVN生成的标记行,如下图:

④ 删除另外3个文件(即:.mine/.r3/.r8):

⑤ 重新提交SVN:

(8) 属性

查看某个文件(或文件夹)在SVN仓库里的完整路径(仓库地址 + 目录 + 文件名)。

步骤:

在文件(或文件夹)上右键 --> 属性(Windows属性窗口) --> 切换到

"Subversion"标签页:

3. SVN 常见图标及含义:

(1) 常见的SVN图标如下图:

  1. "常规":文件与版本库完全同步,没有本地修改,这是最理想的状态。

  2. "冲突":更新时产生了冲突,说明你和其他人改了同一处代码,需要手动处理解决冲突。‌‌

  3. "已删除":文件或文件夹被计划删除,或者表示文件缺失。

  4. "增加":文件或文件夹已被计划加入版本控制,但还没提交,是新加入的文件。

  5. "无版本控制":表示暂时还没有版本的控制,但没有被忽略。

  6. "修改":文件被本地修改过,但还没提交,需要尽快 commit。

  7. "只读":文件是只读的,这是设置只读属性后才会出现的标识,编辑前需要先获取文件锁。

  8. "锁定":表示文件被锁定,必须先释放锁才能让别人的修改提交。

  9. "忽略":文件不受版本控制,已被忽略。

相关推荐
传奇开心果编程1 小时前
【ArkUI提高练中学】第7课:性能调优与稳定性治理
学习·ui·华为·harmonyos
高山有多高1 小时前
【Linux笔记】线程同步与互斥
linux·笔记
艾莉丝努力练剑1 小时前
【QT】系统相关:多线程QThread基础
开发语言·网络·c++·qt·学习·大模型
sunshine22 girl1 小时前
Java学习五 面向对象高级5 内部类4-匿名内部类(重点)
java·学习
奕鼎竜瑆1 小时前
GPT-6 Luna Batch API 调用实践笔记
笔记·gpt·batch
妄汐霜1 小时前
SSE,RocketMQ,MQTT不同之处
笔记·学习·rocketmq
starsky762382 小时前
Agent学习——AI Agent总体概览
学习
東隅已逝,桑榆非晚2 小时前
c++模板进阶
开发语言·c++·笔记·学习
JWASX2 小时前
Java 转 go 学习 - map
学习·golang