SVN版本控制初探

验证工具:SVN版本控制 SVN(Subversion)是一种集中式版本控制系统,它用于文件和目录的版本管理,允许多个用户协同工作,同时追踪每个文件和目录的历史修改记录。修改、添加、删除文件后,仅仅是影响了本地副本,还没有将其提交到版本库中,使用此命令提交更改。参数,会列出所有文件,第一列表示状态,第二列是版本号,第三和第四列是此文件最后一次修改的版本号及修改人。SVN默认的diff是没有颜色的,看起来很不方便,可以通过安装。下各文件的版本号,修改人,修改日期等信息,若没有。是这次提交的说明,这是必须的,可以为空。 阅读详情

1、基本概念

 

       版本控制系统,有时被称作源代码控制系统,是支撑项目开发的重要支柱。常用它来保存开发应用程序时文档的各个修订版(reversion)。目前已经有很多版本控制系统,比如CVS,Git,SVN等,本文主要介绍被广泛使用于开发中的SVN版本控制系统。

 

修订版(reversion)某个文件在其生命周期内保存的快照,与时间区域对应
本地工作拷贝(local working copy)修订版在本地的拷贝
版本库(repository)存放修订版的数据库
版本检入(check in)本地副本提交到服务器版本库
版本检出(check out)从服务器版本库中取出修订版成为本地工作副本
版本号来源基于文件的计数和基于仓库的计数,SVN采取后者
标签(tags)为版本加一个名字,便于记录检出
分支(branches)修订版打分支,以后可以平行修改,互不干扰
合并(merge)将分支的修订版合并为一个新的修订版
冲突(conflict)并发版本控制时防止修订版混乱的错误机制
锁(lock)为修订版加锁

       

subversion有三种联网协议:svn、svn+ssh、http。subversion通过自带的监听网络连接的svnserve小服务器达到svn访问,但文件内容传输的时候没有加密,且密码以明文方式存储在服务器的conf目录中,只能由能够访问密码文件的管理员修改;ssh使用了强大的加密机制保护客户机服务器会话的内容,被广泛用于管理互联网上的服务器;apache是高度可配置的,而subversion利用了其内建的安全机制和可缩放性,可以使用标准的http和https架设项目仓库,利用apache支持的所有验证机制。

      subversion不但能版本化文件,还能版本化目录;SVN版本号针对整个目录树,而非单个文件,每个版本号代表了一次提交后版本库整个目录树特定状态;同时支持拷贝-修改-合并和锁定-修改-解锁两种操作模式,前一种更有利于协作;提交是原子提交的,要么全部成功要么失败;它在本地维护一个原始的版本缓存(text-base),可使提交只传递修改的部分而非整个文件。

 

      

 

     SVN支持几个内置版本关键字,HEAD表示最新版本,BASE是工作拷贝检出或更新时的版本,COMMITTED是每个文件或目录最新的版本,PREV是COMMITTED的前一个版本。PREV,BASE,COMMITTED只在引用工作拷贝路径时使用,不能用于版本库URL,HEAD则可用于两种路径类型。

      分支和标签在实现上均是拷贝。SVN自身只知道拷贝而并不了解其含义。一个复制的目录之所以是标签是因为人们决定这样使用它,只要没有人修改这个目录,它永远是一个快照,但如果开始修改,它就变成了分支。每个分支都可追踪其历史版本到主干的根部。在分开的部分,则各自看不到其它分支的版本。 

 


2、常用命令

 

import:将未版本化的文件纳入版本控制并提交

checkout:从版本库中检出一个修订版

update:更新工作拷贝

add,delete,copy,move:增、删、复制、移动文件或目录

status:检查状态差异

diff:检查文件行级详细差异

revert:恢复

resolve:解决冲突

switch:切换工作拷贝对应的版本库分支

log:查看历史记录

list:显示文件目录

cat:查看某个文件内容

 


3、实战演练

 

(1)获取帮助:  

命令行下输入 svn help,它会列出所有支持的命令集合,或者要查看具体的命令使用方法svn help ci

 

(2)获取更新:

频繁地更新你的工作拷贝,不断合并他人的改动是个不错的主意,这样减少冲突可能性。在工作拷贝中使用svn update会从项目仓库中更新目录中的所有文件及其子目录中文件。

