学习SVN

SVN 官网 Github SVN 源码

摘要

本篇博客对SVN的基础使用进行总结,以便加深理解和记忆

1.简介

SVN是Apache Subversion的缩写,是一个开源的源码版本控制系统

2.下载安装

SVN官方的发布版只提供了源码,没有提供各个平台对应的安装包或下载程序,不过可以在官网找到不同社区贡献者提供的安装包或下载程序页

3.SVN生命周期

  • SVN Serve创建版本库repository:git服务端的git init

  • 检出checkout:相当于git clone

  • 更新update:相当于git pull,在本地修改前先从版本库拉取同步更新

  • 添加本地文件/文件夹到版本控制:相当于git add + commit

  • 提交commit:相当于git push

  • 解决冲突:SVN也是以行为单位管理代码和文件,若两人未提交修改同一行SVN则会进行自动合并,若为同一行则会提示冲突,需要手动确认

4.SVN Server搭建

  • 命令行

    • 创建版本库
    svnadmin create {版本库文件夹路径}
    
    • 配置文件:配置文件目录在版本库文件夹路径中的conf文件夹内

      • svn服务配置文件svnserve.conf
      # 通用配置项
      [general]
      # 未鉴权用户访问版本库的权限:可读可写"write"、只读"read" 和 无访问权限"none"
      anon-access = read
      # 鉴权用户访问版本库的权限:可读可写"write"、只读"read" 和 无访问权限"none"
      auth-access = write
      # 指定用户密码配置文件位置,默认为当前文件夹下的相对路径,也可使用绝对路径
      password-db = passwd
      # 指定权限配置文件位置,默认为当前文件夹下的相对路径,也可使用绝对路径
      authz-db = authz
      # 指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的认证域相同,建议使用相同的用户名口令数据文件。
      realm = My First Repository
      
      # 其余配置项暂略
      
      • 用户密码配置文件passwd
      [users]
      # 格式:{用户名} = {密码}
      lyf = 15194572419
      
      • 权限配置文件authz
      # 用户组
      [groups]
      # 格式:{权限组名} = {用户名列表}
      harry_and_sally = harry,sally
      # 权限配置,格式:
      # [{版本库名}:{路径}]
      # @{权限组名} = {权限}
      [test:/home/thinker]
      thinker = r
      @harry_and_sally = rw
      * = r
      
      • VN启动模式

        • 单库svnserve模式:一个svnserve只能为一个版本库工作
        • 多库svnserve模式:将svnserve指定到版本库的上级目录
      • 启动SVN Serve服务

      svnserve -d -r {目录} --listen-port {端口号,默认为3690}
      
      • SVN版本库访问地址:svn://192.168.0.1/{-r指定的路径}
  • 可视化工具

5.SVN Client使用

  • 命令行
# 1.导入项目
svn import {SVN地址} --message {"附加信息"}
# 2.检出项目
svn checkout {SVN地址} [--username={用户名}]
# 3.导出一份“干净”的项目
svn export {SVN地址} {本地项目名}
# 4.查看本地工作副本状态:?表示未添加到版本控制中,A表示已添加待提交
svn status
# 5.查看差异
# 5.1检查本地修改
svn diff
# 5.2检查工作副本和版本库
svn diff -r {版本号,如3} [{文件名}]
# 5.3比较两个版本库
svn diff -r {版本库号1:版本库号2} [{文件名}]
# 6.添加本地文件/文件夹到版本控制
svn add {文件或文件夹名}
# 7.更新与版本仓库一致
svn update [-指定版本]
# 8.提交
svn commit -m {"附加信息"}
# 9.撤回本地工作副本某文件/文件夹的修改
svn revert {文件名}
svn revert -R {文件夹名}
# 10.版本回退
svn merge -r {当前版本号:回退版本号} {文件名}
# svn merge -r 22:21 readme 
# 11.显示信息
svn log
# 12.仅查看不比较
svn cat
svn cat -r {版本号} [{文件名}]
# 13.在不检出的情况下查看版本库中的文件列表
svn list {SVN地址}
# 14.对文件进行改名和删除
svn mv b.c bb.c
svn rm d.c
# 15.为失败的事务清场
svn cleanup
# 16.SVN分支(本地操作)
# 16.1查看分支
svn copy {基版本库路径} {分支版本库路径}
# svn copy trunk/ branches/my_branch
# 16.2在新分支中修改
# 16.3切换到基版本库,将分支合并到基版本库
svn merge {分支版本库路径}
# 16.4将合并好的基版本库变化提交到版本库中
# 17.标签:主要用于项目开发中的里程碑,比如开发到一定阶段可以单独一个版本作为发布等
# 17.1未本地工作副本创建标签(新的目录将会被创建在 tags 目录下)
svn copy trunk/ tags/v1.0
# 17.2提交tag内容
svn commit -m "tags v1.0" 
  • 可视化工具(tortoisesvn)

TortoiseSVN安装及使用方法-CSDN博客

TortoiseSVN 使用教程 | 菜鸟教程 (runoob.com)

6.git与SVN的区别

  • Git是分布式的,而SVN不是,SVN依赖于网络

  • Git把内容按元数据方式存储,而SVN是按文件

  • Git没有一个全局版本号,而SVN有

  • Git的内容的完整性要优于SVN

  • Git的分支克隆更快

相关推荐

  1. 学习SVN

    2024-03-10 01:20:05       27 阅读
  2. <span style='color:red;'>svg</span><span style='color:red;'>学习</span>

    svg学习

    2024-03-10 01:20:05      36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-10 01:20:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-10 01:20:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-10 01:20:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-10 01:20:05       20 阅读

热门阅读

  1. [AIGC] Flink中的时间语义:精确处理数据

    2024-03-10 01:20:05       25 阅读
  2. P5461 赦免战俘

    2024-03-10 01:20:05       23 阅读
  3. Hive SQL 开发指南(三)优化及常见异常

    2024-03-10 01:20:05       28 阅读
  4. 洛阳旅游攻略

    2024-03-10 01:20:05       22 阅读
  5. go的singleflight

    2024-03-10 01:20:05       19 阅读
  6. 音频设备的3种硬件接口- PCM,I2S和AC97

    2024-03-10 01:20:05       26 阅读
  7. FFmpeg--音频解码流程:aac解码pcm

    2024-03-10 01:20:05       24 阅读