svn 经常使用指令

1. 版本控制介绍

1.1. 什么是版本控制

版本控制系统用于保存编写开发应用程序时的文档的各个修订版(revision)。php

版本控制也称做Revision Control System(RCS)。linux

名词解释:数据库

  • 修订版(revision):能够认为是某个文件在其生命周期内各个保存的快照,每一个快照和一个时间区间对应。
  • 版本库(Repository):存放修订版的数据库
  • 本地工做拷贝(Local working copy):修订版在本地的副本
  • 版本的检入(Check in):本地副本提交到服务器的版本库
  • 检出(Check out):从服务器的版本库中取出修订版成为本地副本
  • 版本号的来源:有两种策略,基于文件的计数和基于仓库的计数,subversion使用后者
  • 标签(Tags):为版本加一个名字,便于检出
  • 分支(Branches):修订版打分支,之后能够平行修改,互不干扰
  • 合并(Merging):将分支的修订版合并为一个新的修订版
  • 锁(Locking):为修订版枷锁
  • 冲突(Conflict):并发版本控制时防止修订版混乱的错误机制

 

1.2. 使用版本控制的好处

 

对团队和我的都有好处:apache

  • 为团队提供了全部项目文档的回退按钮;
  • 支持多个开发人员在可控的方式下为相同的代码工做;
  • 版本控制系统保存了文档在过去的各个改动,便于查找是谁,在什么时候,由于什么修改了文档;
  • 支持在文档的主线上同时有多个版本;
  • 支持查询在某个时点上项目各个文档的状态,可用于研究生产效率等,也可用于对之前的软件发行版的再发行。

 

1.3. 常见的版本控制系统

 

 

2. Subversion介绍

 

Subversion是新一代的版本控制工具,正逐步替代CVS。dom

资源:eclipse

 

3. Subversion基本使用

 

 

3.1. Subversion安装

 

Subversion是典型的C/S模式应用程序。

Windows环境下的安装包:http://subversion.tigris.org/files/documents/15/41687/svn-1.4.6-setup.exe

安装过程很简单,图形界面,默认选择便可。

输入svn命令查看安装是否成功:

 

svn --version

 

svn命令是subversion程序的客户端

svnserver命令能够启动svn服务器,用于搭建简易的svn服务器环境

见:http://www.easymorse.com/bbs/viewthread.php?tid=95&extra=page%3D1

 

3.2. 服务器端

 

如下是搭建简易的服务器端环境的作法,正式通常配合apache经过http访问。

 

3.2.1. 建立版本库

 

建立服务器端版本库,至关于DBMS建立数据库示例。

命令行:

 

svnadmin create file_path/repo_name

 

 

3.2.2. 启动服务器

 

 

svnserve.exe -d  -r file_path

 

  • -d 后台执行
  • -r 版本库的根目录

访问该版本库的url:svn//localhost/repo_name

 

3.3. 客户端

 

 

3.3.1. 初始导入(import)

 

经过命令行导入:

 

svn import -m "init import" http://10.0.0.6/svn/teaching/

 

该命令可将当前路径下文件导入到版本库中。

 

3.3.2. 检出(checkout)

 

经过命令行检入:

 

svn co http://hibernate3demo.googlecode.com/svn/tags/helloworld_r1

 

或者:

 

svn checkout http://hibernate3demo.googlecode.com/svn/tags/helloworld_r1

 