svn up [-r200]

      在更新过程中,subversion会显示每个文件的状态及对应的重要活动。打印出来的这些信息表明对每个文件和目录都做了些什么。A代表项目仓库中有新文件被添加到了工作拷贝;U表示已经用项目仓库中最新文件替换掉工作拷贝的老版本文件;D表示项目仓库中删除了文件,subversion把它从工作拷贝中移除;G表示工作拷贝中文件已经过期,而且本地还做了修改,会将项目仓库中版本和本地版本进行合并;C表示工作拷贝文件过期,而且本地也做了修改,尝试合并的时候遇到冲突。

 

(3)将项目加入版本控制:

使用svn import命令,它会自动递归提交一个路径的拷贝到版本库中。import子命令在导入数据之后,你会发现原先的目录树并没有纳入版本控制,为了开始工作,你还是要运行svn co得到一个干净的目录树工作拷贝。

svn import youku http://svn1.spec-develop.com/cdrd/storage-boss/branches/youku

 

(4)如何拉分支:

svn cp http://svn1.spec-develop.com/cdrd/storage-boss/trunk/jss_manager  http://svn1.spec-develop.com/cdrd/storage-boss/branches/v_20120808/jss_manager-m 'huanggang cp

 

(5) 

检出项目:

svn checkout命令(简写为co)让Subversion能从项目仓库的一个目录中取出文件并创建新的工作拷贝。如果不指定特定名字,该命令会把工作拷贝创建在一个与项目仓库目录同名的目录中,且取的是最新版本,当然,你也可以带上-r参数取出特定版本。要搞清楚项目是从哪来的,可以在项目目录下执行svn info命令。

svn co [-r4203] http://svn1.spec-develop.com/cdrd/storage-boss/trunk/jss.platform [spec_version]

 

 (6)显示提交日志信息:

显示提交的日志信息。默认,显示该分支的所有相关版本提交日志。 如果只想显示自己打的分支,提交的日志情况,可以使用“—stop-on-copy”即可(stop前是2个“-”)

svn log --stop-on-copy http://svn1.spec-develop.com/cdrd/storage-boss/branches/jss_shared_20120703 

 

(7)合并分支到主干:

首先将主干代码检出到本地,然后查看分支版本提交日志,查看需要合并起始的版本号,如下

svn merge --dry-run -r8756:HEAD http://svn1.spec-develop.com/cdrd/storage-boss/branches/v_20120808/jss_shared 

--dry-run 表示假合并,并没有真正合并分支修改到新分支,如果要真做,删除该参数。最新版本可用“HEAD”表示。恢复旧版本,只要把版本次序倒过来。svn merge的原理是对比版本差异,然后把差异的内容应用、合并到本地工作拷贝中。高版本:低版本,相当于“相对于高版本,低版本删除或者修改了哪些内容”。

  

(8)解决冲突

当出现“svn up”下来的文件和本地的有冲突(即出现C状态)的时候,冲入如何解决呢? 

a,打开文件:vi bundle/war/src/webroot/META-INF/autoconf/log4j.xml 

b,你会发现有这么3个标识: 

<<<<<<< .mine 

======= 

>>>>>>> .r250702 

另外还有3个文件: 

?       bundle/war/src/webroot/META-INF/autoconf/log4j.xml.r250274 

?       bundle/war/src/webroot/META-INF/autoconf/log4j.xml.mine 

?       bundle/war/src/webroot/META-INF/autoconf/log4j.xml.r250702 

以上意思是:“<<<<<<< .mine”和“=======”之间的是你本地添加到内容。“=======”和“>>>>>>> .r250702”部分的就是svn up下来的内容。 

c,捞出修改这部分代码的开发,跟他一起确认如何解决冲突。 

d,当确认了解决方案,解决了冲突,就删除类似以上那3个标识。 

最后:

svn resovled bundle/war/src/webroot/META-INF/autoconf/log4j.xml 

冲突解决。你会发现上面的3个文件不翼而飞了。 


 

4、最佳实践 

•   所有项目放在一个版本库中

•   每个项目创建自己的目录,其下各自创建trunk,branches和tags三个目录

•   trunk目录存放开发主线

•   branches目录存放分支拷贝

•   tags目录存放标签拷贝

•  开发和bug修正均每日提交到主干上

•  将测试的版本拷贝到测试分支。如/branches/1.0

•  并行工作,测试组对测试分支进行测试,开发组在主干上继续工作

•  如果一个bug在任何一个位置被发现,错误在主干上修正,然合并到分支上

