SVN学习笔记

Posted 二木成林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SVN学习笔记相关的知识,希望对你有一定的参考价值。

注:该笔记来自于视频 黑马程序员SVN视频教程

SVN概述

为什么要使用SVN呢?要解决什么问题?

  • 协作开发。
  • 远程开发。
  • 版本管理。

什么是SVN?

  • SVN全称是SubVersion。
  • SVN是今年来的版本管理工具。

SVN特点:

  • 操作简单,入门容易。
  • 支持跨平台(Windows、Linux、MacOS)操作。
  • 支持版本回退功能。

获取SVN软件:

常用命令

  • Checkout:检出,本地没有项目,第一次时将项目从服务器上拉下来。
  • Update:更新,在本地已有项目的情况下,把本地代码更新为服务器代码。
  • Commit:提交,将本地项目代码提交到服务器上,更新服务器上的代码。

服务端安装

参考 安装SVN服务端软件VisualSVN

SVN服务端配置

第一步,创建一个项目

  • 首先在SVN服务端(即安装了 Visual SVN 软件的电脑)创建一个共有目录 WebApp 作为项目目录。
  • 接着在 WebApp 目录下创建 Shop 文件夹,作为 Shop 项目的版本仓库。
  • 新建版本仓库,需要打开 DOS 窗口执行命令。命令的格式是:svnadmin create 仓库路径。例如:svnadmin create D:/WebApp/Shop
  • 如果 Shop 仓库配置成功,那么 Shop 目录下会有如下文件和文件夹:

第二步,进行服务端监管

  • 我们必须对服务端进行监控,才能实时访问到仓库的变化。需要在 SVN 服务端执行命令,命令格式是:svnserve -d -r 仓库路径,其中 -d 选项表示后台运行,-r 选项后面跟着要监管的仓库路径。例如:svnserve -d -r D:/WebApp/Shop
  • 然后我们就可以通过 svn://localhost或者 svn://ip地址 访问到指向的仓库了。例如在服务端电脑访问 Shop 仓库是 svn://localhost/Shop

第三步,权限控制

  • 默认情况下,SVN 服务端是不允许匿名用户上传文件到服务端的,所以必须更改项目的相关配置文件。
  • 打开仓库(如刚才创建的 Shop 仓库)下的 conf 目录下的 svnserve.conf 配置文件。
  • 将第 19 行的 # anon-access = read 修改为 anon-access = write,然后保存退出。

SVN客户端安装与配置

安装请参考:安装SVN客户端软件TortoiseSVN

接下来我们就要使用客户端软件连接服务端,检出(Checkout)项目了:

  • 首先在本地项目(即安装了客户端软件的电脑)目录下按鼠标右键,然后选择【TortoiseSVN】,然后选择【Repo-browser】

  • 然后输入 svn://localhost,注意,localhost可以是具体的IP地址(这里之所以是 localhost 是因为SVN的服务端和客户端都在同一台电脑上,如果是其他IP地址则应该是SVN服务端的IP地址)。

  • 选择【svn://localhost】, 在出现的面板中选择【Checkout…】

  • 最后在目录中出现一个隐藏文件夹.svn表示检出(Checkout)成功。

TortoiseSVN使用详解

三大指令

  • 检出(Checkout)操作:①链接到SVN服务器端;②更新服务端数据到本地。注意:Checkout只在第一次链接时操作一次,以后如果进行更新操作请使用Update (更新指令)。

  • 提交(Commit)操作:提交本地项目代码到服务端。

  • 更新(Update):从服务端拉取代码文件到本地然后更新本地已有的项目代码。

假如公司新来一个程序员张三,那么他需要做如下操作:

  • 第一步,检出操作,从服务端第一次拉取项目代码。


  • 第二步,对项目中的代码文件进行一些操作,然后提交到服务端。

回到 demo 项目下,发现文件还是未更新的状态,所以我们需要更新到最新状态:

图标集

提供了一些小图标,方便我们发现本地文件的状态。

设置图标集

我们可以在 TortoiseSVN 下的 Settings 中的 Icon Set 看到所有的图标。

九大常见图标

  • normal:常规图标,当客户端文件与服务端文件完全同步时,显示该图标。
  • conflicted:冲突图标,当客户端提交的文件与服务端数据有冲突时,系统会显示该图标。
  • deleted:删除图标,当服务端数据已被删除,那么客户端会显示该图标。
  • added:增加图标,当我们编写的文件已经添加到提交队列,会显示该图标。
  • non-versioned:无版本控制图标,当我们编写的文件没有添加到上传队列时,会显示该图标。
  • modified:修改图标,当客户端文件有修改但未提交时,会显示该图标。
  • readonly:只读图标,当客户端文件以只读形式存在时,会显示该图标。
  • locked:锁定图标,当服务端数据已锁定,那么客户端文件将自动显示锁定图标。
  • ignored:忽略图标,当客户端文件已被忽略,不会被提交上传,会显示该图标。

忽略功能

我们并不是本地项目中所有文件都想上传到服务端的,有时候我们想要忽略一些文件(如idea的.iml配置文件)那么就可以使用忽略功能让它不被提交上传。步骤如下:

选择待忽略的文件或目录——>TortoiseSVN——>Unversion and add to ignore list——>文件名或目录名

