SVN简易使用手册

SVN是一种类似于CVS的版本控制软件,它的操作方法也与CVS类似,但是它弥补了CVS的很多不足和做了很大的改善和提高。在这个手册中,主要描述的是它的客户端的使用方法,至于服务器的配置,在另一篇手册中说明。


SVN中的修订版本号

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

HEAD:版本库中最新的版本

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

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

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


SVN命令

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

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

checkout

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

svn co URL[@REV] [path]

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

commit

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

svn commit -m”message” [path]

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

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

update

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

svn update [path]

选项path的作用和commitpath的作用一样。

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

[status] [filename]

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

status

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

svn status [path]

选项pathcommit中的选项path一样。

status执行的结果由若干列组成,列与列有空格分开,状态很多,在这里不详细说,其中第一列的状态包括ADRUCM,请参考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

filenamediff中的filename。它不能省略。

resolved

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

svn resolved filename

filename指定文件名



commit前执行update的原因

当从版本库签出源代码到工作目录后,所有的编辑,修改都是改变工作目录中的内容,而不是实时的反映到版本库中,知道commit才会修改版本库。在多人协同开发的环境下,往往在自己进行修改源代码的时候,别人已经commit了导致版本库内容改变,这个时候,工作目录中的文件都已经“过时”了,如果将这些“过时”的代码提交到版本库中,会产生意想不到的结果。举例说,版本库中有文件a.ha.c,并且宏MAXa.h中定义,在a.c中用到。开发人员PeterAmy。如果Peter修改了a.h,删除了宏MAX,再提交到版本库中,而此时,Amy仍然修改着a.c,当他修改完并且直接提交后,版本库中的文件情况如下a.h(Peter修改)a.c(Amy修改),这时的代码,a.c所使用的MAXa.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添加的冲突标记。它表示:

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



参考文献

[1] Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, 使用Subversion进行版本控制—针对subversion 1.2