•  测试结束,/branches/1.0拷贝到/tags/1.0.0,发布给客户

•  发布后的bug修正继续提交到主干上,并从主干合并到/branches/1.0

•  当积累了足够的bug修正,拷贝/branches/1.0到/tags/1.0.1,发布版本1.0.1

•  主干的2.0开发完成,一个新的2.0分支被创建,测试、打标签和最终发布

•  经过许多年,版本库结束了许多版本发布,进入了“维护”模式,许多标签代表了最终的发布版本

•   使用分支进行特性开发

•  特性开发是使用分支进行组件独立开发,最终合并的方式

•  开发周期一般为折衷模式。如果工作独立性较强,修改量较大,应该使用特性分支

•  应每周一次从主干合并更新到分支,以防止与主干差异性过大

 

 


来源:https://i-blog.csdnimg.cn/blog_migrate/3d8feb680b8f2ed59a88f0a0c4f940b3.png


svn版本控制在eclipse中用法详解 svn是当前一种注流的开源代码的版本控制系统。在一些大中型项目中,代码的版本控制是必不可少的。svn用于代码管理有以下几种作用: 1,可以多人同时进行编码,方便解决整合过程中的冲突。 2,可以追溯到之前版本,追溯问题代码的修改人,更快发现问题。 3,可以在进行权限的控制。 4,方便产品的发布。 我也是刚接触svn不久,在项目的开发中,它着实带给我很多方便,在此详细的说下svn的相关简介及 阅读详情

相关推荐

SVN+Gitee配置版本控制库

利用SVN和Gitee设置自己的版本控制,方便多端协同操作。

JiaHao的博客 4105

【SVN】http和https的区别

导读:输入网址的时候,经常输入http://什么什么的,但http是什么,一直都不知道。然后,这回在SVN的学习中,又出现了http和https,而且还有说https的8443端口相对优越,我就在想,这是为什么呢? 一、基本定义 1,http Hypertext transfer protocol:(超文本传送协议)是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网

该怎么解释?我懒得解释 4278

VisualSVN Server 2.1.1安装与配置实战指南

安装过程中还可以指定两个重要路径:安装目录:例如仓库根目录:例如🎯 最佳实践建议:- 将程序与数据分离存放,避免系统盘爆满影响服务;- 数据盘建议使用 SSD 或 RAID 阵列提升 I/O 性能;- 为仓库目录预留足够空间(初始每项目 10GB+,按年增长预估);从安装到权限,从安全到运维,我们走完了 VisualSVN Server 的完整生命周期。这不是一个简单的“装个 SVN”教程,而是一整套面向企业的工程化解决方案。

weixin_35414484的博客 1106

对Linux svn保存的明文密码加密

需求来源: 随着GitHub/GitLab的兴起,svn已经渐渐的没落了,从公司当初的源代码管理服务器,逐渐演变成公司的ftp服务器。 最近需要部署gitlab的CI单元测试模块,而软件版本都在svn上有备份,我就希望从代码的提交->到版本的打包->再到版本的单元测试->安装包上传svn准备发布,整个过程自动化完成。这样会大大的提高生产力。 遇到的问题: ...

jfu22的专栏 3648

告别手动操作!用Python脚本批量处理Siemens NX零件文件(导入/导出/移除参数)

本文详细介绍了如何利用Python脚本实现Siemens NX零件文件的批量处理,包括导入、导出和移除参数等操作。通过NX Open API和Python UF接口,工业设计师可以大幅提升工作效率,告别繁琐的手动操作。文章提供了完整的实战指南,涵盖环境配置、核心功能实现以及性能优化技巧,特别适合需要进行Siemens-NXUG二次开发的工程师参考。

weixin_28222493的博客 261

手把手教你做基于stm32的红外、语音、按键智能灯光控制(上)

这次项目使用的板子是stm32f103c8t6最小系统板,这个板子在tb上都能够买到,随便一个最小系统板都可以,== 注意在买最小系统板的时候需要买一个stlink下载器来下载程序。显示模块是使用的0.96英寸的OLED屏幕,注意是使用的IIC通信协议的OLED屏幕,不是使用SPI总线协议的。这次写的代码还顺便集成了检测温湿度的功能,所以要使用DHT11温湿度传感器,来采集温度。本文所设计的基于单片机的灯光控制系统主要由模式选择功能、手动模式和自动模式组成。LED灯自然就是要控制的部件了。

