版本控制系统

版本控制系统

1. 引言

1.1 什么是版本控制

什么是“版本控制”?版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。

1.2 版本控制系统分类

1.2.1 本地版本控制系统

其中最流行的一种叫做 RCS(Version Control Systems),现今许多计算机系统上都还看得到它的踪影。 RCS 的工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。

image-20241210160840152

1.2.2 集中化的版本控制系统

如何让在不同系统上的开发者协同工作? 于是,集中化的版本控制系统( CVCS)应运而生。 这类系统,诸如 CVSSubversion 以及Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。

image-20241210161127422

缺点:中央服务器的单点故障。

1.2.3 分布式版本控制系统

分布式版本控制系统(Distributed Version Control System,DVCS),像Git、Mercurial 以及 Darcs 等,客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像下来,包括完整的历史记录。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。

image-20241210161625132

1.3 版本控制工具比较

特性 VisualSVN 纯 Subversion Git
平台 Windows 专用 跨平台 跨平台
易用性 高,提供 GUI 管理工具 中,需要手动配置和管理 高,许多 GUI 客户端可选
分布式功能 支持主从架构(VDFS) 原生分布式版本控制
学习曲线 平缓 较陡 平缓(客户端)/较陡(命令行)

2. SVN

SVN(Subversion)项目的初衷是为了替换版本控制软件CVS,在CVS 的功能的基础上有很多的提升同时也能较好的解决CVS 系统的一些不足。

2.1 svn 服务端安装配置

有两种服务端安装包

2.1.1 官方安装包

官方网站:https://subversion.apache.org/

image-20241210171529663

官方提供的服务端安装包,安装后需要通过命令行操作,适用于专业配置管理员使用。

2.1.2 图形化服务端

VisualSVN 是一款基于 Apache Subversion 的商业版本控制服务器解决方案,专为 Windows 平台设计。它为 Subversion 提供了一个易于管理和部署的 GUI 界面,并集成了许多增强功能,适合需要在 Windows 环境中使用 Subversion 的团队和企业。

下载地址:https://www.visualsvn.com/downloads/

安装过程:

image-20241210172021355 image-20241210172725603

2.2 创建仓库

安装完成后,启动VisualSVN Server Manager,可以在窗口的右边看到版本库的一些信息,比如状态,日志,用户认证,版本库等.
要建立版本库,需要右键单击左边窗口的Repositores,如下图:

image-20241210174143740

在弹出的右键菜单中选择Create New Repository 或者 新建->Repository: 两者都一样。

image-20241210174450673

选择仓库类型:

image-20241210175138909

在 VisualSVN 中,FSFSVDFS 是两种不同的数据存储后端,它们在用途、性能和特性上存在明显差异。以下是它们的主要区别:

特性 FSFS VDFS
全称 Flat File System VisualSVN Distributed File System
架构 单机存储 分布式存储,支持主从架构
数据存储 数据存储为普通的平面文件,使用自定义格式 使用专有的数据存储格式,支持跨服务器的双向数据复制
部署模型 适合单一服务器或简单的网络共享环境 适合需要多服务器同步和高可用性的分布式环境
功能等价性 是标准 Subversion 的默认后端,功能全面,适用于几乎所有使用场景 功能等同于 FSFS,但支持透明的分布式数据同步
数据复制 不支持内置的分布式数据复制功能,需要依赖第三方工具实现 内置支持主从复制,主库的提交会自动同步到从库;从库也支持写操作,写入的数据会同步到主库及其他从库
数据一致性 单机存储,无数据一致性问题 提供强一致性,确保主库和从库之间的数据同步
扩展性 不适合大规模分布式环境 专为分布式环境设计,适合需要高扩展性和容错能力的场景
配置复杂度 配置简单,适合小型团队或单机开发环境 配置较复杂,需要设置主库和从库
使用成本 开源且免费 专有技术,可能需要购买 VisualSVN Server 企业版才能使用

