`

SVN 命令

 
阅读更多

SVN中的修订版本号

当新建一个版本库时,它的修订版本号为0,每当执行一次提交命令时,它的修订版本号就增加1,SVN也用一些关键字表示某一些版本:

HEAD:版本库中最新的版本

BASE:工作拷贝中一个条目的修订版本号,如果该版本在本地修改了,则“BASE版本”就是这个条目在本地未修改的版本。

COMMITTED:在BASE版本之前(或者BASE)一个项目最后修改的版本。

PREV:一个项目最后修改版本之前的那个版本。

SVN命令

SVN的命令格式为 svn command [options]


其中command是svn要执行的命令,签出,提交,更新等。主要的命令及命令格式如下:

import

svn import d:\OA http://192.168.30.57:6060/svn/oa/ -m " "


checkout

checkout可以简写为co。它是从版本库中将文件(夹)签出到工作目录中。命令格式如下:

svn co URL[@REV] [path]

URL是版本库的地址,REV是要签出的版本号。path指定工作目录,如果不指定则是当前目录。
commit

将本地修改(包括文件内容修改,添加删除文件,文件夹等)提交到SVN版本库中。其命令格式主要如下:

svn commit -m”message” [path]

-m是必须的,它后面接着的是日志的内容message,message可以为空。但是强烈建议大家添加日志内容,描述本次提交的目的和修改的范围。path指定要提交的目录,以递归的方式提交该目录下的子目录和文件。如果不指定path,则默认是当前目录。

注意:在commit之前,一定要使用一次update命令(下面介绍),并且再测试,无检测出bug之后才提交,避免版本库中的代码充满bug。(为什么要执行update以及执行它之后可能出现的情况请看本文档结尾)
update

将版本库的最新版本下载到本地。命令格式如下:

svn update [path]

选项path的作用和commit中path的作用一样。

update时候,在执行结果中会列出结果,其结果如下所示

[status] [filename]

status包括A(添加文件),D(删除文件),R(替换文件),U(更新文件),C(版本库与本地文件冲突,无法合并),G(版本库中的文件与本地文件合并),filename是发生发生了上述改变的文件的文件名。发生冲突的解决方法请看本文档结尾)
status

显示本地文件的状态。其命令格式如下:

svn status [path]

选项path和commit中的选项path一样。

status执行的结果由若干列组成,列与列有空格分开,状态很多,在这里不详细说,其中第一列的状态包括A,D,R,U,C,M,请参考update命令,还有"?",表示该文件没有被版本化,请使用add命令将其加进版本库中,"!"表示文件丢失,比如不使用SVN命令delete而删除了文件。其它状态不在这里描述。
add

添加文件(夹)到版本库中,它是做一个标志,在commit才会真正添加进去。它的命令格式如下:

svn add path

path是指定要添加的文件或者目录
delete

删除文件(夹)。同add命令的一样,它也是先做一个标志,在commit时才改变版本库。命令格式如下:

svn delete path

path选项同add
diff

diff命令用于比较文件的差别。其主要的命令格式如下

svn diff [filename]

filename是要比较的文件路径,如果它是一个目录的话,则会比较该目录下面所有的文件。不指定path则默认为当前目录。diff也可以指定要比较的文件的版本号,在这里不详细描述。这个简单的命令格式比较的是文件的当前状态和它被签出或被更新时候的状态,它并不自动比较当前文件和版本库中最新版本的文件的差别,它显示的是该文件被更新后被修改的情况。
revert

将文件恢复到它被签出或上一次被更新的状态。执行这个命令,可以恢复对指定文件的修改,不能恢复对文件夹的删除操作。命令格式如下:

svn revert filename

filename同diff中的filename。它不能省略。
resolved

删除文件冲突的标志。在执行update的时候,有可能文件被标志为冲突(C),使用这个命令可以去除这个标志,但是它并不能解决冲突。解决冲突的问题由开发人员协商解决。其命令格式如下:

svn resolved filename

filename指定文件名


commit前执行update的原因

当从版本库签出源代码到工作目录后,所有的编辑,修改都是改变工作目录中的内容,而不是实时的反映到版本库中,知道commit才会修改版本库。在多人协同开发的环境下,往往在自己进行修改源代码的时候,别人已经commit了导致版本库内容改变,这个时候,工作目录中的文件都已经“过时”了,如果将这些“过时”的代码提交到版本库中,会产生意想不到的结果。举例说,版本库中有文件a.h,a.c,并且宏MAX在a.h中定义,在a.c中用到。开发人员Peter和Amy。如果Peter修改了a.h,删除了宏MAX,再提交到版本库中,而此时,Amy仍然修改着a.c,当他修改完并且直接提交后,版本库中的文件情况如下a.h(由Peter修改),a.c(由Amy修改),这时的代码,a.c所使用的MAX在a.h中无定义了。一个BUG被无意中引入!因此在执行commit前一定要执行一遍update,否则版本库会变得很混乱。

冲突的产生

多人协同开发的情况下,多个人同时修改同一个文件的情况是很常见的。他们从版本库中签出同样一份源代码。如果他们修改了同样一个文件的话,SVN会尝试将这些修改合并,如果合并成功,则标志为合并(G,请参考update命令),如果SVN无法将这些修改合并,就会设置冲突标志(C,请参考update命令)。主要体现在不同的人对同一份文件的同一个地方做出了不同的修改(比如修改第10行的文字),SVN不能也不应该决定应该选择哪份修改而丢弃另一分修改,因此,它标志文件为冲突,由开发人员进行协商解决。

解决冲突的方法

冲突发生时,SVN会放置三个未版本化的文件到工作目录中:

filename.mine: 文更新前的被修改的文件

filename.rOLDREV: 更新前文件的BASE版本

filename.rNEWREV: 文件在版本库中的最新版本

发生冲突时,需要开发人员之间协商来决定使用哪一部份的代码。再执行resolved命令将冲突标志去除,resolved命令也将上述新建的文件删除。

在发生冲突的文件中,SVN会添加额外的标志标识冲突的地方,比如filename发生冲突,那么filename变成如下形式:

Lettuce

Tomato

<<<<<<< .mine

Salami

Mortadella

======

Sauerkraut

Prosciutto

>>>>>> .r2

Creole Mustard

Bottom piece of


其中的小于号,等于号,大于号是SVN添加的冲突标记。它表示:

小于号和等于号之间是你当前工作目录中所修改文件的内容,等于号和大于号之间的部分是版本库中文件的内容,其它部分是它们之间相同的部分。

分享到:
评论

相关推荐

    svn在linux下的使用(svn命令)

    svn 在 Linux 下的使用(svn 命令) svn 是一个版本控制系统,允许多人合作开发项目,追踪文件的变化历史记录,避免文件冲突和丢失。下面介绍 svn 在 Linux 下的使用和常用命令。 1. 将文件 checkout 到本地目录 ...

    svn命令大全.docx

    "svn命令大全" SVN(Subversion)是一种版本控制系统,主要用于管理软件开发过程中的代码修改和更新。下面是 Linux 下 SVN 命令大全介绍: 一、checkout 命令 checkout 命令用于将文件从服务器 checkout 到本地...

    svn命令操作手册大全

    **SVN 命令操作手册大全** **一、Svnadmin 概述** Svnadmin 是 Subversion(简称 SVN)中的一个管理工具,用于创建、维护和操作 SVN 仓库。它提供了对仓库的底层控制,允许管理员执行如创建、备份、恢复等高级操作...

    linux下svn命令大全.txt

    下面将详细解析从给定文件中提取的关键SVN命令及其功能,这将帮助你在Linux系统中更有效地管理和操作SVN仓库。 ### 1. 检出 (Checkout) `svn checkout path path` 命令用于从SVN仓库检出项目到本地目录。例如,`...

    ubuntu SVN命令大全

    ### Ubuntu SVN 命令大全解析 #### 一、Checkout (检出) **命令格式**: ``` svn checkout [URL] [本地路径] ``` **示例**: ``` svn checkout svn://192.168.1.1/pro/domain ``` **功能说明**: - `svn ...

    linux下的 svn命令

    通过svn命令,用户可以实现对代码库的多种操作,包括检出、添加、提交、更新、查看状态、删除、查看日志、比较差异、合并版本等。以下是对这些常见svn命令的详细解释: 1. **检出(Checkout)**: `svn checkout` 或 `...

    linux下SVN命令全解

    本文将详细解析Linux环境下常用的SVN命令及其用法。 1. **Checkout**: `svn checkout` 或 `svn co` 命令用于从远程仓库克隆项目到本地工作目录。例如: ``` svn checkout svn://192.168.1.1/pro/domain ``` 2...

    svn命令再封装

    ### SVN命令再封装详解 #### 一、引言 在软件开发过程中,版本控制系统是必不可少的工具之一。Subversion(SVN)作为一款经典的集中式版本控制系统,在许多项目中仍被广泛使用。然而,对于一些复杂的操作场景,...

    linix fedora svn命令大全

    以下是对标题和描述中涉及的svn命令的详细解释: 1. **Checkout(检出)** `svn checkout` 或 `svn co` 用于从远程仓库下载项目到本地工作目录,例如: ``` svn checkout svn://192.168.1.1/pro/domain ``` 2....

    SVN命令及外部定义用法

    ### SVN命令详解 1. **`svn checkout (简称 svn co)`**:用于从服务器上检出一份工作副本到本地。 2. **`svn update (简称 svn up)`**:更新本地工作副本,获取服务器上的最新更改。 3. **`svn commit (简称 svn ci...

    Linux下SVN命令使用大全

    ### Linux下SVN命令使用大全 #### 一、概述 Subversion (SVN) 是一款开源版本控制系统,广泛应用于软件开发和其他需要版本控制管理的领域。在Linux环境下使用SVN,能够有效地帮助开发者管理和协作代码。本文档将...

    SVN打基线常用命令使用介绍

    在了解了打基线的基本概念之后,接下来详细介绍一些常用的SVN命令,这些命令可以帮助我们在SVN中有效地进行打基线操作。 ##### 1. 创建标签(tag) 创建标签是一种非常简单的方式,可以用来记录项目的一个快照。...

    linux下的svn命令操作大全借鉴.pdf

    Linux 下的 SVN 命令操作大全借鉴 本文档对 Linux 下的 SVN 命令操作进行了详细的介绍,从基本的 checkout 到 commits、更新、锁定、解锁、状态查看、删除、日志查看、信息查看、差异比较、合并等多个方面对 SVN ...

    svn命令大全[PDF格式]

    ### SVN命令大全解析 #### 一、概述 Subversion(简称SVN)是一种开源的版本控制系统,用于管理软件项目的源代码。它可以帮助开发者们更好地跟踪和管理代码的变化历史,支持团队协作开发。本文将详细介绍SVN中的...

    linux下svn命令大全.pdf

    Linux 下 SVN 命令大全 Linux 下 SVN 命令大全是 Subversion 版本控制系统的命令行接口,提供了许多功能强大且灵活的命令来管理项目代码的版本控制。下面是 Linux 下 SVN 命令大全的详细介绍。 配置 SVN 在 Linux...

Global site tag (gtag.js) - Google Analytics