`
ytuwlg
  • 浏览: 93778 次
  • 性别: Icon_minigender_1
  • 来自: 威海
社区版块
存档分类
最新评论

SVN使用

    博客分类:
  • SVN
阅读更多

SVN使用:


1. 首先是安装TortoiseSVN这个Win下的客户端(当然用subversion自己的svn这个客户端也可以完成所有操作,理论上)。这个客户端是集成到Explore里的,所以没有什么独立的窗体,所有操作右键菜单来完成。


2. svn使用基本流程:
下面说的命令都与TortoiseSVN菜单上的名称一致。
a. 初次(initial)取出(checkout)repos,建立本地工作拷贝(WC WorkingCopy)。
b. 与repos同步(update),保证将要进行的编辑是最新版本。
c. 编辑源代码(包括创建、修改、删除)。
d. 与repos同步(update),提交之前先要同步到最新的版本,保证所有在自己之前的有关提交已经在本地有所知晓。
e. 解决冲突(resolve conflict)。
f. 提交(commit),一定要写上这次提交的内容的摘要,便于以后查阅。
g. 继续b。
每次开始新的编辑前的同步repos很重要,另外经常地update没有坏处,特别是多人项目中。如果每次提交(commit)前不进行更新(update)的到最新的版本的话,svn会提示当前的拷贝过期,需要更新。
在使用的过程中,时刻注意当前的工作拷贝(WC WorkingCopy)所对应的URL很重要,特别是当有了branches和tag等时候。使用svn info可以查看到这些信息。使用TortoiseSVN时,通过下面的操作查看这些信息:右键单击工作拷贝的根文件夹(不是上级文件夹),菜单中选择则属性(不是TortoiseSVN那个菜单),然后在出现的对话框中选择Subversion标签就可以看到了。


3. 使用branches
(关于branches的内容可以在svn-book:Chapter4 Branching and Merging得到)
当多个人合作(Sally和John)时,可能有这样的情况出现:John突然有个想法,跟原先的设计不太一致,可能是功能的添加或者日志格式的改进等等,总而言之,这个想法可能需要花一段时间来完成,而这个过程中,John的一些操作可能会影响Sally的工作,John从现有的状态单独出一个project的话,又不能及时得到Sally对已有代码做的修正,而且独立出来的话,John的尝试成功时,跟原来的合并也存在困难。这时最好的实践方法是使用branches。John建立一个自己的branch,然后在里面实验,必要的时候从Sally的trunk里取得更新,或者将自己的阶段成果汇集到trunk中。
附:TortoiseSVN帮助里的branch的说明:
One of the features of version control systems is the ability to isolate changes onto a separate line of development. This line is known as a branch. Branches are often used to try out new features without disturbing the main line of development with compiler errors and bugs. As soon as the new feature is stable enough then the development branch is merged back into the main branch (trunk).


3.1 创建branch
(详细的解释参考svn-book:Chapter4 Branching and Merging:Using Branches:Creating a Branch)
实际是svn copy操作
$ svn copy SourceURL/trunk \
       DestinationURL/branchName \
      -m "Creating a private branch of xxxx/trunk."
TorToiseSVN操作更为简单,只要在working copy里右键空白,然后在TorToiseSVN菜单中选择Branches/Tags,就可将整个目录分支(branch)出去,或者点击某个文件将文件单独分支(branch),而且有多种选择,指定是“直接在服务器端copy HEAD版本”、“直接在服务器端copy指定版本”(这两种相当于svn copy中源和目的都是URL)、“用当前的工作拷贝(WC Working Copy)生成”。同时还有一个checkbox用于在完成了这次分支(branch)后直接切换(switch)当前的工作拷贝(WC Working Copy)到分支。
3.2 使用merge来应用branch的修改


3.2.1 trunk的变化及时更新到branch
例子原型出自svn-book:Chapter 4:Branching and Merging:Copying Changes Between Branches:Copying Specific Changes
接着前面的例子,John在实验过程中,Sally对原有的某个文件做了一些改动,如拼写检查等,John知道了,希望将这些改动也放到自己的当前的工作拷贝(WC Working Copy)中。svn中使用merge指令来完成。假设Sally的修订使repos从Rev345到了Rev346,所以John就是要将Rev345:Rev346(前:后)的变更应用到当前的WC。使用TortoiseSVN的操作就是在WC中右键空白处,然后在相关菜单中选择“Merge...”,在弹出的对话框中,From指定比较前项的位置和版本(这里是trunk的Rev345),To指定后项的位置和版本(这里是trunk的Rev346,可以使用一个复选框使的To的位置与From相同)。
相应的svn merge指令参考后面“merge操作实质”可知。


3.2.2 branch最终合并回trunk
例子原型出自svn-book:Chapter 4:Branching and Merging:Common Use-Cases:Merging a Whole Branch to Another
John经过尝试,终于实现了想法,并通过测试,现在他决定将所有的工作合并到trunk去。
这里要注意的是,John打算合并的是自己的工作,假设John的branch(johnBranch)开始于Rev233,John的工作提交到repos是Rev289,那么John的工作是将johnBranch:Rev233到johnBranch:Rev289的内容合并到trunk。而不是johnBranch:Rev233到trunk:HEAD,因为这个变化包含了对John工作的增加和对trunk中其他人的工作的撤销(如果John没有及时将他人在trunk的工作合并到自己的johnBranch的话)。
TortoiseSVN的操作是这样的,先checkout出trunk(也可以switch到trunk),即保证当前的工作拷贝(WC WorkingCopy)是trunk,然后使用菜单中的“Merge...”,选择From为johnBranch:Rev233选择To为johnBranch:Rev289。
相应的svn merge指令参考后面“merge操作实质”可知。


3.2.3 merge操作的实质
svn merge命令的原型如下
svn merge sourceURL1[@N] sourceURL2[@M] [WCPATH]
svn merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]
svn merge -r N:M SOURCE[@REV] [WCPATH]
In the first and second forms, the source paths (URLs in the first form, working copy paths in the second) are specified at revisions N and M. These are the two sources to be compared. The revisions default to HEAD if omitted.
In the third form, SOURCE can be a URL or working copy item, in which case the corresponding URL is used. This URL, at revisions N and M, defines the two sources to be compared.
WCPATH is the working copy path that will receive the changes. If WCPATH is omitted, a default value of “.” is assumed, unless the sources have identical basenames that match a file within “.”: in which case, the differences will be applied to that file.
可以看出merge实际是比较前后(源:目的)两个版本(revision)之间的差别(用运算符就是 目的 – 源),然后将这些差别应用(施用)到工作拷贝(WC WorkingCopy)上的一个操作,根据源与目的版本号的先后,出现了“合并”、“撤销”(源版本号大于目的版本号)等不同效果,然后通过提交(commit)来将这些效果保存到服务器端的repos中。


4. 版本(Revision)关键字
HEAD, BASE, COMMITTED, PREV是指定版本号时可以使用的一些保留字,含义如下:(参考svn-book:Chapter3:Guided Tour:Revisions:Numbers,Keywords)
HEAD:The latest revision in the repository.
BASE:The “pristine” revision of an item in a working copy.
COMMITTED:The last revision in which an item changed before (or at) BASE.
PREV:The revision just before the last revision in which an item changed. (Technically, COMMITTED - 1.)
说明:
a. 只有HEAD能用于URL,BASE,COMMITTED,PREV都是用于工作拷贝(WC Working Copy)的。
b. HEAD虽然含义是“当前最新的版本”,但用于WC时,当前未提交(即未进入版本管理)的变化是不包含在内的。所以比如:
刚commit过main.txt为Rev10,即HEAD=10,COMMITTED=10,这时对main.txt进行一些编辑,然后svn diff -r HEAD:COMMITTED,不会显示刚刚的编辑操作,因为刚刚的编辑操作并没有纳入到版本管理,即HEAD没有反映出“当前最新”,实际是反映的“当前版本管理中的最新”。
c. BASE的含义,上面的英文说得不够清楚,其实是指最后一次更新(update)操作 或者 取出(checkout)操作(当initial checkout)时取出的那些文件,这些被svn无修改地保留在.svn管理目录里。


5. 文件的添加、删除、重命名
当向项目里添加了一个新文件时,需要使用TortoiseSVN菜单中的“add”指令来为下一次commit做添加文件的准备,使得下次commit时知道有这样的事件发生。对应的svn命令行操作就是svn add。
当从项目里删除文件时,也需要显示地将这个事件告诉svn,方法就是右键单击要删除的文件,在TortoiseSVN菜单中选择删除,而不是简单地用os的删除。
文件重命名与删除同理。


6. 忽略列表
比如一个VC的项目用subversion管理,vc会生成debug目录,release目录以及其下的编译临时文件,而我们可能只需要对源文件进行版本管理,那些临时文件都不关心,这时可以把他们加入ignore list。同样使用TortoiseSVN菜单完成这个。对于错误的加入到了ignore list的文件,可以在TortoiseSVN菜单中的Remove from ignore list撤销。这个暂时不知道svn对应的命令。


7. 解决冲突(conflict)
所谓冲突,简单地说,就是两个人改了同一个地方,而修改又不同。比如Sally和John同时Update到了最新的trunk,Rev5。Sally吧main.txt的第一行改为了x=5,提交了,然后repos到了Rev6,同时John在自己的工作拷贝(WC WorkingCopy)中,把main.txt第一行改成了x=6,然后准备同步(update)repos然后提交,可是在update的时候就会提示出现了冲突(conflict)。这时svn目录下出现了几个文件:main.txt.mine, main.txt.r5, main.txt.r6
按照svn-book的解释,含义如下:
filename.mine : This is your file as it existed in your working copy before you updated your working copy—that is, without conflict markers. This file has your latest changes in it and nothing else. (If Subversion considers the file to be unmergeable, then the .mine file isn't created, since it would be identical to the working file.)
filename.rOLDREV : This is the file that was the BASE revision before you updated your working copy. That is, the file that you checked out before you made your latest edits.
filename.rNEWREV : This is the file that your Subversion client just received from the server when you updated your working copy. This file corresponds to the HEAD revision of the repository.
其实就是main.txt.mine是John执行update之前的本地文件main.txt,main.txt.r5是本地上次update时得到的,即BASE版,而main.txt.r6是这次update得到的。这时还有一个main.txt文件其实是包含了相互冲突的内容的用于手工解决冲突的文件。
解决冲突有三个方法:
a. 手工解决。编辑main.txt,保存其成为最终希望的版本。然后使用svn resolved去掉conflict标志。TortoiseSVN的操作这次要复杂一些,在main.txt上右键,菜单中选择“resolved...”,在弹出的对话框中右键main.txt,然后在对话框中选择“resolved”,tortoiseSVN会要求确认一次,选择yes之后会发现生成的三个临时文件没有了,而main.txt的冲突标记变成了修改。
b. 直接选用使用一个临时文件。命令行相当于这样:
$ cp main.txt.mine main.txt
然后同样要用svn resolved去掉conflict标志。这个方法的TortoiseSVN的操作是在“resolved”对话框里,右键main.txt的菜单上选择“Resolved conflict using mine”或者“Resolved conflict using theirs”
c. 撤销更改。这是John决定放弃自己对main.txt的更改并且接受Rev6版时的做法。用这种方法,如果是用svn这个client时,无需调用svn resolved了,因为不打算提交新的内容到repos(当然如果其他的resolve决定提交新的内容时,还要对其他文件resolved的)。TortoiseSVN里的操作是在冲突菜单(resolved对话框里右键单击要解决冲突的文件时出现的菜单)里选择Revert,同样tortoise会让要求确认一次。
当有多个conflict时,需要一个一个resolve,TortoiseSVN的Resolved对话框里每次都是对一个对象进行操作,尽管前面的有复选框(复选框作用未知,猜测是跟lock有

分享到:
评论

相关推荐

    SVN使用教程.docx

    SVN 使用教程 SVN(Subversion)是一种版本控制系统,旨在帮助程序员更好地管理代码,记录每一次文件和目录的修改,允许用户恢复到早期版本或检查数据修改的历史。下面是 SVN 使用教程的详细内容: 一、SVN 服务器...

    SVN使用教程文档

    SVN 使用教程 SVN(Subversion)是一种开源的版本控制系统,允许多个用户协同工作于同一个项目。通过 SVN,可以追踪文件的变化、记录修改记录、解决冲突等。下面是 SVN 使用教程的详细说明。 Checkout(检出) ...

    Windows下SVN使用指南.ppt

    Windows下SVN使用指南.ppt

    SVN使用教程(简单明了,很适合初学者)

    1. 安装 SVN 客户端:教程推荐使用 TortoiseSVN,可以从指定的 FTP 地址下载安装。 2. 读操作: - 项毓毅和管理组可以直接检出"质量管理部"目录。 - 其他员工需要分别检出"部门财富库"和"产品线管理"子目录,因为...

    SVN使用指南(含SVN服务器的安装与使用)

    SVN 使用指南(含 SVN 服务器的安装与使用) SVN(Subversion)是一种版本控制系统,能够帮助开发团队更好地管理代码仓库。下面是 SVN 使用指南,涵盖了 SVN 服务器的安装与使用、SVN 客户端的安装与使用等内容。 ...

    svn使用教程

    svn 使用教程 svn 是一种版本控制系统,主要用于软件开发中的版本控制和项目管理。下面是svn 的使用教程: 一、svn 服务端安装配置 svn 服务端可以通过两种方式安装:官方安装包和图形化服务端。官方安装包需要...

    pb源码管理SVN使用手册

    PB源码管理SVN使用手册主要介绍了一种替代传统Visual SourceSafe(VSS)的源代码管理系统——Subversion(SVN),并提供了使用SVN管理PowerBuilder(PB)源码的详细步骤。以下是相关知识点的详细说明: 1. **Subversion...

    svn使用说明

    ### SVN使用说明与详解 #### 一、SVN概述与重要性 SVN(Subversion)作为一款广泛应用的版本控制系统,对于软件开发团队而言至关重要。它不仅能够有效地管理项目的源代码,还能帮助团队成员追踪每一次代码变更的...

    Windows SVN使用,Tortoise SVN 1.6 使用手册

    Windows下的SVN使用说明: 包括 各阶段中svn的使用方法介绍.doc TortoiseSVN-1.6.2-zh_CN.pdf(手册,中文) TortoiseSVN_en.chm(手册,英文) 用TortoiseSVN V1.6.2管理你的个人代码.pdf

    svn使用说明文档和安装文档

    "SVN使用手册.doc"和"SVN使用说明.doc"这两个文档详细介绍了Subversion的安装步骤、配置方法以及各种操作的使用技巧。它们是初学者学习和进阶者查阅的重要参考资料,涵盖了从基础操作到高级特性的全方位指导。通过...

    myEclipse8.5集成svn android svn使用

    《myEclipse8.5集成SVN与Android SVN使用详解》 在软件开发过程中,版本控制工具的重要性不言而喻,它能够帮助开发者追踪代码的变更历史,协同多人合作,并确保代码的一致性和稳定性。本文将详细介绍如何在...

    SVN使用手册中文版快速入门

    下注:使用svn revert 提交你得修改 检验历史 svn log svn diff 比较本地修改 比较工作拷贝和版本库 比较版本库与版本库 svn cat svn list 关于历史的最后一个词 其他有用的命令 svn cleanup svn import 摘要 4. ...

    SVN使用教程[参照].pdf

    SVN使用教程[参照].pdf

    SVN使用SVN使用SVN使用

    在开发过程中,SVN使用的重要性不言而喻,它提高了工作效率,确保了代码的一致性和可追溯性。 首先,安装SVN客户端是使用SVN的第一步。常见的客户端有TortoiseSVN(Windows平台)、SmartSVN(跨平台)等,它们提供...

    SVN使用方法易学材料

    ### SVN使用方法详解 #### 一、SVN简介 Subversion (SVN) 是一种广泛使用的版本控制系统,用于管理软件开发过程中的代码变更历史。它能够帮助开发者追踪每一项改动,并支持团队协作开发。SVN的主要特点包括强大的...

    svn使用简要指南

    《SVN使用简要指南》 1. 前言 1.1. 目的 本指南旨在为项目团队提供一个清晰易懂的 SVN 使用教程,帮助成员们有效地管理和协同处理项目文档,掌握基本的版本控制操作。 1.2. Subversion 的介绍 Subversion(简称 ...

    SVN使用教程总结.doc

    SVN 使用教程总结 本文档旨在提供一个详细的 SVN 使用教程,从 SVN 的基本概念到服务器搭建、客户端安装、版本库管理、用户和组管理等方面进行了详细的讲解。 一、SVN 简介 SVN(Subversion)是一种免费/开源的...

    svn使用入门,可以方便的告诉整个svn的架构

    3. 通信协议:SVN使用Apache的SVNDAV协议,通过HTTP/HTTPS协议进行通信,确保数据安全。 三、SVN入门步骤 1. 安装:在本地安装SVN客户端,如TortoiseSVN,并设置服务器上的SVN服务。 2. 创建仓库:在服务器上创建一...

    SVN使用手册大全

    SVN 使用手册大全 SVN(Subversion)是一款开源的版本控制系统,广泛应用于软件开发、文档管理和项目协作等领域。本手册将详细介绍 SVN 的使用方法和技巧,帮助读者快速掌握 SVN 的使用。 修改 SVN 访问密码 在...

Global site tag (gtag.js) - Google Analytics