关于忽略列表的几项说明:

  • README.md:忽略名为 README.md 的文件。
  • *.md:忽略所有后缀名为 .md 的文件。
  • README.md(recursively):这是选中目录才该进行的忽略操作,如果选择该项表示忽略名为 README.md 的文件夹及其子文件夹。
  • *.md(recursively):这是选中目录才该进行的忽略操作,表示忽略所有后缀名为 .md 的文件夹及其子文件夹。

版本回退

有些时候,软件的运行可能使开发者或使用者不满意,这时我们需要把当前版本退回到以前的某个版本。如果我们想要回退以前的版本只需要如下操作即可:

版本冲突

在实际项目开发中,如果两个人同时修改某个文件就会产生版本冲突问题。

场景如下:张三修改了 README.md 文件后提交到了服务端,而李四也修改了 README.md 文件并且打算提交,但会提交失败,报错如下:

我们要利用SVN来解决版本冲突问题,步骤如下:

  • 先更新服务端数据到本地。
  • 接着删除除 README.md 之外其他三个文件。
  • 然后修改整合 README.md 冲突文件。
  • 重新提交数据到 SVN 服务端,即可解决版本冲突问题。

配置多仓库与权限控制

配置多仓库

在实际项目开发中,我们可能会同时开发多个项目,那么我们要如何进行项目监管呢?

前面通过 svnserve 命令进行仓库监管,只是监管了某一个文件夹,而不能同时监管多个仓库。但我们可以监管 WebApp 总目录来的达到监管所有仓库的目的。打开 DOS 窗口,输入命令。命令格式如下:

svnserve -d -r D:/WebApp


执行上面命令之后,我们就可以通过 svn://localhost 或者 svn://ip地址 来访问 D:/WebApp 目录了。

而如果想要访问 Shop 项目或者 Hello 项目,只需要输入 svn://localhost/Shop 或者 svn://localhost/Hello 即可。即在IP地址后面跟具体的项目名即可。

权限控制

如果要使用权限控制功能,则必须先开启权限功能。在每一个仓库中都有一个 conf 文件夹,该文件夹里有三个文件:

  • authz文件:该文件是授权文件,告诉哪些用户具有哪些权限。
  • passwd文件:该文件是认证文件,标识当前 svn 系统中某个仓库具有哪些用户以及相应的密码。
  • svnserve.conf:该文件是配置文件。默认情况下,authzpasswd 文件都是禁用的,如果需要使用,则需要在该配置文件中开启上面两个文件。

如果我们要开启权限控制,那么要做如下的操作:

  • 第一步,注释掉 svnserve.conf 文件中匿名用户的可读写权限。
  • 第二步,开启认证文件与授权文件在 svnserve.conf 文件中。
  • 第三步,编写 passwd 认证文件,定义相关用户名和密码。其中键名是用户名,键值是密码,中间用等号进行连接。
  • 第四步,编写授权文件 authz,可以指定组名和该组下的用户列表,用户之间通过逗号进行分隔。然后为项目分配用户组并且为用户组分配权限。格式是:
# 添加用户组
用户组名 = 用户1,用户2,..

# 为仓库分配用户组和指定用户组的权限
[仓库名:路径]
@用户组名 = 权限
* = r
  • 第五步,测试。再新建一个文件夹,然后检出 Shop 项目,再修改其中一个文件,再进行提交,发现需要输入用户和密码。

SVN服务的配置与管理

因为现在的SVN监管服务是在DOS窗口启动的,但如果把DOS窗口关掉,那么SVN服务就无法使用了,我们希望系统能够自动管理,在电脑系统后启动后就自动启动SVN监管服务,不需要每次都手动启动。

配置自启动服务

我们可以通过命令配置让SVN监管服务开机自启动。命令格式如下:

#语法
sc create 服务名 binpath= "exe可执行文件绝对路径 [选项] [参数]" start= auto

#示例,创建svn自启动,监管WebApp文件夹中的所有仓库
sc create SVNService binpath= "E:\\VisualSVN\\InstallationFiles\\bin\\svnserve.exe --service -r D:/WebApp" start= auto

步骤如下:

  • 第一步,打开 DOS 窗口,使用管理员运行。
  • 第二步,输入指令,创建服务
    - 第三步,查看系统服务

创建批处理文件

我们不想每次都打开【服务】来开启SVN服务,那么可以通过批处理的方式来快速打开服务。常见服务操作命令如下:

  • 启动服务:net start 服务名称。例如,net start SVNService
  • 关闭服务:net stop 服务名称。例如,net stop SVNService
  • 删除服务:sc delete 服务名称。例如,sc delete SVNService

我们可以将上述命令封装到.bat批处理文件,然后直接双击.bat文件即可执行对应的命令。

在IDEA中使用SVN

实际在工作除了用 TortoiseSVN 之外,在开发Java项目中通常直接使用 IDEA 进行连接SVN版本控制,而非再单独安装 TortoiseSVN。

检出项目

如果是第一次从SVN服务端拉取项目,则操作如下图:


IDEA上的SVN操作选项

提交项目

SVN账号设置

如果我们提交代码失败,则可能需要输入具有写权限的账号和密码。

更新项目

我们可以从SVN服务端拉取项目代码,更新本地的代码。

以上是关于SVN学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

SVN 使用笔记

SVN学习——简单入门之创建仓库导入检出

svn 删除项目

win下svn常用操作笔记

SVN(一次检出&二次检出)

thinphp框架的项目svn重新检出后的必备配置