代码管理 – 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 ...
随机推荐
- JAVA(2)
java面向对象编程的四大特征: 1.抽象 2.封装 3.继承 4.多态 封装 //职员 class Clerk { public String name; //private私有的 private ...
- block,inline和inline-block概念和区别(转)
转自 http://www.cnblogs.com/KeithWang/p/3139517.html 总体概念 block和inline这两个概念是简略的说法,完整确切的说应该是 block-lev ...
- HDU 1710
http://acm.hdu.edu.cn/showproblem.php?pid=1710 题意:给二叉树的先序遍历和中序遍历,确定后序遍历 解法:复习专业课找的一题,根据先序遍历和中序遍历建树,再 ...
- 基于mongodb的java之增删改查(CRUD)
1,下载驱动https://github.com/mongodb/mongo-java-driver/downloads,导入工程java中 2,建立测试代码 import java.net.Unkn ...
- 关于对CSS尺寸单位'em'的长期误解
一直以来认为'em'是相对于父元素的字体大小. 直到今天学习移动WEB开发,重新复习css的尺寸大小时,惊奇发现:对em深深的误解了!!! 在CSS官网对em的解释实例是: a. h1{line-he ...
- LintCode Two Strings Are Anagrams
1. 把string变为char数组 2. 排序Arrays.sort() public class Solution { /** * @param s: The first string * @pa ...
- 怎么使用jquery阻止页面的离开或卸载
//绑定beforeunload事件$(window).bind('beforeunload',function(){return '您输入的内容尚未保存,确定离开此页面吗?';});//解除绑定,一 ...
- 《Android深度探索HAL与驱动开发》第四章阅读心得
Android源代码包含了很多内容,可以实现拍照.计算机.日历.相册.拨号器等功能.配置Android源代码下载环境需要如下几步: (1)创建一个用于存放下载脚本文件的目录: (2)下载repo脚 ...
- [2]项目创建-使用C#.NET开发基于本地数据缓存的PC客户端
1.新建项目->已安装->模板->Visual c#->Windows桌面->Windows窗体应用程序,截图如下: 图中1:输入项目名称-“MoneyNotes”,图中 ...
- UVa 673 平衡的括号
题意:给出包含"()"和"[]"的括号序列,判断是否合法. 用栈来完成,注意空串就行. #include<iostream> #include< ...