或者:经过第三方图形工具的检出,好比tortoiseSVN(http://tortoisesvn.tigris.org/)

将svn服务器的最新修订版下载到本地成为本地工做拷贝。

 

3.3.3. 保持更新(update)

 

命令行:

 

svn update

 

或者

 

svn up

 

或者经过tortoiseSVN

或者经过eclipse插件,subclipse(http://subclipse.tigris.org/),在线安装:http://subclipse.tigris.org/update_1.2.x/

用svn服务器的最新修订版更新本地工做拷贝。

多人合做时:

  • 更新要常常频繁的作,尽可能让问题及早暴露,便于处理。
  • 提交代码前要更新,不然容易产生版本冲突。

 

3.3.4. 添加(add)

 

命令行:

 

svn add file_path

 

或者经过tortoiseSVN,eclipse插件。

告知svn服务器,添加目录和/或文件到服务器上,这个操做相似SQL的insert,可是并无真的操做,直到commit。

 

3.3.5. 提交改动

 

至关于通用概念:检入(checkin)。

命令行:

 

svn commit

 

或者:

 

svn ci

 

或者经过tortoiseSVN,eclipse插件。

提交本地工做拷贝的全部改动,并且是原子性的。

要求:通常要注明修改的缘由

 

svn ci -m "修改bug #224"

 

要求:提交以前要作更新

 

svn up
svn ci -m "修改bug #224"

 

 

3.3.6. 还原改动

 

对应提交(commit),要有相似回滚(rollback)的操做。

 

svn revert

 

或者经过tortoiseSVN,eclipse插件。

这个操做对开发人员十分有用,在改动被人不少代码后能够“一键恢复”。

 

3.3.7. “还原”已提交的改动

 

revert只适合未提交的状况。

若是已经提交,发现问题,要回退到以前的修订版。

首先须要:

 

svn up

 

让本地工做拷贝更新到最新状态。

而后:

 

svn log your_file_path

 

查看文件日志,这时候提交时填写的说明信息就派上用场了。

查看两个修订版之间的不一样:

 

svn diff -r 旧修订版序号:新修订版序号 your_file_path

 

或者经过tortoiseSVN,eclipse插件。

决定用哪一个旧的修订版号后,用旧的修订版号文件覆盖新的修订版号文件。

 

svn merge -r 新修订版序号:旧修订版序号 your_file_path

 

还须要:

 

svn commit -m "恢复到某修订版(某修订版做废)"

 

或者经过tortoiseSVN,eclipse插件。

这个还原是所谓的,不是用旧的版本号替代,而是将旧文件覆盖新文件。

 

3.3.8. 拷贝文件和目录

 

命令行:

 

svn copy path/file_name newpath/new_file_name
svn commit -m "xxxx"

 

或者:

 

svn cp path/file_name newpath/new_file_name
svn commit -m "xxxx"

 

或者:利用windows的资源管理器/unix的cp命令

或者经过tortoiseSVN,eclipse插件。

svn的copy,是很重要的工具,版本分支和标签等概念都经过它实现。

svn的copy,是廉价的拷贝。

 

3.3.9. 重命名目录/文件

 

命令行:

 

svn move file_name new_file_name

 

或者:

 

svn mv file_name new_file_name

 

 

3.3.10. 处理合并冲突

 

svn默认不对文件加锁。

若是不一样人编辑了同一个文件的不一样部分,提交时会自动合并。

若是不一样人编辑了同一个文件的同一部分,后提交者会报告合并冲突。

解决方法(人工仲裁):

  • 放弃改动;
  • 坚持你的改动,找到.mine的文件名,恢复为原文件名,而后执行:
    svn resolved file_name
     

 

3.3.11. 删除文件

 

将本地工做拷贝删除。

命令行:

 

svn delete file_path

 

或者:

 

svn del file_path 

4. Subversion高级内容

 

4.1. 文件锁

 

通常用于二进制内容,由于没法合并。

若是某个文件加锁,其余用户的本地工做拷贝(更新后)将是只读的。

当该用户提交后,其余用户的本地工做拷贝(更新后)才能够写操做。

其余用户能够“撬锁”,而后进行写操做。

高级配置能够配置“撬锁”权限,使不是什么人均可以“撬锁”。

 

4.2. 版本库建立策略

 

单一的版本库保存一个项目。

单一的版本库保存多个项目。

多个版本库。

 

4.3. 使用标签和分支

 

在svn中标签和分支都源于copy命令。

3个约定俗成的目录:

  • trunk:主干
  • branches:分支
  • tags:标签

发布分支:

 

svn cp -m "建立用于实现radio标签的分支" https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_1 https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_2

 

切换分支:

 

svn switch https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_2

 

合并分支须要两个步骤:

合并操做

 

svn merge -r 33:HEAD https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_2

 

或者:

 

svn merge https://easymorse-simpletag.googlecode.com/svn/trunk/simpletag@HEAD https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_1@HEAD

 

提交。

 

5. 未讲到的内容

 

  • svn备份
  • subversion属性
  • 与apache集成的配置和使用

 


原文连接:http://www.iteye.com/topic/28013

一直以来用svn只是看成cvs,也历来没有仔细看过文档,直到今天用到,才去翻看svn book文档,惭愧 

需求一: 
有一个客户想对产品作定制,可是咱们并不想修改原有的svn中trunk的代码。 

方法: 
用svn创建一个新的branches,从这个branche作为一个新的起点来开发 

  1. svn copy svn://server/trunk svn://server/branches/ep -m "init ep"  



Tip: 
若是你的svn中之前没有branches这个的目录,只有trunk这个,你能够用 

  1. svn mkdir branches  


新建个目录 


需求二: 
产品开发已经基本完成,而且经过很严格的测试,这时候咱们就想发布给客户使用,发布咱们的1.0版本 

  1. svn copy svn://server/trunk svn://server/tags/release-1.0 -m "1.0 released"  



咦,这个和branches有什么区别,好像啥区别也没有? 
是的,branches和tags是同样的,都是目录,只是咱们不会对这个release-1.0的tag作修改了,再也不提交了,若是提交那么就是branches 



需求三: 
有一天,忽然在trunk下的core中发现一个致命的bug,那么全部的branches必定也同样了,该怎么办? 

  1. svn -r 148:149 merge svn://server/trunk branches/ep  


其中148和149是两次修改的版本号。 


其余的呢?看文档

 


 

原文地址:http://blog.chinaunix.net/space.php?uid=22976768&do=blog&id=1640924

 
 
windows下的TortoiseSVN是资源管理器的一个插件,以覆盖图标表示文件状态,几乎因此命令都有图形界面支持,比 较好用,这里就很少说。主要说说linux下svn的使用,由于linux下大部分的操做都是经过命令行来进行,因此必须得掌握linux下svn的经常使用 指令。固然linux下也有模仿TortoiseSVN的linux X程序,例如RabbitVCS,模仿程度很高,但很容易拖慢X,所以不推荐。
    (若是是第一次提交文件,极可能会出现“svn:'.'不是工做副本”,即当前目录不是工做副本,这个时候须要用到import:
eg:svn import . url)
一、将文件checkout到本地目录
svn checkout path(path是服务器上的目录)
例如:svn checkout svn://192.168.1.1/pro/domain
简写:svn co
二、往版本库中添加新的文件
svn add file
例如:svn add test.php(添加test.php)
svn add *.php(添加当前目录下全部的php文件) 
三、将改动的文件提交到版本库
svn commit -m “LogMessage“ [-N] [--no-unlock] PATH(若是选择了保持锁,就使用–no-unlock开关)
例如:svn commit -m “add test file for my test“ test.php
简写:svn ci
四、加锁/解锁
svn lock -m “LockMessage“ [--force] PATH
例如:svn lock -m “lock test file“ test.php
svn unlock PATH 
五、更新到某个版本
svn update -r m path
例如:
svn update若是后面没有目录,默认将当前目录以及子目录下的全部文件都更新到最新版本。
svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)
svn update test.php(更新,于版本库同步。若是在提交的时候提示过时的话,是由于冲突,须要先update,修改文件,而后清除svn resolved,最后再提交commit)
简写:svn up 
六、查看文件或者目录状态
1)svn status path(目录下的文件和子目录的状态,正常状态不显示)
【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预约加入到版本库;K:被锁定】M状态通常比较多
2)svn status -v path(显示文件和子目录状态)
第一列保持相同,第二列显示工做版本号,第三和第四列显示最后一次修改的版本号和修改人。
注:svn status、svn diff和 svn revert这三条命令在没有网络的状况下也能够执行的,缘由是svn在本地的.svn中保留了本地版本的原始拷贝。
简写:svn st 
七、删除文件
svn delete path -m “delete test fle“
例如:svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”
或者直接svn delete test.php 而后再svn ci -m ‘delete test file‘,推荐使用这种
简写:svn (del, remove, rm)
八、查看日志
svn log path
例如:svn log test.php 显示这个文件的全部修改记录,及其版本号的变化
九、查看文件详细信息
svn info path
例如:svn info test.php
十、比较差别
svn diff path(将修改的文件与基础版本比较)
例如:svn diff test.php
svn diff -r m:n path(对版本m和版本n比较差别)
例如:svn diff -r 200:201 test.php
简写:svn di 
十一、将两个版本之间的差别合并到当前文件
svn merge -r m:n path
例如:svn merge -r 200:205 test.php(将版本200与205之间的差别合并到当前文件,可是通常都会产生冲突,须要处理一下)
十二、SVN 帮助
svn help
svn help ci
——————————————————————————
以上是经常使用命令,下面写几个不常常用的
——————————————————————————
1三、版本库下的文件和目录列表
svn list path
显示path目录下的全部属于版本库的文件和目录
简写:svn ls
1四、建立归入版本控制下的新目录
svn mkdir: 建立归入版本控制下的新目录。
用法: 一、mkdir PATH…
二、mkdir URL…
建立版本控制的目录。
一、每个以工做副本 PATH 指定的目录,都会建立在本地端,而且加入新增
调度,以待下一次的提交。
二、每一个以URL指定的目录,都会透过当即提交于仓库中建立。
在这两个状况下,全部的中间目录都必须事先存在。 
1五、恢复本地修改
svn revert: 恢复原始未改变的工做副本文件 (恢复大部份的本地修改)。revert:
用法: revert PATH…
注意: 本子命令不会存取网络,而且会解除冲突的情况。可是它不会恢复
被删除的目录 
1六、代码库URL变动
svn switch (sw): 更新工做副本至不一样的URL。
用法: 一、switch URL [PATH]
      二、switch –relocate FROM TO [PATH...] 
  一、更新你的工做副本,映射到一个新的URL,其行为跟“svn update”很像,也会将服务器上文件与本地文件合并。这是将工做副本对应到同一仓库中某个分支或者标记的方法。
  二、改写工做副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变更
(好比方案名或是主机名称变更),可是工做副本仍旧对映到同一仓库的同一目录时使用
这个命令更新工做副本与仓库的对应关系。
1七、解决冲突
svn resolved: 移除工做副本的目录或文件的“冲突”状态。
用法: resolved PATH…
注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的
相关文件,而后让 PATH 能够再次提交。 
1八、输出指定文件或URL的内容。
svn cat 目标[@版本]…若是指定了版本,将从指定的版本开始查找。
svn cat -r PREV filename > filename (PREV 是上一版本,也能够写具体版本号,这样输出结果是能够提交的)

相关文章
相关标签/搜索