nbbskk的博客 6557

SVN源码泄露利用原理+实战

0x00 利用原理 关于svn的原理之前看过很多个,但是大多就是造成泄露的原因,无非就是人为粗心导致的。 关于svn利用分两个版本一个版本是svn>1.6,还有一个是svn<1.6 svn>1.6,文件名会被hash,然后再按照文件名对应hash的方式存到wc.db中,就是个sqlite数据库。最后我们按照名称遍历下载即可。 svn<1.6,文件会先去读取entries文件...

王嘟嘟的博客 1万+

【数据挖掘】遗传算法原理浅析:什么是遗传算法?遗传算法的工作原理是什么?

遗传算法(Genetic Algorithm,GA),是进化算法的框架和核心。 各种进化算法有什么异同? - 及时物语的回答 - 知乎 https://www.zhihu.com/question/39152390/answer/901070749

纸羊同学的博客 4277

初探在线SVN代码版本控制库

使用工具:Myeclipse10.7 + SVN1.8插件 + Tortoise SVN (这个主要用于初始化代码库测试使用,主要是感觉用IDE加插件第一次Checket out时候会有点卡) 在寻找的过程中找到了一个介绍常见在线SVN代码托管工具介绍的一篇blog,也尝试了几个; 第一个是国内的SVN Hosting SVN Hosting(私有、收费、国内) 免费用户 1)如...

weixin_30699235的博客 161

新手必看:5分钟搞定Unitree Go1机器狗Gazebo仿真运动控制(附按键图解)

本文为新手提供了Unitree Go1机器狗在Gazebo仿真环境中实现运动控制的快速指南。通过5分钟极简配置和按键图解,帮助开发者快速掌握宇树科技明星产品的基础操作,包括环境搭建、仿真启动和运动控制技巧,适合零基础用户快速上手。

weixin_42550597的博客 300

国产数据库PolarDB-X实战:5分钟快速搭建本地开发环境(附Docker一键部署脚本)

本文提供了一份详尽的国产分布式数据库PolarDB-X本地开发环境搭建指南。通过Docker Compose一键部署脚本,开发者可在5分钟内快速启动一个功能完整的PolarDB-X实例,涵盖环境准备、脚本解析、连接验证及日常维护,极大简化了国产数据库的入门和体验流程。

weixin_29246195的博客 358

vxe-grid智能筛选实战:模糊搜索、多选与范围查询全解析

在后台管理系统开发中,表格筛选是高频需求,但传统表单堆砌方式代码冗余且难以维护。vxe-grid作为企业级表格组件,通过filter配置机制将筛选内聚到列头,支持声明式定义。其核心包含filter选项、filterRender自定义渲染、filterMethod匹配逻辑及filter-change事件,可组合实现模糊搜索、多选过滤、数字与日期范围查询。前端过滤适合全量数据,服务端模式则需配合remote配置与接口参数拼接,结合防抖与loading优化体验。掌握配置驱动思维,可大幅降低复杂筛选的工程成本,让表

weixin_33866037的博客 362

TPL5010硬件看门狗电路

在做一些采集频率很低的产品的时候,会考虑电池供电,比如表、电气表等,为了控制功耗,往往会在设备不需要工作的时候让它进入低功耗模式。为了设备的稳定性,避免死机后无法恢复,必须配置看门狗,一般的看门狗芯片,喂狗间隔时间是几秒钟。这样在喂狗和低功耗之间就产生了一个矛盾,频繁的喂狗就需要频繁的醒过来,这样功耗就很难做到很低。这颗看门狗芯片,特别适合上面的应用。2小时的间隔意味着主控芯片每2小时醒过来喂狗一次即可,而在2.5V供电的情况下,功耗仅仅35nA,几乎可以忽略不计。

zxm8513优快云博客 3308

svn 初步学习 版本控制

 今天在公司刚刚学习了svn的使用,说来也惭愧,在大学么用过,这是第一次用,以前在电脑上看到过这个东西,但是不知道还又这个用处。。。。现在想想,这个东西。很好很强大少罗嗦,来说了。  使用步骤1 登陆服务器下载证书   https://。。。。。。地址了  第一次登陆会让安装证书,选择查看,安装,就好了 2 从IE中把地址复制下来   右击目标文件夹----

netdata的专栏 369

