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. "忽略":文件不受版本控制,已被忽略。

相关推荐
电子云与长程纠缠36 分钟前
UE5魂系游戏开发教程05
开发语言·学习·游戏·ui·ue5
syagain_zsx1 小时前
BRpc 二次封装:Channel 管理、服务管理与回调工厂
c++·学习·程序人生·rpc·谷歌
其实防守也摸鱼1 小时前
Cylab在线靶场——CTF中的通用技能
linux·数据库·学习·算法·靶场·ctf·学习网络安全
我命由我123451 小时前
Python 开发 - Python 的 pathlib
java·开发语言·后端·python·学习·java-ee·学习方法
摇滚侠2 小时前
《Java并发编程之美》第 4 章 Java 并发包中原子操作类原理剖析 阅读笔记 7
java·笔记·python
kkkkkkkkkk_Z2 小时前
新手自学嵌入式 | 学习日记:Linux驱动复习之系统移植(U-Boot篇)
linux·运维·学习
Rabitebla2 小时前
【系统性学习笔记】Linux 权限篇(二):文件属性、权限修改与目录权限的底层逻辑
linux·c++·笔记·学习·算法
深圳老胡3 小时前
STM32CubeMX 2 与 STM32CubeMX 的主要区别
笔记·stm32·单片机·代码规范
fanged4 小时前
嵌入式架构学习6--ZSWatch(TODO)
学习
叼烟扛炮4 小时前
Linux 学习笔记(十三):高效排错利器——GDB 调试器入门
linux·笔记·学习