SVN 入门
版本控制
-
目的
- 追踪文件的变更历史
- 记录变更细节
- 支持多人协作
- 能回退和合并版本
-
工具
- SVN - SubVersion
- 同一个内网下,没有较强的分布式需求
- git
- 需要更好分布式的性能
- perforce
- 占用内存空间比较小,美术资源友好,更新下载速度快
- unreal推荐,并且UE4自带的UGS工具,方便项目整体协作
- 二进制文件或者非文本文件偏多更适合用perforce
- SVN - SubVersion
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 文件名
- 消除冲突状态
-
交互式解决冲突
- 根据选项选择
- 提交
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现