选择建议:

  1. 选择 FSFS 的场景
    • 小型团队或单机开发环境。
    • 不需要分布式存储或高可用性。
    • 偏好使用开源工具,降低成本。
  2. 选择 VDFS 的场景
    • 需要多服务器分布式部署和高可用性。
    • 希望利用内置的主从复制功能简化同步操作。
    • 对性能、可靠性和一致性要求较高的大型团队或企业环境。

可以随意取名字,或者你项目的名字

image-20241210175705835

为新仓库选择初始布局:

image-20241210175934576

设置用户访问仓库权限:

image-20241210180141084

仓库创建成功:
仓库地址为https://ip地址或计算机名/svn/仓库名称

image-20241210180257823

2.3 创建工程目录

仓库中存放开发项目代码、文档等,需要创建一个工程目录。

image-20241210181751209 image-20241210182055123

创建成功:

image-20241210182216954

trunk:项目开发代码的主体,是从项目开始直到当前都处于活动的状态,从这里可以获得项目最新的源代码以及几乎所有的变更历史信息。

branch:从trunk 的某个点分离出来的代码拷贝,通常可以在不影响主干的前提下在这里进行重大bug 的修改,或者做实验性的开发,以及定制功能开发等。如果分支达到了预期的目的,通常可以被合并(Merge)到主干中。

tag:用来表示trunk 和branch 的某个点的状态,以代表项目的某个稳定状态,通常为最终发布状态。

2.4 TortoiseSVN 客户端

2.4.1 SVN 客户端类型

svn 客户端需要通过网络访问svn 服务端提交文件、查询文件等,可通过以下客户端类型访问svn 服务端:

  • 使用Subversion 提供的客户端命令。使用方式:在命令行下输入命令操作。
  • 使用Torotise 图形化界面操作(推荐)
  • 使用Eclipse 等开发工具插件操作(推荐)

2.4.2 TortoiseSVN 下载安装

TortoiseSVN 是Subversion 版本控制系统的一个免费开源客户端,不需要为使用它而付费。
TortoiseSVN 是Subversion 的Windows 扩展。它使你避免接触Subversion 枯燥而且不方便的Command Line。它完全嵌入Windows Explorer,使用时只需在正常的窗口里右键操作就可以了。

下载:http://tortoisesvn.net/downloads.html 提供32 位和64 位不同版本,安装tortoiseSVN。
需要修改客户端电脑右键菜单,安装后需要重启电脑。

image-20241210185334196

2.4.3 浏览仓库

使用Tortoise 浏览svn 服务端的仓库的内容:

image-20241210202533648 image-20241210202612712 image-20241210202632437

2.5 权限管理

2.5.1 认证授权机制

在企业开发中会为每位程序员、测试人员等分配一个账号,用户通过使用svn客户端连接svn 服务时需要输入账号和密码,svn 服务对账号和密码进行校验,输入正确可以继续访问,当用户访问仓库下某个目录时,svn 服务对用户进行授权,如果用户拥有该目录的访问权限方可访问。
判断账号和密码输入是否正确的过程即认证过程。
判断用户是否拥有目录的读/写权限时即授权过程。

2.5.2 创建用户

image-20241210203805987

2.5.3 创建组

image-20241210203952605

2.5.4 分配权限

  • 删除系统安装后默认权限:
image-20241210204134586
  • 开发人员拥有读写权限:
image-20241210204509786
  • 清除认证缓存:

有几种情况需要清除认证缓存:
1、本地使用多个账号登陆,每次输入的账号和密码都不一样
2、当账号密码修改后(建议清理)

image-20241210204853196 image-20241210205040201

2.6 TortoiseSVN日常使用

2.6.1 浏览仓库

image-20241210205445036

2.6.2 导入导出

Export: 导出项目,和checkout区别(checkout检出文件后,含有.svn隐藏文件夹,会和SVN仓库交互,export导出没有隐藏文件夹)。