LLM Wiki 的完整输入体系:LLM Wiki极简实战

LLM Wiki 的输入分为**四大类**,覆盖从"原始知识注入"到"系统行为控制"的全流程,所有输入都遵循"**原始资料不可变,规则可迭代,人类反馈闭环**"的核心原则。

ZhangJiqun&191cm&85kg 322

OpenCV C++ 图像处理实战 ——《基于轮廓比对的缺陷检测》

本文使用OpenCV C++ 实现基于轮廓比对的缺陷检测。

Zero___Chen的博客 1149

SVN版本控制软件

SVN版本控制软件 SVN是什么 SVN的全程是subversion,SVN版本控制软件可以解决协助开发、远程开发和版本回退三个问题。 特点:操作简单、入门简单、跨平台操作 。 SVN是输入C/S服务类软件,有客户端和服务端。 SVN的服务端 checkout(检出) update(更新) Commit(提交、上传) SVN的服务器的安装和配置工作 安装按照教程一步步的安装...

xiaownezi666的博客 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SVN取消版本控制

SVN取消版本控制 如果不小心把本地的一个文件夹关联到SVN的话,文件夹就会出现红色感叹号或者绿色勾的标志,看着非常不舒服,如何才能取消SVN的版本控制: 一:解除控制 方法1 如果使用了TortoiseSVN客户端的话,右键需要解除控制的文件夹,然后光标移到TortoiseSVN的位置,在右边的候选栏中点击Export选项,如下图: 点击进去之后,如下图所示,需要到对应的磁盘选中你要解除控制的文件夹。 选中之后就会出现如下弹窗,直接选择接触控制即可。 可以看到SVN的标记消失了。

Dalish_的博客 1万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

版本控制工具——SVN

SVN的简介和使用

ZZQ的博客 1739

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

原创|手把手教你如何在AD中使用SVN版本控制

Altium Designer支持Subversion(SVN)和Git版本控制系统(VCS)。因为它对这些系统有内部支持,所以它提供了对AD中常见的SVN/Git 文件处理命令的访问,例如提交、更新等,以及附加的Subversion功能,例如创建SVN存储库的能力。这与原理图和PCB比较功能集成在一起,可以轻松快速比较和识别原理图或 PCB文档的两个修订版之间的差异,对于PCB设计,使用AD协作功能解决并发修订冲突。 SVN的一些概念 repository(源代码库):源代码统一存放的地方 Checko

果果小师弟的博客 8643

【SVN版本控制工具】

本文主要介绍SVN版本控制工具的使用场景和方法。

deng_deng123的博客 3352

svn版本控制详解(持续更新)

Maven maven是一个项目管理工具 原项目问题 1. 项目引入各种Jar包,比较大的项目引入的Jar包往往有几十个乃至上百个。 2. Jar包之间发生的Jar包冲突、版本冲突不好解决 3. Web项目构建通过集成工具(IDEA,Eclipse),需要多步骤来完成 4. 单元测试繁琐 试想一下,如果有一种工具,可以将开发者从上面的繁琐工作中解放出来,能帮你构建工程,管理jar包,编译代码,还能............

Ferao的博客 5312

解除svn版本控制

之前只知道将项目文件加上svn版本控制,却不知道怎么去解除svn版本控制,后来在朋友的介绍下,总结三种比较简单粗暴的方法: 一、找到svn控制的目录,将目录下的所有.svn文件全部删掉。 二、新建一个txt文件,将下列文字复制到txt中,然后把扩展名改为reg(使其成为注册表文件),放到需要去除.svn的目录中,双击运行注册表。 Windows Registry Editor Version 5....

luyongguo的博客 5896

SVN版本控制工具

第一部分 :SVN介绍 什么是SVN? SVN是一个跨平台的开源的版本控制系统。SVN版本管理工具管理着随时间改变的各种数据。这些文件放置在一个中央资料档案库中,并且SVN会备份并记录每一个文件每一次的修改更新变动。因此当开发过程中出现问题,可以回滚到任意旧的版本。 SVN和GIT的区别 svn是集中式的数据管理,所有的数据都存在一个中央版本库。 svn的备份要备份所有代码数据以及所有更改的版本记...

蹊源的奇思妙想的博客 2149
上一篇: Swift编程语言资料大合集
下一篇: 深入学习:Windows下Git入门教程(上)
SpeedyCoder
博客等级 码龄14年 415粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值