SVN 入门

版本控制

  • 目的

    • 追踪文件的变更历史
    • 记录变更细节
    • 支持多人协作
    • 能回退和合并版本
  • 工具

    • SVN - SubVersion
      • 同一个内网下,没有较强的分布式需求
    • git
      • 需要更好分布式的性能
    • perforce
      • 占用内存空间比较小,美术资源友好,更新下载速度快
      • unreal推荐,并且UE4自带的UGS工具,方便项目整体协作
      • 二进制文件或者非文本文件偏多更适合用perforce

SVN

  • 仓库地址

    • 访问协议/服务器地址/目录路径
  • 访问协议

    • file:// 本地磁盘访问
    • http:// webdav协议访问支持svn的apache服务器
    • https:// 添加了ssl加密
    • svn:// 通过TCP/IP自定义协议访问
    • svn+ssh://
  • 认证方式

    • 通过https方式协议是以明文的方式保存密码
    • svn协议访问可以使用KERBEROS认证
      • 认证前使用kdestroy销毁认证的缓存
      • 不使用明文保存密码方式,使用kinit方式
      • klist - 将经过认证的信息进行输出
  • 简介

    • Subversion,简称SVN,是一个开源的版本控制系统, 可用于管理随时间改变的数据更新。我们有一个档案库, 当多个协作时,每个人都可以将自己的工作提交到档案库,当需要再次改动版本时, 从档案库中提取或者更新一份源代码,就可以使用最新的变更代码。
    • 日常开发过程:
      • 有一个统一的存放代码的地方,称代码库(repository);当手头没有代码时,可以从代码库中提取(checkout)一份当前最新版本;当完成代码的修改,需要提交(commit)最新版本到代码库;当代码库被更新过,使用更新(update)就可以从代码库下载最新版本的代码。
  • SVN的安装分为2部分

    • 一部分是服务端安装, 这部分主要在企业中用于团队开发管理使用,使用Visual SVN
    • 另一部分的客户端安装,一般情况下,我们在本机安装 TortoiseSVN 即可

服务端VisualSVN

  • 创建仓库
    • 在弹出的右键菜单中选择Create New Repository 或者 新建->Repository: 两者都一样。
  • 需要建立用户和组,并且需要分配权限。
    • 在VisualSVN Server Manager窗口的左侧右键单击用户组,选择Create User或者新建->User
  • 建立用户组Create Group
    • 用户组内add用户到组内
  • 需要给用户组设置权限,在myRepositories上单击右键,选择属性
  • 在弹出的对话框中,选择Security选项卡,点击Add按钮,选中longen0707,然后添加进来,权限设置为Read/Write
  • 如果服务器没有项目,想从客户端上传项目,直接在服务器端(电脑A) 新建项目,将项目地址复制到客户端(电脑B),然后 在客户端(电脑B)根据复制出来的地址 —SVN检出—版本库URL(使用复制出来的地址)—检出至目录(使用客户端已经存在的项目目录,即可)—确定。 然后在客户端–加入项目–提交 (只需要加入一次即可,以后其他人就直接使用无需加入)。
    以后其他人使用这个项目直接检出(使用服务器复制的项目地址)就可以了,不需要再加入项目了,因为服务器上已经加入过一次项目,后面其他人直接使用即可。

客户端TortoiseSVN

  • SVN简单操作
    • 文件检出
      • 在任一目录下右键,选择SVN Checkout... , 填写版本库URL即可,点击确定,内容被下载到本地文件夹下。
    • 更新(SVN Update)
      • 当别人对目录内容做了修改,需要本地进行更新版本库的内容,获得最新版本。在上述检出的文件目录,如这里是C:\Users\vip\Desktop\repository,右键,选择SVN Update。
    • 提交(SVN Commit)
      • 当在本地对文件进行修改后, 需要上传更新到代码库中,则需要右键,选择SVN Commit 进行提交更新。
    • 检查更新(check for modifcications)
      • 此功能可以显示对文件做出的修改的部分, 还有哪些没有提交。右键,选择Tortoise SVN - check for modifcications.
    • 增加文件(Add)
      • 当需要增加新文件时,可以使用Tortoise SVN - Add 添加,再选择SVN Commit 进行提交即可。
    • 删除文件(Delete)
      • 选择对需要的文件进行删除,可以使用Tortoise SVN - Delete, 再同样选择SVN Commit 进行提交。
    • 撤销更改(Revert)
      • 当修改文件没有被提交,需要返回到修改前的状态,可以选择Tortoise SVN - Revert 进行撤销。
    • 获取历史文件(show log)
      • Tortoise SVN - Show log 中主要展示了文件的所有版本信息,包括修改作者, 执行操作,修改时间和日期。可以通过这里进行版本的回滚,查看历史的版本内容。

