Subversion & SVN
目标:实现数据的协作编辑和共享
版本库类型默认是"fsfs"
架构说明:client端+版本库访问层+版本库+底层库(FSFS)
组件:svn 、svndumpfilter、svnrdump、svnsync、svnadmin 、svnlook、 svnserve、svnversion
3种方式访问SVN:基于webdav,基于SVN,直接本地访问
基于webdav是用Apache的mod_dav_svn模块实现访问版本库
SVN是一个客户端/服务器的系统,集中式的
特点:版本库是SVN的核心;记录每次更改
版本控制系统的价值在于它跟踪文件和目录的版本,记录每个版本(只要不删除)
文件共享问题:
版本控制需要避免同时多个人修改的问题,通过”锁定-修改-解锁方案“的可以解决但是只能单人作战,还有多个文件可能有相互依赖关系导致修改失败
所以,版本更改工作方式:拷贝-修改-合并方案:
在这种模型里,每一个客户端联系项目版本库建立一个个人工作拷贝—版本库中文件和目录的本地映射。用户并行工作,修改各自的工作拷贝,
最终,各个私有的拷贝合并在一起,成为最终的版本,这种系统通常可以辅助合并操作,但是最终要靠人工去确定正误。
当发生文件冲突时,需要手工解决冲突,商量保留哪一个更改
svnserve -d #开启daemon服务模式,客户端访问时需要指定绝对路径(svn://服务器IP/var/svn/project)
工作副本如何工作:
subversion根据修订版本和时间戳来判断工作副本的4中不同状态
基本工作指令:
checkout #创建副本 ,例如:svn checkout http://svn.example.com/repos/calc
commit #提交到版本库(原子事务提交),例如:svn commit button.c -m "Fixed a typo in button.c."
update #更新工作副本
import #导入文件到库
SVN内置认证和授权通过svnserve.conf来控制的
提交前回滚: svn revert
已提交后回滚:svn merge
######################################
开始SVN之旅(例子):
创建版本库:svnadmin create project1
加入文件到版本库:svn import /usr/lib/systemd/system file:///var/svn/project1 -m "Init"
生成工作副本prj1-Copy:svn checkout file:///var/svn/project1/ prj1-Copy
版本库信息:svn info svn://192.168.253.150/var/svn/project1
版本库修改历史:svn log svn://192.168.253.150/var/svn/project1
列出版本库的文件内容:svn list svn://192.168.253.150/var/svn/project1
添加一个副本文件到工作副本目录:svn add COPY00000.TXT
提交到版本库:svn commit -m "create a file" #这时本地副本和版本库内容一致,版本一致
对比版本库和工作副本的差别:svn diff
查看版本库某个文件内容:svn cat svn://192.168.253.150/var/svn/project1/wpa_supplicant.service
###############################################
备份版本库:svnadmin dump /var/svn/project1 > PRJ.BAK
恢复前创建新的版本库:svnadmin create /home/jk/proJ2/
恢复版本库:svnadmin load /home/jk/proJ2/ < PRJ.BAK
########################################