SVN概述
SVN是SubVersioN的简称,是Apache研发的一个开源的版本控制系统。
SVN的作用
使用SVN的目的主要是两个:
- 实现项目组中的资源共享
- 实现资源文件的版本控制
SVN的工作原理
在subversion管理下,文件和目录可以超越时空。Subversion将文件存放在中心版本库里,这个版本库很像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况,这样就可以借此将数据恢复到以前的版本,并可以查看数据的更改细节。正因为如此,许多人将版本控制系统当作一种神奇的“时间机器”。
SVN的体系结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UYF0ne27-1604841861768)(D:\Java\Java_note\JavaWeb\picture\SVN体系结构图.png)]
客户层,服务层,仓库层
补充:FSFS一种不需要数据库的存储系统。FSFS 采用文件系统的方式, 替代原来的基于Berkeley DB的实现.
SVN的下载和安装
SVN全称Subversion,是一款优秀的版本控制工具。
SVN分为服务器、客户端两部分,服务器和客户端版本很多,有的是收费的,有的需要注册。我们选择免费、不用注册的。
以VisualSVN作为服务器,以TortoiseSVN作为客户端。
看csdn博客
SVN命令行的使用
SVN管理员命令
svnadmin help
svnadmin --version
:查看版本号
svnadmin help create
svnadmin create 路径[仓库名]
:
-
用于创建SVN版本仓库(根仓库)
-
SVN仓库分为两级,顶层仓库与根仓库
-
注意:在创建根仓库时,需要先创顶层仓库。根仓库存在不报错,没有则创建
SVN服务端命令
svnserve -h
:获取帮助
svnserve -d
:用于开启DOS系统的SVN服务。(开启了一个守护线程,等待客户端连接)
-
SVN默认的端口号是3690
-
Windows:
netstat -a
命名查看当前网络的连接状态。
svnserve -d --listen-port=端口号
:设置指定端口号
访问svn服务器:
svn://localhost:3690/D:/Java/SVN/repository/sms
:这种方式暴露顶层仓库路径不安全
svnserve -d -r 顶层仓库路径
:指定默认的svN顶层仓库的路径。一旦指定,那么客户端在使用svn时直接给出根仓库名即可。
设置完之后访问:svn://localhost:3369/sms
将SVN服务注册为开机自启动的Win服务
在管理员cmd中
sc create SVNServer binpath= "D:/Java/SVN/Apache-Subversion-1.14.0/bin/svnserve.exe --service -r D:/Java/SVN/repository" start=auto depend=Tcpip
sc:serve create
启动/停止SVNServer服务
net start/stop SVNServer
删除系统服务
- 先停止再删除
net stop SVNServer
sc delete SVNServer
SVN客户端命令
svn checkout
:
- checkout,称为检出。
- 其意义为 : 创建客户端指定目录与服务端指定根仓库间的连接关系。
- 一个客户端一般情况下,只需要检出一次。
- 客户端指定的目录,官方名称为working copy,通常称为客户端连接目录。
基于顶层仓库的checkout
情况一:
-
在任意目录下运行此命令:
-
其运行效果为,在aacof目录中出现一个.svn的隐藏目录。
情况二:
- 若当前执行命令的目录为working Copy目录,则运行以下命令后的结果为:
- 在working copy中会出现根仓库目录,而根仓库目录中会存在.svn隐藏目录。
基于根仓库的checkout
无论是在任意目录运行checkout ,
还是在working copy 中运行checkout ,
其运行效果是相同的,都是在working copy目录中产生一个.svn 的隐藏目录。
服务端修改客户端权限
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h7LEXFRu-1604841861810)(D:\Java\Java_note\JavaWeb\picture\svn客户端权限.png)]
### The anon-access and auth-access options control access to the
### repository for unauthenticated (a.k.a. anonymous) users and
### authenticated users, respectively.
### Valid values are "write", "read", and "none".
### Setting the value to "none" prohibits both reading and writing;
### "read" allows read-only access, and "write" allows complete
### read/write access to the repository.
### The sample settings below are the defaults and specify that anonymous
### users have read-only access to the repository, while authenticated
### users have read and write access to the repository.
anon-access = write ---------给匿名用户授权了写的功能
# auth-access = write ---------给授权用户授权了写的功能
svn add
当一个文件/目录,被存放到 working Copy中时, svN并不会感知到它们的存在,即 SVN并不会对其进行管理。若要使SVN对其进行管理,必须将其通知add命令,添加到SVN管理中。
需要注意:
-
被add 的文件/目录,必须存在于working Copy中。
-
add命会的作用就是将指定文件/目录交由sv进行管理,所以一个文件/目录一般情况下,就执行一次 add命令即可。add命令的执行与文件是否被修改过没有任何关系。
-
被add的目录,会将当前目录及其所包含的所有文件/目录,一次性都交给SVN管理
svn commit
commit命令用于将客户端working Copy中所有对文件/目录的操作提交到服务端。
svn commit Student.txt -m writed-by-aa
注意:
- commit命令必须携带参数-m,用于完成日志记录
- 提交后的文件,在服务端是无法直接看到的。
- 对于已经提交过的文件,在没有被修改的情况下再次提交是没有意义的。
svn update
该命令用于将当前客户端working Copy中的文件/目录更新到与SVN服务端相同版本。
svn update 文件[名]/路径
:更新指定的目录或文件
svn update
:更新所有能更新的
svn delete
用于删除指定的文件/目录。仅仅删除的是客户端自己的,并不会影响服务端的文件/目录。
只有当前客户端执行了commit命令,才会将这个删除操作同步到SVN服务端。
需要注意:
-
这个操作在当前客户端本地效果等同于在 window中执行的删除操作,但该windows下的删除通过svn commit 操作无法同步到SVN服务端。
-
对于目录的svn delete 操作,会将当前目录及其所包含的所有文件/目录全部删除。
svn revert
- 该命令用于恢复客户端被删除的文件/目录。但这个文件/目录的删除操作不能是被commit过的。
svn list
- 该命令用于获取当前目录中所包含的所有文件/目录。
svn info
- 该命令用于获取当前sVN客户端与服务端的相关信息。
svn help
- 用于获取SVN命令的帮助信息。可以查看所有的SVN命令,也可以获取到指定命令的帮助信息。