SVN基本操作

第一步:打出开发分支 - CP

  • 从主干分支打出开发分支,后续更改只需要改动开发分支
    • svn info 仓库地址 命令可以查看仓库信息
    • 打出分支
      • svn cp -m "备注" 要被复制的仓库地址 被复制的新的分支地址
    • 查看分支目录下的所有内容
      • svn ls 仓库目录

将开发分支的代码下载到本地 - CHECKOUT

  • 创建并进入指定目录

    • mkdir svn_study && svn_study
  • 将该目录下的所有文件下载到当前目录下

    • svn co "要下载的仓库目录地址"
  • 另一种方式就是直接下载到一个不存在的目录

    • svn checkout "要下载的目录" 新的目标目录名
  • 下载下来的本地目录称为工作副本,要被下载的远程仓库地址称为版本库

Update (up) && ADD - 更新

  • 先对工作副本进行更新

    • svn up / svn update
  • coding过程

  • 查看文件状态

    • svn st
    • 如果是新的本地文件,会显示?
  • 添加文件

    • svn add 文件名
    • 本地文件添加后,会显示A

STATUS(STAT,ST) && DIFF(DI) - 查看区别

  • svn status/st

  • svn diff

    • 查看版本区别

COMMIT - 提交

  • svn ci -m "备注" 要提交的文件名

lOG - 查看log

  • svn log --limit=2 查看最近两条

进阶

  • 集中式的版本控制系统

  • 版本模型

    • 文件共享
    • 锁定-修改-解锁
    • 复制-修改-合并 默认方案
  • 版本库

    • 文件树的形式进行管理文件,一堆版本的集合
  • 版本

    • 每当版本库接受一个提交,文件系统就进入版本状态
    • 一个版本就是一堆修改的集合
    • 版本号从0开始,每次+1
  • 查看修改

    • svn diff -c 版本号
    • snv diff -r 版本号1:版本号2
  • word dat

    • 查看文件属性
      • svn pl -v 文件名
    • 对于二进制文件无法使用diff等指令
    • 对于文本文件可以
    • 修改文件属性为二进制
      • svn ps snv:pime-type application/outet-stream 文件名
    • 反向修改
      • svn ps snv:pime-type text/plain 文件名
    • 删除文件属性
      • svn pd svn:mime-type 文件名
  • svn将所有的文件都是通过diff形式保存(增量保存)

  • svn与git的区别

    • svn是集中式,只有一个远程仓库,必须联网;git是分布式的,有一个本地仓库,可以离线工作,有网再提交修改
    • svn有目录权限且分支昂贵(拷贝目录),git分支廉价(用指针指向某个提交,切换快)
  • 离线下的svn是无法提交修改的

  • .SVN目录- 工作副本下都会有的管理目录

协作技能

情景1 - 分支合并

merge
  • 合并前先查看状态并更新

    • svn st svn up
  • 在本地副本下

    • svn -merge -c 版本号 要合并的远程仓库的路径
    • svn st
    • svn diff 文件名 (比较差异)
    • 合并后再提交 svn ci ...
    • 再查看log svn log --limit=2
PATCH
  • 先将修改导出到文件
  • svn patch 文件
  • svn diff
  • svn ci
  • svn st/log

场景2 - 提交后代码回退

merge
  • svn merge -r 现在版本号:要回退的版本号 仓库地址
  • svn st
  • svn up
  • svn diff
  • svn ci...

场景3 - 提交前代码回退

  • svn st
  • svn revert .(或者某个文件名) -R
    • 回退所有修改
  • svn st

场景4 - 不下载分支但想修改

  • switch(sw)
    • 从当前的开发分支switch到另一个开发分支,再进行修改,就不用下载

场景5 - 同时提交一个文件的不同修改

  • 后者提交会出现冲突

  • 手动解决冲突

    • 编辑文件后
    • svn resolved 文件名
      • 消除冲突状态
  • 交互式解决冲突

    • 根据选项选择
    • 提交
posted @   bingekong  阅读(32)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示