[2] svn --help

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 译者序 前言 序言 读者 怎样阅读本书 本书约定 排版习惯 图标 本书组织结构 Subversion 1.1的新特性 这本书是免费的 致谢 来自Ben Collins-Sussman 来自Brian W. Fitzpatrick 来自C. Michael Pilato 1. 介绍 Subversion是什么? Subversion的历史 Subversion的特性 Subversion的架构 安装Subversion Subversion的组件 快速入门 2. 基本概念 版本库 版本模型 文件共享的问题 锁定-修改-解锁 方案 拷贝-修改-合并 方案 Subversion实战 工作拷贝 修订版本 工作拷贝怎样追踪版本库 修订版本混合的限制 摘要 3. 指导教程 帮助! 导入 修订版本: 号码、关键字和日期,噢,我的! 修订版本号 修订版本关键字 修订版本日期 初始化的Checkout 基本的工作周期 更新你的工作拷贝 修改你的工作拷贝 检查你的修改 svn status svn diff svn revert 解决冲突(合并别人的修改) 手工合并冲突 拷贝覆盖你的工作文件 下注:使用svn revert 提交你得修改 检验历史 svn log svn diff 比较本地修改 比较工作拷贝和版本库 比较版本库与版本库 svn cat svn list 关于历史的最后一个词 其他有用的命令 svn cleanup svn import 摘要 4. 分支与合并 什么是分支? 使用分支 创建分支 在分支上工作 分支背后的关键概念 在分支间拷贝修改 拷贝特定的修改 合并背后的关键概念 合并的最佳实践 手工追踪合并 预览合并 合并冲突 关注还是忽视祖先 常见用例 合并一条分支到另一支 取消修改 找回删除的项目 常用分支模式 发布分支 特性分支 转换工作拷贝 标签 建立最简单的标签 建立复杂的标签 分支维护 版本库布局 数据的生命周期 摘要 5. 版本库管理 版本库基本知识 理解事务和修订版本 未受版本控制的属性 版本库数据存储 Berkeley DB FSFS 版本库的创建和配置 钩子脚本 Berkeley DB配置 版本库维护 管理员的工具箱 svnlook svnadmin svndumpfilter svnshell.py Berkeley DB工具 版本库清理 管理磁盘空间 版本库的恢复 版本库的移植 版本库备份 添加项目 选择一种版本库布局 创建布局,导入初始数据 摘要 6. 配置服务器 概述 网络模型 请求和响应 客户端凭证缓存 svnserve,一个自定义的服务器 调用服务器 内置的认证和授权 创建一个用户文件和域 设置访问控制 SSH认证和授权 SSH配置技巧 初始设置 控制调用的命令 httpd,Apache的HTTP服务器 必备条件 基本的Apache配置 认证选项 基本HTTP认证 SSL证书管理 授权选项 整体访问控制 每目录访问控制 关闭路径为基础的检查 额外的糖果 版本库浏览 其它特性 支持多种版本库访问方法 7. 高级主题 运行配置区 配置区布局 配置和Windows注册表 配置选项 服务器 config 属性 为什么需要属性? 处理属性 特别属性 svn:executable svn:mime-type svn:ignore svn:keywords svn:eol-style svn:externals svn:special 自动属性设置 Peg和实施修订版本 外部定义 卖主分支 常规的卖主分支管理过程 svn_load_dirs.pl 本地化 理解地区 Subversion对地区的支持 Subversion版本库URL 8. 开发者信息 分层的库设计 版本库层 版本库访问层 RA-DAV(使用HTTP/DAV版本库访问) RA-SVN(自定义协议版本库访问) RA-Local(直接版本库访问) 你的RA库在这里 客户端层 使用API Apache可移植运行库 URL和路径需求 使用C和C++以外的语言 进入工作拷贝的管理区 条目文件 原始拷贝和属性文件 WebDAV 使用内存池编程 为Subversion做贡献 加入社区 取得源代码 开始熟悉社区政策 作出修改并测试 贡献你的修改 9. Subversion完全参考 Subversion命令行客户端:svn svn选项 svn子命令 svn add svn blame svn cat svn checkout svn cleanup svn commit svn copy svn delete svn diff svn export svn help svn import svn info svn list svn log svn merge svn mkdir svn move svn propdel svn propedit svn propget svn proplist svn propset svn resolved svn revert svn status svn switch svn update svnadmin svnadmin Switches svnadmin Subcommands svnadmin create svnadmin deltify svnadmin dump svnadmin help svnadmin hotcopy svnadmin list-dblogs svnadmin list-unused-dblogs svnadmin load svnadmin lstxns svnadmin recover svnadmin rmtxns svnadmin setlog svnadmin verify svnlook svnlook选项 svnlook svnlook author svnlook cat svnlook changed svnlook date svnlook diff svnlook dirs-changed svnlook help svnlook history svnlook info svnlook log svnlook propget svnlook proplist svnlook tree svnlook uuid svnlook youngest svnserve svnserve选项 svnversion svnversion mod_dav_svn mod_dav_svn Configuration Directives A. Subversion对于CVS用户 修订版本号现在不同了 目录的版本 更多离线操作 区分状态和更新 分支和标签 元数据属性 冲突解决 二进制文件和转化 版本化的模块 认证 转化CVS版本库到Subversion B. 故障解决 共同问题 使用Subversion的问题 每当我尝试访问版本库,我的Subversion客户端挂起。 每当我尝试运行svn,它告诉我工作拷贝已经锁定。 我在查找和打开版本库时得到错误,而我知道我的版本库URL是正确的。 我怎样在file://的URL中指定一个Windows驱动器盘符? 通过网络对Subversion版本库进行写操作发生问题。 在Windows XP下,Subversion服务器有时候看起来发送损坏的数据。 跟踪Subversion客户端和Apache服务器通话最好的方法是什么? 我刚刚编译了二进制分发版本,当我尝试检出Subversion,我得到一个“Unrecognized URL scheme”错误。 为什么svn revert命令要有一个明确的目标?为什么缺省不是递归的?它的行为方式与大多数其它子命令不同。 当我启动Apache,mod_dav_svn抱怨说发现一个“bad database version”,它发现了db-3.X而不是db-4.X。 我在RedHat 9得到“Function not implemented”错误,无法工作,我如何修正这个问题? 为什么日志说通过Apache(ra_dav)提交或导入的文件“(no author)”? 我偶然在Windows得到“Access Denied”错误,它们看起来随即出现。 在FreeBSD,某些操作(特别是svnadmin create)有时会挂起。 我可以在web浏览器看到我的版本库,但是svn checkout给我一个301 Moved Permanently错误。 我尝试察看我的文件的一个老版本,但是svn告诉我“path not found”。 C. WebDAV和自动版本化 WebDAV基本概念 仅是平常的WebDAV DeltaV扩展 Subversion和DeltaV 影射Subversion到DeltaV 自动版本化支持 选择mod_dav_lock 自动版本化交互性 Win32网络文件夹 Mac OS X Unix: Nautilus 2 Linux davfs2 D. 第三方工具 客户端和插件 语言绑定 版本库转化 高级工具 版本库浏览工具 E. 版权 术语表 插图清单 1.1. Subversion的架构 2.1. 一个典型的客户/服务器系统 2.2. 需要避免的问题 2.3. 锁定-修改-解锁 方案 2.4. 拷贝-修改-合并 方案 2.5. 拷贝-修改-合并 方案(续) 2.6. 版本库的文件系统 2.7. 版本库 4.1. 分支开发 4.2. 开始规划版本库 4.3. 拷贝后的版本库 4.4. 一个文件的分支历史 8.1. 二维的文件目录 8.2. 版本时间—第三维! 表格清单 2.1. 版本库访问URL 5.1. 版本库数据存储对照表 6.1. 网络服务器比较 8.1. Subversion库的摘要目录 范例清单 5.1. 使用svnshell浏览版本库 5.2. txn-info.sh(异常事务报告) 6.1. 匿名访问的配置实例。 6.2. 一个认证访问的配置实例。 6.3. 一个混合认证/匿名访问的配置实例。 6.4. 关闭所有的路经检查 7.1. 注册表条目(.reg)样本文件。 8.1. 使用版本库层 8.2. 使用Python处理版本库层 8.3. 一段检出工作拷贝的简单脚本 8.4. 典型的.svn/entries文件内容 8.5. 有效地池使用
嗨!欢迎来到 C知道!我可以帮助你了解一些 SVN 的基础知识。SVN 是一个版本控制系统,用于管理和跟踪文件的变更历史。以下是一个简易SVN 使用教程入门: 1. 安装 SVN:首先,你需要安装 SVN 客户端。你可以从 Subversion 官方网站或适用于你的操作系统的软件源中下载和安装。 2. 创建仓库:使用 `svnadmin` 命令创建一个新的 SVN 仓库。例如,通过运行 `svnadmin create /path/to/repository` 来创建一个名为 repository 的仓库。 3. 检出代码:使用 `svn checkout` 命令将仓库中的代码检出到本地机器上。例如,通过运行 `svn checkout file:///path/to/repository /path/to/working-copy` 将代码检出到本地工作副本。 4. 添加文件:将你的项目文件复制到工作副本中,然后使用 `svn add` 命令将其添加到 SVN 仓库中。例如,通过运行 `svn add /path/to/working-copy/file.txt` 将 file.txt 文件添加到仓库中。 5. 提交变更:使用 `svn commit` 命令将你的变更提交到 SVN 仓库。例如,通过运行 `svn commit -m "Add file.txt"` 提交对 file.txt 的变更。 6. 更新代码:使用 `svn update` 命令将仓库中的最新代码更新到你的工作副本中。例如,通过运行 `svn update /path/to/working-copy` 更新工作副本。 7. 查看历史记录:使用 `svn log` 命令查看仓库中的提交历史记录。例如,通过运行 `svn log /path/to/working-copy/file.txt` 查看 file.txt 的提交历史。 8. 分支和合并:使用 `svn branch` 和 `svn merge` 命令创建和合并分支。这些命令可以帮助你在团队协作和并行开发中管理代码。 这只是一个简单SVN 使用教程入门,SVN 还有很多其他功能和命令可以探索。希望对你有所帮助!如果你有任何其他问题,随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值