代码管理 – SVN
代码管理工具也用了不少年了,整理下。
管理工具比较
用过VSS,CVS,TFS,SVN还有一个微软内部使用的不记得什么名字了。这里进行一些简单比较,重点介绍SVN的用法。
CVS历史悠久,1986年就发布了第一个版本,采用CS结构,服务器保持全部历史信息,主要用来管理文本,对其它类型的文件支持的不好。服务器上保存文件和修改的增量,可以直接打开编辑。按照文件来控制版本,当文件改名或挪地方之后,原来的历史信息就全丢了。不支持提交版本的原子性。操作简单直观,如果是简单的代码管理,这是比较合适的选择。
SVN由原CVS开发团队开发,目的是改进CVS存在的一些问题,进而替换CVS。SVN可以支持各种类型的文件,采用数据库保存文件,按照目录来标记版本信息,可以追踪改名和挪地方之前的历史信息,支持提交版本的原子性。功能更为强大,速度也更快,目前应用在许多企业项目中。
特性比较列表。详细的列表可以参考:http://en.wikipedia.org/wiki/Comparison_of_revision_control_software#cite_note-47
名称 |
版本库模型 |
并发模式 |
历史模式 |
变更范围 |
网络协议 |
原子提交性 |
部分克隆 |
CVS |
Client-server |
Merge |
Changeset |
File |
Pserver,ssh |
No |
Yes |
SVN |
Client-server |
3-way merge, recursive merge, octopus merge |
Changeset and Snapshot |
Tree |
custom (svn), custom (svn) over ssh, HTTP and SSL (usingWebDAV) |
Yes |
Yes |
Git |
Distributed |
Merge or lock |
Snapshot |
Tree |
custom, custom over ssh, rsync, HTTP/HTTPS, email, bundles |
Yes |
No |
* 版本库模型(Repository model):描述了多个源码版本库副本间的关系,有客户端/服务器和分布式两种模式。在客户端/服务器模式下,每一用户通过客户端访问位于服务器的主版本库,每一客户机只需保存它所关注的文件副本,对当前工作副本(working copy)的更改只有在提交到服务器之后,其它用户才能看到对应文件的修改。而在分布式模式下,这些源码版本库副本间是对等的实体,用户的机器出了保存他们的工作副本外,还拥有本地版本库的历史信息。
* 并发模式(Concurrency model):描述了当同时对同一工作副本/文件进行更改或编辑时,如何管理这种冲突以避免产生无意义的数据,有排它锁和合并模式。在排它锁模式下,只有发出请求并获得当前文件排它锁的用户才能对对该文件进行更改。而在合并模式下,用户可以随意编辑或更改文件,但可能随时会被通知存在冲突(两个或多个用户同时编辑同一文件),于是版本控制工具或用户需要合并更改以解决这种冲突。因此,几乎所有的分布式版本控制软件采用合并方式解决并发冲突。
* 历史模式(History model):描述了如何在版本库中存贮文件的更改信息,有快照和改变集两种模式。在快照模式下,版本库会分别存储更改发生前后的工作副本;而在改变集模式下,版本库除了保存更改发生前的工作副本外,只保存更改发生后的改变信息。
* 变更范围(Scope of change):描述了版本编号是针对单个文件还是整个目录树。
* 网络协议(Network protocols):描述了多个版本库间进行同步时采用的网络协议。
* 原子提交性(Atomic commit):描述了在提交更改时,能否保证所有更改要么全部提交或合并,要么不会发生任何改变。
* 部分克隆(Partial checkout/clone):是否支持只拷贝版本库中特定的子目录。
SVN用法介绍
先上资源:
- 主页: http://subversion.apache.org/
- 书籍:Version control with subversion = 使用Subversion进行版本控制 TP311.52 P637V2 RP. 2009
- 一个不错的使用教程,有详细的操作步骤和截图: http://www.cnblogs.com/armyfai/p/3985660.html
SVN是一个开源项目,只提供代码,并不提供可执行程序。程序由第三方提供,像Windows平台上有TortoiseSVN,VisualSVN,一般会提供GUI管理界面,都会提供命令行程序(注意安装时可能需要勾选)。参考wiki上各种终端的比较: https://en.wikipedia.org/wiki/Comparison_of_Subversion_clients
可以混合使用多个终端。这里只介绍TortoiseSVN和VisualSVN。
- TortoiseSVN。首页: https://tortoisesvn.net/ 。免费软件,集成在Explorer右键菜单,使用方便,功能强大,应用广泛。
- VisualSVN。首页: https://www.visualsvn.com。 企业版收费,简化版免费,SVN服务器端的GUI管理界面比较友好,提供VS集成插件。
可以同时使用两个终端,比如服务器端使用VisualSVN,客户端使用TortoiseSVN,这时候要注意版本兼容性。当然使用TortoiseSVN也完全可以应付服务器端的要求。
由于各个终端只是SVN的包装,甚至只是提供一个GUI,方便使用,所以功能相似。这里介绍一些命令行的使用方法,终端有相应的GUI选项。
命令格式
svn <subcommand> [options] [args]
- 子命令subcommand,指的是svn提供的一些功能,比如import、checkout。
- 选项options,有长选项和短选项(也就是缩略形式),长选项用两个短横,短选项用一个短横。有一些选项对所有子命令有效,作为全局选项。
常用命令
- 创建版本仓库:svnadmin create repos
- 查看命令帮助:Svn help import
- 往仓库中导入文件:svn import /tmp/myproject file:///var/svn/repos/myproject \ -m "initial import"
- 从仓库签出文件:svn checkout file:///var/svn/repos/myproject/trunk myproject
- 比较改动:svn diff
- 提交改动:svn commit
- 从仓库更新到本地:svn update
- 查看仓库内容:svn list
- 查看工作副本working copy的状态:svn status。使用-v选项可以看到详细信息
- copy或move文件: svn copy;svn move
- 从仓库导出文件,只是导出,不会有.svn目录,也就是不会用svn管理:svn export
- 状态恢复:svn cleanup。svn为了保证操作的原子性,在改动working copy的状态(.svn目录下的信息)会先写logfile,然后执行,执行完后删除logfile,这样在意外中断后可以通过执行logfile恢复。执行svn cleanup会执行中断的logfile,保证working copy的状态是一致的。当出现不一致的时候,提交、或者查看状态时会看到部分working copy的状态是“locked”。
svn目录。在工作副本的每个目录下都有一个隐藏的.svn文件夹,里面有svn进行版本管理的信息,比如工作副本的版本。不要改动这个目录,如果不小心破坏了这个目录,可以删除对应的目录,在上级目录重新签出checkout。
- 改变working copy的src url。为了避免和别人的改动相互影响,我们会创建一个主干的分支,然后在分支上工作,这时候我们可能会把本地的working copy的url从主干切换为分支,这样本地修改提交到分支。svn switch
分支branch与合并merge
合并分支到主干上
比如我现在对branch分支上新增3.txt文件,然后提交上去,如下所示:
我现在想把分支上的代码3.txt合并到主干上trunk,现在要怎么合并呢?步骤如下:
1. 回到我们刚刚的主干(trunk)文件夹下,鼠标右键该文件夹 --> TortoiseSVN --> Merge 如下图所示:
在弹出的窗口,如下图所示:
接着点击【Next】下一步,如下图所示:
注意这里的From填的是主干的url。这里的From、To的意思是选择合并的版本范围,也就是将主干head版本后到分支head版本之间的改动合并,然后放到Working copy下。不是将From版本合并到To版本的意思。
再接着【Next】下一步,如下图所示:
就可以看到主干trunk上多加了一个3.txt,就是从分支上合并过来的。
代码管理 – SVN的更多相关文章
- 个人代码管理--svn
通常开发中遇到自己电脑和公司电脑代码共享的问题.比如一些通用的库,图片等项目中基本通用. 一些项目库如google code, github内地访问又挺困难的,常常无法连接,或者慢死..还有就是必须开 ...
- [SVN Mac自带SVN结合新浪SAE进行代码管理]
前一篇我转载了别人SVN的使用方法,前面的配置和服务器我不是很明白,自己尝试后发现我需要使用到的核心命令是下面一些. 新浪SAE提供了SVN代码管理仓库,只要进入相应应用,然后点击左侧代码管理,到最下 ...
- git-svn:通过git来管理svn代码
简介 svn和git都是常用的版本管理软件,但是git无论在理念或是功能上都比svn更为先进.但是有的公司是以svn作为中央仓库,这时git与svn代码的同步就可以通过 git-svn这个软件进行,从 ...
- 【ConnerStone】SVN代码管理 - 基本使用
第一步,链接服务器,创建代码管理仓库 第二步,输入服务器的配置,链接服务器(例子是以svn:// 为例子) 第三部 ,链接成功后,SVN的基本界面组成 第四步 从仓库中check out你需要的项目 ...
- 在Windows Server 2008上部署SVN代码管理总结
这段时间在公司开发Flex程序,所以使用TortoiseSVN作为团队代码管理器,今天在公司服务器上部署SVN服务器,并实验成功,总结如下: 服务器环境: 操作系统:Windows Server 20 ...
- 测试思想-流程规范 SVN代码管理与版本控制
SVN代码管理与版本控制 by:授客 QQ:1033553122 欢迎加入软件性能测试交流群(QQ群):7156436 目录 一. 二. 三. 四. 五. 六. 七. 一. 创建根目录 创建一 ...
- SVN代码管理发布
1.svn的独立模式应用 2.svn钩子的应用(例如:代码提交前的文件格式限制,大小限制,代码发布svn成功后的备份等等) 3.大型企业的代码发布流程 有一些制度流程.逻辑方案 4.业务变更管理
- Visual SVN 企业版代码管理平台的建设
通常需要完整的SVN的代码管理平台系统的搭建,需要安装三个文件,Visual SVN server , TortoiseSVN, Visual SVN. Visual SVN server 企业版 ...
- IOS-源代码管理工具(SVN)
一.使用环境 要想利用SVN管理源代码,必须得有2套环境 服务器 用于存储客户端上传的源代码 可以在Windows上安装Visual SVN Server 大部分情况下,公司的开发人员不必亲自搭建SV ...
随机推荐
- MTP in Android详解
MTP in Android详解 最近好长一段时间没有做笔记了,今天主要学习一下MTP相关的知识. MTP的全称是Media Transfer Protocol(媒体传输协议),它是微软公司提出的一套 ...
- 在VC下采用ADO实现BLOB(Binary)数据的存储,读取,修改,删除。
在VC下采用ADO实现BLOB(Binary)数据的存储,读取,修改,删除. 作者:邵盛松 2009-09-05 前言 1关于的BLOB(Binary)数据的存储和读取功能主要参考了MSDN上的一篇& ...
- 关于Kean博客的学习
由于我从事设计行业,使用Autocad进行绘图是一件单调但是拥有乐趣的工作. 大约在一年前,接触到了CAD的二次开发的内容,它使我感到新奇,并且决定花时间来研究相关的知识.这时我在网上浏览到了Kean ...
- epoll的LT模式缺点
本文为原创,转载请注明:http://www.cnblogs.com/gistao/ epoll提供了ET和LT两种模式,网上文章很多,这里只总结下LT模式下的两个缺点 epoll对fd的管理实现是用 ...
- ABAP下载txt文件
IF NOT DOWN_F[] IS INITIAL. CASE DOWN_MODE . "下载模式是放在所选路径下的.TXT文档中 WHEN 'X' . CA ...
- SqlServer 触发器
--创建insert类型的触发器create trigger tgr_product_insert --创建触发器 on product --所针对的表 for insert --触发 ...
- jquery input 下拉框(模拟select控件)焦点事件
本章主要讲解如何实现select下拉列表可输入效果 ps:input提供输入,然后用ul去模拟一个select下拉列表效果即可,关键在于点击div之外的地方隐藏ul,下面是html基本结构: < ...
- Spring JdbcTemplate方法详解
JdbcTemplate主要提供以下五类方法: execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句: update方法及batchUpdate方法:update方法用于执行新增.修 ...
- 《Android深度探索HAL与驱动开发》第二章阅读心得
按照书中所讲的步骤,第一步先准备好搭建Android开发环境所需要的工具:JDK6或以上版本:Eclipse3.4或以上版本:ADT:CDT:Android SDK:Android NDK;交叉编译环 ...
- apache2.2 搭载本地中转服务器
android手机微信里点击本地链接=>apache2.2服务器响应--- 翻译网址至本地目标服务器 ---目标服务器响应,返回结果给微信浏览器. 运行环境 微信版本6.3.8 手机 MIUI6 ...