【山外笔记-工具框架】SVN版本控制系统
【山外笔记-框架工具】SVN版本控制系统
学习资料:
1、本文打印版下载地址:[山外笔记-框架工具笔记]SVN版本控制工具-打印版.pdf
2、SVN和TortoiseSVN在线中文文档:http://svndoc.iusesvn.com/
3、SVN教程-菜鸟教程:https://www.runoob.com/svn/svn-tutorial.html
4、SVN中文手册下载地址:svnbook1.4中文手册.pdf
5、TortoiseSVN中文文档下载地址:TortoiseSVN-1.9.3-zh_CN中文使用手册.pdf、TortoiseMerge-1.9.3-zh_CN.pdf
6、TortoiseSVN安装包:TortoiseSVN-1.13.1.28686-x64-svn-1.13.0.msi
7、TortoiseSVN语言包(中文):LanguagePack_1.13.1.28686-x64-zh_CN.msi
本文重点内容:
1、SVN概述
2、SVN安装
3、SVN生命周期
4、SVN服务端操作
5、SVN客户端操作
6、TortoiseSVN 使用教程
一、SVN概述
1、SVN简介
(1)SVN是Apache Subversion的缩写,是一个开源的版本控制系统。
(2)SVN在2000年由CollabNet Inc开发,现已发展成为Apache软件基金会的一个项目。
(3)SVN管理着随时间改变的数据(比如代码),这些数据放置在一个中央资料档案库(repository)中,这个档案库会记住每一次文件的变动,可以把档案恢复到旧的版本, 或是浏览文件的变动历史。
(4)SVN管理源代码以行为单位,只要不是修改同一行代码,SVN都会自动合并两种修改。如果是同一行,SVN 会提示文件冲突(Conflict),需要手动确认。
(5)SVN相对于的RCS、CVS,采用了分支管理系统,设计目标就是取代CVS。
(6)SVN源代码地址:https://github.com/apache/subversion
2、SVN基本概念
(1)repository(源代码库):源代码统一存放的地方。
(2)Checkout(提取):从版本库创建一个工作副本到本地目录。
(3)Commit(提交):提交本地已修改的代码到版本库(repository)中。
(4)Update (更新):更新本地工作副本,和版本库同步。
3、SVN的主要功能
(1)目录版本控制
CVS只能跟踪单个文件的历史,但SVN能够依时间跟踪整个目录的变动,目录和文件都能进行版本控制。
(2)真实的版本历史
无论是文件还是目录,在SVN中可以增加(add)、删除(delete)、复制(copy)和重命名(rename),所有的新加的文件都从一个新的、干净的版本开始。
(3)自动提交
SVN允许一次提交,不管是单个还是多个文件都是作为一个整体提交的。允许开发人员以逻辑区间建立并提交变动,以防止当部分提交成功时出现的问题。
(4)纳入版本管控的元数据
每一个文件与目录都附有一组可以创建的属性关键字和属性值,即Key/Value。属性是随着时间来作版本管控的,就像文件內容一样。
(5)选择不同的网络层
- ① SVN有抽象的档案库存取概念, 可以很容易地实施新的网络机制。
- ② SVN可以作为一个扩展模块嵌入到Apache HTTP服务器中。
- ③ SVN还提供了许多重要功能: 如身份认证, 授权, 在线压缩, 以及文件库浏览等等。
- ④ SVN还有一个轻量级的独立SVN服务器,使用自定义的通信协议,可通过ssh以tunnel方式使用。
(6)一致的数据处理方式
SVN使用二进制差异算法来异表示文件的差异,将文件以压缩形式储存在档案库中,而且文件差异是以两个方向在网络上传输的。
(7)有效的分支(branch)与标签(tag)
SVN建立分支与标签的方法, 就只是复制该项目, 使用的方法就类似于硬连接(hard-link)。
(8)Hackability
SVN没有任何的历史包袱,主要是一群共用的C程序库,具有定义完善的API,便于维护。
4、SVN的优点:优于CVS之处
(1)原子提交:一次提交不管是单个还是多个文件,都是作为一个整体提交的。
(2)重命名、复制、删除文件等动作都保存在版本历史记录当中。
(3)对于二进制文件,使用了节省空间的保存方法。
(4)目录也有版本历史。整个目录树可以被移动或者复制,而且能够保留全部版本记录。
(5)分支的开销非常小。
(6)优化数据库访问,减少了不必要的数据库访问。
二、SVN安装
1、Windows下安装SVN
(1)下载地址:
(2)下载完成后,双击下载的安装文件进行安装,指定SVN的安装目录。
(3)添加环境变量:将SVN安装目录中的bin目录添加到path路径中。
(4)在CMD命令行窗口中输入svnserve -help命令验证是否安装成功。
2、CentOS下安装SVN
(1)大多数GNU/Linux发行版系统自带了SVN,使用svn --version命令检查是否安装。
(2)如果SVN客户端没有安装,将报告svn命令找不到的错误。
(3)如果SVN客户端已安装,将报告SVN的版本号和编译日期。
(4)安装命令:yum install -y subversion
3、Ubuntu下安装SVN
(1)大多数GNU/Linux发行版系统自带了SVN,使用svn --version命令检查是否安装。
(2)如果SVN客户端没有安装,将报告svn没有安装。
(3)如果SVN客户端已安装,将报告SVN的版本号和编译日期。
(4)安装命令:apt-get install subversion
三、SVN生命周期
1、创建版本库
(1)版本库相当于一个集中的空间,用于存放开发者所有的工作成果代码。
(2)版本库不仅能存放文件,还包括了每次修改的历史,即每个文件的变动历史。
(3)Create操作:用来创建一个新的版本库。
2、检出
(1)Checkout操作:用来从版本库创建一个工作副本。
(2)工作副本是开发者私人的工作空间,可以进行内容的修改,然后提交到版本库中。
3、更新
(1)update操作:用来更新版本库,将版本库同步到工作副本。
(2)版本库一直保持最新的代码,版本库一有更新,本地工作副本就会过期。
4、执行变更
(1)Rename操作:可以更改文件/目录的名字。
(2)移动操作:用来将文件/目录从一处移动到版本库中的另一处。
(3)添加操作:用来添加文件/目录,但这些添加的文件目录只是被添加进待变更列表中,直到执行了commit操作后才会成为版本库的一部分。
(4)删除操作:用来将文件从工作副本中删除掉,但该文件的实际删除只是被添加到了待变更列表中,直到执行了commit操作后版本库才会真正删除。
5、复查变化
(1)在commit操作之前复查下在工作副本中所进行的变动是一个很好的习惯。
(2)Status操作:列出工作副本中所进行的变动。
(3)Status操作只是提供了一个变动列表,但并不提供变动的详细信息。
(4)对工作副本的任何改动都会成为待变更列表的一部分,Status 操作就是用来查看这个待变更列表。
(5)diff操作:用来查看这些变动的详细信息。
6、修复错误
(1)Revert操作:重置对工作副本的修改,将会销毁待变更列表并将工作副本恢复到原始状态。
(2)Revert操作可以重置一个或多个文件/目录,也可以重置整个工作副本。
7、解决冲突
(1)Merge操作:自动处理可以安全合并的东西,其它的会被当做冲突。
(2)Resolve操作:用来帮助用户找出冲突并告诉版本库如何处理这些冲突。
8、提交更改
(1)Commit操作:用来将更改从工作副本到版本库。
(2)Commit操作会修改版本库的内容,其它开发者可以通过更新他们的工作副本来查看这些修改。
(3)Commit是一个原子操作,要么完全提交成功,要么失败回滚,用户不会看到成功提交一半的情况。
(4)在提交之前,必须将文件/目录添加到待变更列表中。列表中记录了将会被提交的改动。
(5)当提交的时候,通常会提供一个注释来说明改动。这个注释也会成为版本库历史记录的一部分。
四、SVN服务端操作
1、配置SVN启动模式
(1)新建版本库目录:mkdir /opt/svn
(2)创建版本库:svnadmin create /opt/svn/svntest
(3)启动版本库:svnserve -d -r 目录--listen-port 端口号
- ① -r:配置方式决定了版本库访问方式。
- ② --listen-port:指定SVN监听端口,不加此参数,SVN默认监听3690
(4)单库svnserve方式:-r直接指定到版本库
① 命令:
svnserve -d -r /opt/svn/svntest② 一个svnserve只能为一个版本库工作。
③ authz配置文件中对版本库权限的配置:
[groups]
admin=user1
dev=user2
[/]@admin=rw
user2=r
④ URL:输入svn://192.168.0.1/,即可访问svntest版本库
(5)多库svnserve方式:-r指定到版本库的上级目录
① 命令:
svnserve -d -r /opt/svn② 一个svnserve可以为多个版本库工作。
③ authz配置文件中对版本库权限的配置:
[groups]
admin=user1
dev=user2
[svntest:/]@admin=rw
user2=r
[svntest01:/]@admin=rw
user2=r
④ 用[/],则表示所有库的根目录,即[/src]表示所有库的根目录下的src目录。
⑤ URL:svn://192.168.0.1/svntest,即可访问svntest版本库。
2、创建SVN版本库
(1)新建版本库目录:mkdir /opt/svn
(2)创建版本库:svnadmin create /opt/svn/svntest
(3)以多库svnserve方式启动SVN:svnserve -d -r /opt/svn,URL:svn://192.168.0.1/svntest01
(4)配置目录:/opt/svn/svntest/conf,包括svnserve.conf、passwd、authz配置文件。
(5)SVN服务配置文件:svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = /home/svn/passwd
authz-db = /home/svn/authz
realm = tiku
① anon-access:控制非鉴权用户访问版本库的权限,取值范围为write、read和none。即write为可读可写,read为只读,none表示无访问权限。默认值:read
② auth-access:控制鉴权用户访问版本库的权限。默认值:write
③ password-db:指定用户名口令文件,默认为conf目录中的passwd。
④ authz-db:指定权限配置文件,实现以路径为基础的访问控制。默认值:authz
⑤ realm:指定版本库的认证域,即在登录时提示的认证域名称。
- ❶ 若两个版本库的认证域相同,建议使用相同的用户名口令数据文件。
- ❷ 默认值: UUID(Universal Unique IDentifier,全局唯一标示)。
(6)用户名口令文件passwd
① 用户名口令文件由svnserve.conf的配置项password-db指定,默认为conf目录中的passwd。
② passwd文件仅由一个[users]配置段组成。
③ [users]配置段配置行格式:<用户名> = <口令>
[users]
admin = admin
thinker = 123456
(7)权限配置文件authz
① 权限配置文件由svnserve.conf的配置项authz-db指定,默认为conf目录中的authz。
② authz配置文件由一个[groups]配置段和若干个版本库路径权限段组成。
③ [groups]配置段中配置行格式如下:<用户组> = <用户列表>
④ 版本库路径权限段的段名格式如下:[<版本库名>:<路径>]
[groups]
g_admin = admin,thinker
[admintools:/]
@g_admin = rw
* =
[test:/home/thinker]
thinker = rw
* = r
五、SVN客户端操作
1、SVN检出操作
(1)创建版本库svntest,URL为svn://192.168.0.1/svntest,svn用户user01有读写权限。
(2)检出命令:svn checkout svn://192.168.0.1/svntest --username=user01
(3)查看检出工作副本信息命令:svn info .
2、SVN提交操作
(1)在工作副本中新建一个文件:echo “Hello,SVN” > HelloSVN.txt
(2)查看工作副本状态:svn status,状态显示为?,说明还未加到版本控制中。
(3)添加到版本控制中:svn add HelloSVN.txt
(4)查看工作副本状态:svn status,状态显示为A,说明已添加到版本控制中。
(5)提交到版本库:svn commit -m "SVN readme."
- ① -m:备注本次提交的注释信息,如果忽略了,SVN会打开一个文本编辑器来让你输入提交信息。
- ② 命令执行后会输出提交的文件,并且修订版本号自动增加了1。
3、SVN解决冲突
(1)冲突的原因:SVN管理源代码以行为单位,只要不是修改同一行代码,SVN都会自动合并两种修改。如果是同一行,SVN 会提示文件冲突(Conflict),需要手动确认。
(2)解决过程:假设版本库版本号为10时,用户A和用户B同时对修改了svntest.txt文件中的同一行。
- ① 用户A先提交了自己修改的文件到版本库,提交成功后,版本库版本号变更为11.
- ② 用户B提交自己修改的文件到版本库时,提交失败,产生冲突。
- ③ 用户A提交后版本号已经变更,用户B的工作副本已经失效,SVN不会允许用户B提交修改操作。
- ④ 用户B先查看用户A提交的修改和自己的修改的差异,执行
svn diff命令。 - ⑤ 用户B需要更新工作副本,执行
svn update命令,可以指定更新到的版本,默认是最新的版本。 - ⑥ 工作副本和版本库同步后,用户B可以提交自己的修改到版本库。
4、SVN版本回退
(1)svn revert操作:撤销任何文件或目录里的局部更改,即对文件的修改。
(2)撤销文件修改的具体操作流程:
① 查看SVN状态:执行
svn status命令,显示文件名及其状态,状态为M,说明文件被修改。② 撤销文件的修改:执行
svn revert filename③ 再次查看SVN状态:执行
svn status命令,没有任何显示,说明撤销成功。
(3)撤销目录修改操作同撤销文件修改,只是恢复目录用需要使用-R选项,即svn revert -R dirname。
(4)恢复一个已经提交的版本
① 消除旧版本,必须撤销旧版本里的所有更改然后提交一个新版本,这种操作叫做reverse merge。
② 命令:
svn merge -r 22:21 filename,当前版本22,上一个版本21。
5、SVN查看历史信息
通过svn命令可以根据时间或修订号去除过去的版本,或者某一版本所做的具体的修改。
(1)svn log:用来展示svn 的版本作者、日期、路径等等。
- ① 只查看特定的某两个版本之间的信息:
svn log -r 6:8 - ② 只查看某一个文件的版本修改信息:
svn log file_path/filename - ③ 只查看目录的版本修改信息:
svn log -v file_path
④ 显示限定N条记录的目录信息:svn log -l N -v
(2)svn diff:用来显示特定修改的行级详细信息。
- ① 比较工作副本接本地版本库的修改:
svn diff - ② 比较工作副本与版本库的修改:
svn diff -r 3 filename - ③ 比较版本库与版本库的修改:
svn diff -r 2:3 filename,版本号之间用冒号分隔。
(3)svn cat:查看在特定版本中的某文件的内容,执行svn cat -r 版本号 filename。
(4)svn list:显示一个目录或某一版本存在的文件,执行svn list -r 版本号 dir_path。
6、SVN分支
Branch分支就是trunk版(主干线)的一个copy版,也具有版本控制功能,而且和主干线相互独立,最后可以通过合并功能,将分支合并到trunk上来,合并为一个项目。
(1)在本地工作副本创建一个分支:svn copy trunk/ branch/mybranch
(2)查看SVN状态:svn status
(3)提交新增的分支到版本库:svn commit -m "add my_branch"
(4)合并my_branch分支到trunk中:svn merge . ./branches/my_branch/
7、SVN标签(tag)
SVN支持tag选项,可以给某一个具体版本的代码一个标签,主要用于项目开发中的里程碑,往往代表一个可以固定的完整的版本。
(1)在本地工作副本创建一个tag分支:svn copy trunk/ tags/v1.0
(2)查看SVN状态:svn status
(3)提交tag内容: svn commit -m "tags v1.0"
六、TortoiseSVN使用教程
1、TortoiseSVN简介
TortoiseSVN是Subversion版本控制系统的一个免费开源GUI客户端
2、安装TortoiseSVN
(1)下载地址:https://tortoisesvn.net/downloads.html, 页面里有语言包补丁的下载链接。
(2)运行下载的 TortoiseSVN 安装程序
(3)运行下载的 TortoiseSVN 中文语言包
(4)重启电脑,确认TortoiseSVN安装完成。
(5)修改TortoiseSVN默认语言
- ① TortoiseSVN默认语言英文,可以通过设置修改成已安装语言。
- ② 鼠标在桌面空白处右击—>TortoiseSVN—>设置。
3、TortoiseSVN创建服务端版本库
(1)在本地新建一个目录,进入新建的目录.
(2)创建版本库:鼠标在空白右击—>TortoiseSVN—>在此创建版本库
(3)版本库创建完成后,目录中会出现Server端的文件,和svnserve命令创建的一致。
4、TortoiseSVN创建工作副本
(1)在本地创建工作目录,进入创建的目录.
(2)SVN检出:鼠标在空白右击,选择 SVN检出(checkout),弹出检出会话框。
- ① 版本库URL:repository(版本库)的位置URL,即svn://192.168.0.1/svntest
- ② 检出至目录:本地创建的工作目录路径。
- ③ 检出深度和版本默认(最新版)即可,点击确定。
- ④ 检出完成后,可以看到工作目录里多了一个
.svn的隐藏目录。
5、TortoiseSVN客户端操作
(1)svn update操作:鼠标在工作副本空白处右击—>SVN 更新(U)
(2)svn add操作:鼠标在工作副本空白处右击—> TortoiseSVN—>增加(A)
(3)svn commit操作:鼠标在工作副本空白处右击—>SVN 提交(C)
(4)svn copy操作:鼠标在工作副本空白处右击—> TortoiseSVN—>分支/标签(T)
(5)svn merge操作:鼠标在工作副本空白处右击—> TortoiseSVN—>合并(M)
(6)svn import操作:鼠标在工作副本空白处右击—> TortoiseSVN—>导入(I)
(7)svn export操作:鼠标在工作副本空白处右击—> TortoiseSVN—>导出(X)
(8)svn lock操作:鼠标在工作副本空白处右击—> TortoiseSVN—>获取锁定(K)
(9)svn unlock操作:鼠标在工作副本空白处右击—> TortoiseSVN—>解除锁定(K)
(10)svn cleanup操作:鼠标在工作副本空白处右击—> TortoiseSVN—>清理(C)
免责声明:本文整理自《SVN中文手册》、《TortoiseSVN中文手册》、《菜鸟教程-SVN教程》和个人的学习总结,属于个人的学习笔记,仅用于学习和分享交流,不涉及商业用途。文中涉及的下载资源均来源于网络,版权归原作者所有,请在下载后24小时之内自觉删除,若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,与本文无关。如果本文发布的内容侵犯到相关的权益,请及时联系本人进行删除!
【山外笔记-工具框架】SVN版本控制系统的更多相关文章
- 【山外笔记-工具框架】iperf3网络性能测试工具详解教程
[山外笔记-工具框架]iperf3网络性能测试工具详解教程 本文下载链接 [学习笔记]iperf3网络性能测试工具.pdf 网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性 ...
- 【山外笔记-SVN命令】svnlook命令详解
本文打印版问文件下载地址 [山外笔记-SVN命令]svnlook命令详解-打印版.pdf 一.命令简介 svnlook是检验Subversion版本库不同方面的命令行工具,不会对版本库有任何修改,只是 ...
- 【山外笔记-SVN命令】svn命令详解
本文打印版文件下载地址 [山外笔记-SVN命令]svn命令详解-打印版.pdf 一.命令简介 svn命令用于Subversion命令行客户端,执行svn相关的操作. 二.命令语法 1.svn语法: ( ...
- (转)TortoiseSVN与VisualSVN Server搭建SVN版本控制系统
本片主要介绍如何搭建SVN版本控制系统,主要使用工具: 1 客户端:TortoiseSVN (小乌龟) 2 服务端:VisualSVN Server 搭建出图形化管理,以及右键菜单版本控制管理的SVN ...
- TortoiseSVN与VisualSVN Server搭建SVN版本控制系统
本片主要介绍如何搭建SVN版本控制系统,主要使用工具: 1 客户端:TortoiseSVN (小乌龟) 2 服务端:VisualSVN Server 搭建出图形化管理,以及右键菜单版本控制管理的SVN ...
- SVN版本控制系统最佳实践
第1章SVN介绍及应用场景 1.1什么是SVN(Subversion) Svn(subversion)是近年来崛起非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个跨平台的开源的版本控制系统. ...
- TortoiseSVN与VisualSVN Server搭建SVN版本控制系统【转】
转自:http://www.cnblogs.com/xing901022/p/4399382.html 本片主要介绍如何搭建SVN版本控制系统,主要使用工具: 1 客户端:TortoiseSVN (小 ...
- 【山外笔记-数据库】Memcached详解教程
本文打印版文档下载地址 [山外笔记-数据库]Memcached详解教程-打印版.pdf 一.Memcached数据库概述 1.Memcached简介 (1)Memcached是一个自由开源的,高性能, ...
- 【山外笔记-云原生】《Docker+Kubernetes应用开发与快速上云》读书笔记-2020.04.25(六)
书名:Docker+Kubernetes应用开发与快速上云 作者:李文强 出版社:机械工业出版社 出版时间:2020-01 ISBN:9787111643012 [山外笔记-云原生]<Docke ...
随机推荐
- git版本控制之维护旧仓库和往仓库里放货物
[git bash下 git clone git项目地址:输入这个命令 就会在你运行命令路径下创建一个文件夹,名字就是这个仓库的名字!!这样就完成了把一个别人的旧仓库克隆到自己本地仓库中进行管理维护和 ...
- 用递归求n皇后问题
此问题是指在n*n的国际象棋棋盘上 ,放置n个皇后,使得这n个皇后均不在,同一行,同一列,同一对角线上,求出合法的方案的数目. 本题可以简单转化为就是求n的全排列中的数放在棋盘上使得这几组数,符合均不 ...
- linux系统调用号查询(pwn)
做pwn题时遇到程序使用了64位系统调用号:59和15,这里做一下记录 在线查询链接:https://syscalls.w3challs.com/ 分为32位和64位,链接中还有arm.mips等架构 ...
- Go 类型转换与类型判断
目录 Go 类型转换与类型判断 1.类型转化 2.类型判断 Go 类型转换与类型判断 1.类型转化 T(a) : T 是目标类型 a 是源变量 package main import "fm ...
- JAVAEE_Servlet_16_HttpServletRequest中常用方法(三)
HttpServletRequest中常用方法(三) * 回顾ServletContext对象,ServletContext对象是Servlet上下文对象 - 创建ServletContext对象 S ...
- Python基础之容易忘记的地方
(1)编译型与解释型语言区别: 编译型:一次性,把所有代码编译成机器能识别的二进制码,再运行 代表语言:c,c++ 优点: 执行速度块 缺点: 开发速度慢,调试周期长 解释型:代码从上到下一行一行解释 ...
- Android Studio在android Emulator中运行的项目黑屏
前言: 最近在做一个Android相关的小项目,因为之前这方面的项目做的比较的少.今天在使用虚拟机调试的时候经常出现一些莫名其妙的问题,经过自己多次的尝试和搜索终于解决了这些问题. 问题: 每次run ...
- 绕过阿里云waf进行mysql limit注入证明
朋友发了我一个站点,来看看吧,是limit注入,不太常见.搞一搞吧. POST /Member/CompanyApply/lists HTTP/1.1 Host: * Content-Length: ...
- ART模式下基于dex2oat脱壳的原理分析
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78513483 一般情况下,Android Dex文件在加载到内存之前需要先对dex ...
- HTTP协议之分块传输与分段编码
目录 数据的分块传输 数据的分段编码(transfer-encoding) 前置知识:HTTP协议 数据的分块传输 我们都知道http协议是由TCP协议封装而来的应用层协议.我们和服务器之间的每次ht ...