SVN
Apache Subversion 通常被缩写成 SVN,是一个开放源代码的版本控制系统。
官网:https://subversion.apache.org
资料:https://svnbook.red-bean.com、https://www.runoob.com/svn/svn-tutorial.html
下载:https://sourceforge.net/projects/win32svn/
与git对比
SVN(Subversion)和Git都是版本控制工具,它们的作用都是帮助程序员管理和追踪代码的变化。以下是两者的主要区别:
-
分布式和集中式
Git是一种分布式版本控制系统,每个开发者都有一个完整的代码库。开发者可以在本地创建、提交和合并分支,而不需要连接到中央服务器。这意味着,即使断开与中央服务器的连接,开发者仍然可以继续工作。相比之下,SVN是一种集中式版本控制系统,代码库保存在中央服务器上,每个开发者都从中央服务器获取代码,并将更改提交到中央服务器。 -
分支和合并
在Git中,分支和合并是非常简单和快速的。开发者可以轻松地创建和合并分支,这使得并行开发和测试变得容易。相反,在SVN中,分支和合并通常需要复制和合并文件夹,这可能会导致冲突和错误,并且需要大量的手动操作。 -
性能
Git通常比SVN更快,特别是在执行诸如提交和拉取等操作时。这主要是因为Git是分布式的,可以在本地缓存文件,而SVN是集中式的,需要连接到中央服务器进行操作。
概念
- 仓库(Repository):仓库是SVN中存储代码和版本历史记录的地方。它是一个集中存储代码的服务器。
- 版本(Revision):版本表示代码仓库的一个特定状态,每个提交操作都会创建一个新版本。每个版本都有一个唯一的标识符,通常用一个递增的数字表示。
- 工作副本(Working Copy):工作副本是从SVN仓库中取出的代码的本地副本。开发者在工作副本中进行修改、添加和删除文件,并通过提交操作将这些更改同步到仓库。
- 提交(Commit):提交是将工作副本中的更改应用到SVN仓库的操作。提交会创建一个新的版本,并将工作副本中的更改记录到该版本中。
- 更新(Update):更新是将仓库中的最新代码更新到工作副本的操作。更新操作会将仓库中的最新版本与工作副本进行比较,并将差异部分合并到工作副本中。
- 分支(Branch):分支是将代码库分成独立的开发线路的操作。通过创建分支,可以在不影响主干代码的情况下进行并行开发、实验或修复。
- 合并(Merge):合并是将一个分支的更改合并到另一个分支或主干的操作。合并可以将不同分支上的代码更改整合到一起,确保所有修改都被应用。
工具
客户端UI工具:
- TortoiseSVN:适用于Windows操作系统的图形化界面工具,集成在资源管理器中,可直观地进行版本控制操作。
- SmartSVN:跨平台的SVN客户端工具,提供可视化界面和强大的功能,支持Windows、Mac和Linux操作系统。
- Cornerstone:适用于Mac操作系统的SVN客户端,提供直观的用户界面和易用的版本控制功能。
- RapidSVN:跨平台的SVN客户端,提供简单易用的界面和常用的版本控制功能。
Web端UI工具:
- VisualSVN Server Manager:适用于Windows操作系统的SVN服务器管理工具,提供基于Web的用户界面,可以管理SVN仓库、权限和用户等。
- RhodeCode:一个开源的SVN和Git版本控制系统,提供Web界面来管理代码仓库、用户权限和团队协作。
- ViewVC:一个基于Web的SVN仓库浏览工具,提供源代码的查看、比较和检索等功能。
- WebSVN:一个基于Web的SVN仓库浏览工具,提供类似文件浏览器的界面,可以查看代码和历史记录。
一般流程
- 创建仓库(Repository):首先,在SVN服务器上创建一个仓库,用于存储代码和版本历史记录。
-
检出工作副本(Checkout):在本地机器上执行检出操作,将仓库中的代码复制到本地,创建一个工作副本。这个工作副本是你在本地进行修改和操作的副本。
这是典型的SVN仓库结构,其中各目录的作用如下:branches(分支):该目录用于存放代码的分支。在软件开发中,分支常被用于并行开发、实验和修复工作。创建分支可以让团队成员在独立的代码线上进行开发,避免干扰主干(trunk)上的稳定代码。一般情况下,每个分支都有自己的文件夹,并且可以独立进行版本控制。
tags(标签):该目录用于存放代码的标签。标签通常用于标记项目的里程碑版本、发布版本或重要的版本点。在某个特定时间点,将代码的一个快照副本标记为一个标签,以便后续随时查阅和回滚到该版本。标签一般不可修改,用于保留历史记录和实现版本的可追溯性。
trunk(主干):该目录用于存放主要的开发代码。主干是项目的核心部分,包含最新的稳定版本和功能。大多数开发工作都在主干上进行,团队成员在这里共享和协同开发代码。主干上的代码会随着时间推移不断更新和演进。
通过这种目录结构,SVN提供了一种组织代码和版本控制的方法。分支和标签的目录可以帮助团队进行并行开发和管理重要版本,而主干目录则是项目的主要代码存储区。这样的结构有助于团队协作、版本控制和代码的可追溯性。
-
修改文件(Modify):在工作副本中进行代码的修改、添加和删除操作,根据需求进行开发或修复。
-
更新工作副本(Update):当其他人提交了新的代码到仓库时,你需要执行更新操作,将仓库中的最新代码更新到你的工作副本中。这样可以保持你的工作副本与仓库同步。
-
解决冲突(Resolve Conflict):如果在更新操作中遇到冲突,即你和其他人对同一代码部分进行了不兼容的修改,你需要解决冲突。SVN会尝试自动合并不冲突的部分,但对于冲突的部分,你需要手动解决。
-
提交修改(Commit):当你完成对代码的修改后,需要执行提交操作,将你的修改应用到仓库中。提交会创建一个新的版本,并将你的修改记录到该版本中。
-
分支和合并(Branch and Merge):如果需要进行并行开发、实验或修复,可以创建分支。分支允许你在不影响主干代码的情况下独立开发。完成分支上的工作后,可以将分支上的修改合并回主干或其他分支。
-
查看历史记录(View History):SVN记录了仓库中的所有版本历史记录。你可以随时查看每个版本的修改内容和作者等信息。