image-20241210205731439

import 将本地资源导入到svn 服务器。

2.6.3 修改提交

Checkout

检出项目,复制项目的副本到本地。在要检出的目录中右键:

image-20241210211126149
add

在检出的目录中添加文件:

image-20241211131310571

图标问号表示这是一个新文件

Add to ignore list :添加到忽略列表(标记该文件不需要版本控制)

Add : 标记这个文件添加到服务器

image-20241210212709899

文件上带“+”表示已经标记要添加到版本库。

这里可能遇到的问题:文件夹不显示任何SVN相关的小图标了,例如:绿色打钩,红色感叹等

原因: Windows Explorer Shell最多支持15个Overlay Icon,也就是注册表排在前15个才能显示,后面的不能显示。

解决方法:

  1. 打开注册表:Win+R快捷键打开运行窗口,输入regedit

  2. 注册表内前往这个路径:"计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers"

  3. 重命名SVN相关的注册表,即原名字前面加几个空格,确保能排到前面去,空格越多越靠前(或直接删除前面没啥用的图标)。

  4. 注册表重命名后,重启电脑,再进来看看是否已经排到前面,若是则完成。

只要确保SVN相关的注册表排在前15的位置就能显示文件夹小图标。

Commit

当检出目录或子目录中内容有修改,目录图标变为:image-20241211133930021

提交Commit 提交本地修改至svn 服务器:
在检出目录或要提交修改的目录右键:

image-20241211134259384 image-20241211140905639 image-20241211141030289

提交后目录中的内容与svn 服务同步,目录图标变为:image-20241211141141149

update

更新仓库的文件到本地

Delete

删除版本库文件

标记删除后,本地文件删除,标记删除后需要commit。

revert

在检出目录或子目录操作会记录操作日志,提交前可以回滚操作。

image-20241211142307778

2.6.4 冲突处理

两个客户端同时修改同一个文件, 改动同一个位置,发生冲突情况如果当commit 遇到文件已经过时,说明另一个人可能改动过----- update

image-20241211144245574

main.c 将本地和服务器合并到一起的文件

main.c.mine 我本地自己修改后的文件

main.c.r9 我修改之前的文件

main.c.r10别人修改后的文件

image-20241211144421946

冲突解决后再进行commit

3. Git

3.1 起步

3.1.1 什么是Git?

Git 和其它版本控制系统(包括 Subversion 和近似工具)的主要差别在于 Git 对待数据的方式。 从概念上来说,其它大部分系统以文件变更列表的方式存储信息,这类系统(CVS、Subversion、Perforce 等等) 将它们存储的信息看作是一组基本文件和每个文件随时间逐步累积的差异 (它们通常称作 基于差异(delta-based)的版本控制)。

image-20241211162649883

Git 不按照以上方式对待或保存数据。反之,Git 更像是把数据看作是对小型文件系统的一系列快照。 在 Git中,每当你提交更新或保存项目状态时,它基本上就会对当时的全部文件创建一个快照并保存这个快照的索引。为了效率,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个 快照流

image-20241211162716274

3.2 git常用命令

https://www.cnblogs.com/Invinc-Z/p/18603098

参考资料

  1. 传智播客 SVN 讲义,https://zh.z-lib.gl/book/11917172/d70cbb/传智播客-svn-讲义.html
  2. S. Chacon and B. Straub, Pro Git, 2nd ed. New York, NY, USA: Apress, 2014. [Online]. Available: https://git-scm.com/book/zh/v2
  3. 小林不会飞,“解决TortoiseSVN或者TortoiseGit拉取的文件夹不能完整显示绿色打钩、黄色、红色感叹号、蓝色加号等小图标的问题”,网址:https://www.cnblogs.com/xiaofeilin/p/16598859.html
posted @   Invinc-Z  阅读(96)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示