(2011-06-01 16:00:46)转载标签: it 分类: IT学习历程
1. 引言
· 团队开发?
· 修改文件而他人也在改?你修改的内容丢失?
· 保存了文件可又后悔了?想得到几天前的版本?
· 发现了bug,想知道bug何时引入的?
这些问题都遇到了?那就使用TortoiseSVN吧。TortoiseSVN是Subversion的客户端。Subversion是针对CVS的不足而开发的版本控制系统。
2. 基本概念
档案库Repository
Subversion是版本管理的后台系统,其核心是保存数据的档案库-repository。 档案库用分层的“文件-目录”文件系统数来存储数据。连接到档案库的客户能读写数据。档案库记录了你的每一次修改!客户端可以从档案库中取到过去的版本。
图2.1. 典型服务器/客户机模型
版本模型Versioning Models
基本问题:共享数据而不相互覆盖?
文件共享的问题The Problem of File-Sharing
在合作开发中文件共享的问题是显而易见的。
图 2.2. 要避免的问题
锁定-修改-解锁The Lock-Modify-Unlock Solution
Visual SourceSafe采用的就是这种模型。
Figure 2.3. 锁定-修改-解锁方案
问题:
· 锁定可能引起管理问题: 如忘记解锁别人无法使用。
· 锁定造成不必要的串行作业。
· 锁定可引起安全问题。
拷贝-修改-合并The Copy-Modify-Merge Solution
Subversion和CVS等采用拷贝-修改-合并模型。项目成员从档案库读取个人的工作拷贝,所有项目成员并行地在工作拷贝上工作,然后合并在一起形成新的版本(version)。
图 2.4. 拷贝-修改-合并方案
Figure 2.5. ...Copy-Modify-Merge Continued
如果修改不重叠,TortoiseSVN可自动合并。修改重叠则引起冲突(conflict)。冲突只能靠手工修改!
这种模型好像很混乱,但实际上很好用。解决冲突的时间大大小于因锁定而等待的时间。解决冲突的最好办法是沟通。
实际操作Subversion
工作拷贝Working Copies
Subversion的工作拷贝就是包含文件的本地目录树,与一般目录的树状结构相同,可以进行任意的工作!工作结束后可将新的文件“发布”到档案库。
工作拷贝中包含了由Subversion创建和维护的一个特殊的子目录.svn ,该目录保存了重要的信息。不要删除这个目录!
例如,假定你的档案库包含两软件项目:paint和calc。
图 2.6. 档案库文件系统
用取出(checkout)得到工作拷贝。
Repository URLs:档案库URL
Subversion的档案库借助不同方法得到:本地磁盘、网络协议等:
Table 2.1. Repository Access URLs
Schema
Access Method
file:///
本地磁盘.
http://
透过Apache.
例:
File:///c:/svn/prj/template ,
File:///c:/svn/prj/template/Dist
c:/svn/prj/template是档案库的目录,Dist是档案库的子目录名称
http://build:88/prj/template
http://build:88/prj/template/Dist
http://build:88是Apache设置的URL,prj是通过Apache设置的位置,template是档案库名称,Dist是目录名
版本Revisions
svn commit 操作送交修改。档案库接受一次送交后,在文件系统树创建新的状态,称之为版本revision。每个版本是一个递增的自然数。
图 2.7. 档案库
全局版本号
版本号代表整个档案库而非单个文件!
工作拷贝如何跟踪档案库?
Subversion将下列两种管理信息记录在.svn/:
· 工作版本 working revision
· 从档案库更新的时间。
通过这些信息,在与档案库交换信息后,Subversion可得出文件的四种状态:
l 未修改,新版本,送交无效
l 本地修改,新版本,可送交,更新无效
l 未修改,但在档案库中已修改,过期,送交无效,可更新
l 本地修改,在档案库中已修改,过期。先更新,修改冲突,再送交。
3. 服务器设置
基于Apache的服务器
这是设置Subversion服务器的最好方法。优点:
l 利用WebDAV
l 用浏览器浏览档案库
l 认证
l 安全
本地档案库
用TortoiseSVN创建档案库
图 3.1. 没有版本控制的文件夹TortoiseSVN菜单
1. 进入资源管理器
2. 创建档案库的子目录,如C:/SVNRepository。
3. 在新建的目录中右键 TortoiseSVN->在此建立档案库Create Repository here....
可用FSFS和BDB两种格式创建。
注意:不要编辑档案库中的文件!
本地进入方式:file:///C:/SVNRepository/
档案库备份
最简单的办法是备份档案库文件夹!
推荐办法:
svnadmin hotcopy path/to/repository path/to/backup --clean-logs
4. 日常应用指南
操作TortoiseSVN
图 4.1. TortoiseSVN右键菜单
所有TortoiseSVN命令均可以在资源浏览器的右键菜单中执行。
认证
如果档案库设置了权限保护,则会弹出认证对话框。
图 4.2. 认证对话框
如果使用Windows域认证,用户名前需要包括域名,如MYDOMAIN/johnd.
数据汇入档案库Importing Data Into A Repository
档案库结构Repository Layout
根据不同需要来建立档案库的结构:
1. 创建新的空文件夹。
2. 创建目录结构 – 先不放文件!
3. 右键菜单,点击汇入…(Import...)将结构加入到档案库中。
注意:文件夹的名字不汇入档案库。
通过档案库浏览器(Repo Browser)可直接浏览档案库结构。
汇入Import
在将项目文件汇入到档案库前,先进行下列操作:
1. 删除与项目无关的中间文件如生成的临时文件*.obj等。 如果设置了忽略的文件类型,或忽略的目录,可不删除。
2. 在文件夹中组织文件。
在资源浏览器中进入项目顶层文件夹,右键得到快捷菜单,选择汇入… (Import...) ,出现对话框:
图 4.3. 汇入对话框
在对话框中输入仓库的URL。
汇入信息(import message)作为记录信息。
注意
只要点击确定OK TortoiseSVN将把整个目录及目录内的文件加入到档案库中。顶层文件夹的名字不会加入到档案库中,但其他子文件夹的名字均加入以保持档案库的结构。该项目的文件现在处在档案库版本控制中。请注意:目前的本地项目文件夹不处在版本控制下!要得到版本控制,必须取出checkout档案库得到工作拷贝!
特殊文件Special Files
有时你有一个包含用户特定数据的文件需要在版本控制下,这意味着每个开发人员需要修改它以适应他的本地设置,用户每次送交均要保存这文件的变化,因此对这类文件进行版本控制很困难。
对此建议使用template 文件,创建一共文件,它包含所有开发人员需要信息,将它加入到版本控制下,每个开发人员均可取出这个文件, 复制并重新命名,然后修改就没有问题了。不需要加入版本控制的文件可通过设置Subversion 特性(property) svn:ignored 来忽略。
取出工作拷贝Checking Out A Working Copy
从档案库执行取出(checkout)就能得到工作拷贝。
在资源浏览器中选定将要存放工作目录的拷贝,右键弹出快捷菜单,选择C出…Checkout...,将出现对话框:(如果该目录已在版本控制下,则没有取出而是更新(Update)和送交(Commit))
图 4.4. 取出对话框
如果文件夹不存在,会自动创建。
注意
你只能将文件取出到一个空目录里。如果你想取出刚汇入的文件,Subversion将报错。你只能将文件取出到另一个目录或先删除已经存在的源文件再执行取出。
汇出Exporting
如果不想包含.svn ,可将档案库汇出到一个空目录。这时所有文件不处在版本控制下。方法:右键,选择TortoiseSVN-〉 汇出…(Export...)。
状态信息Getting Status Information
通过图标可知道文件的状态:修改/新增/删除/换名。
图标
图 4.5. 资源浏览器显示的图标
新近取出的工作拷贝。Subversion状态是正常normal.
文件已修改,需要送交到档案库。Subversion状态是已修改modified。
在更新文件后自己的修改与他人的修改冲突。状态是冲突conflict。
将加入到版本控制的文件或文件夹。状态是新增added 。
文件(夹)将从版本控制中删除,版本控制将忽略这些文件(夹)。状态是删除deleted。
档案库状态 Status Of The Repository
图 4.6. 检查更新
想知道别人修改了哪些文件?用检查更新..(Check For Updates...) 命令。弹出的对话框将显示出你的修改或档案库中别人的修改,这样可在更新前检查是否有冲突。
送交Commit.... 命令也可用来显示本地的修改,如果不想实际送交到档案库,点击取消Cancel 即可。
将别人的改动更新到你的工作拷贝
图 4.7. 已完成更新的进度对话框
有时你想将他人的改动合并到你本地的工作拷贝。从服务器上取改动到本地的过程叫更新updating。 更新也许是单个文件、或选择的一组文件、或整个目录。在资源浏览器中选择待更新的文件或目录, 右键并选择更新Update ,他人的修改将合并到你本地的文件中,你所做的改动保存在同一文件中。这时档案库没有受变化,即合并只在本地进行。
如果你和他人改动的是相同部分但改动不一样,就会在更新过程中产生冲突 conflicts。冲突在对话框中用红色表示,双击后用外部编辑器解决冲突。
TortoiseSVN也允许你将工作拷贝更新到指定版本。用更新至版本Update to Revision... 命令,在弹出的对话框中输入指定的版本号即可。
注意
如果你更新到指定版本,再送交是将出现out of date 错误!如果你想撤销修改并从以前的版本开始工作,你必须使用从“显示记录”对话框中选择复原自此版本以来的变更Revert changes from this revision 命令或使用快捷菜单中的合并Merge... 菜单命令。
更新至版本Update to Revision... 命令允许复原至低版本。比如你的工作目录版本是100,你想复原至版本50-直接填写在复原对话框中填写复原至版本50。通常,不复原单个文件,确实需要,从记录对话框(Log)选择储存版本至Save revision to... 命令。
解决冲突Resolving Conflicts
有时你从档案库更新文件会有冲突。冲突产生于两人都修改文件的某一部分。解决冲突只能靠人而不是机器。当产生冲突时,你应该打开冲突的文件,查找以<<<<<<<开始的行。冲突部分被标记:
<<<<<<< filename
your changes
=======
code merged from repository
>>>>>>> revision
Subversion为每个冲突文件产生三个附加文件:
filename.ext.mine
更新前的本地文件。
filename.ext.rOLDREV
你作改动的基础版本。
filename.ext.rNEWREV
更新时从档案库得到的最新版本。
使用外部合并工具或使用快捷菜单的编辑冲突Edit Conflict 命令来解决冲突。然后从快捷菜单中执行已解决Resolved 命令,将改动送交到档案库。请注意,解决命令并不解决冲突,而仅仅是删除filename.ext.mine and filename.ext.r* 文件并允许你送交。
改动送到档案库Sending Your Changes To The Repository
这个过程叫送交committing 。 在送交前需要确认工作拷贝是最新的。用更新Updates 或先用检查更新Check For Updates 检查变更了的文件。如果你的工作拷贝已更新且没有冲突,可用快捷菜单中的送交Commit... 完成送交过程。
图 4.8. 送交对话框
如果某文件不想在版本控制下,取消复选框即可。
送交框中不需要控制的文件
许多不需要版本控制文件如obj文件等也出现在送交对话框中,解决办法:
· 在服务器端编辑配置文件config,将不需要控制的文件 (或通配符)添加到排除文件列表。其影响是全局的。
· 通过快捷菜单命令Add to ignore list将文件添加到svn:ignore 列表。只影响到本目录。
图 4.9.送交进度
加入新文件或目录Adding New Files And Directories
图 4.11. 加入快捷菜单
开发中新增文件或文件夹,如需要加入到版本控制,选择加入Add;如果不想要加入到版本控制,选择加入忽略列表Add To Ignore List
Ignoring Files And Directories 忽略文件和目录
图 4.12. 不需要版本控制快捷菜单
大多数项目会有一些文件(夹)不需要版本控制,如编译产生的*.obj, *.lst,等。每次送交,TortoiseSVN提示那些文件不需要控制,挺烦的。
最好是在项目中加入忽略列表。
全局忽略列表The Global Ignore List
忽略文件的另一个办法是加入全局忽略列表global ignore list。 全局忽略列表是客户端特性,他影响所有项目,但只在该客户端PC起作用。通常用 svn:ignore 会更好因为它对所有客户起作用。
删除、换名和移动Deleting, Renaming And Moving
从快捷菜单的TortoiseSVN 子菜单进入删除、改名等操作
Figure 4.13. Explorer context menu for versioned files
如果你想在工作拷贝中移动文件:
1. 选择待移动的文件和文件夹;
2. 按住左键拖动right-drag 文件(夹)到跟踪拷贝内的新地方;
3. 松开左键
4. 在弹出菜单中选择move files in Subversion to here
如果你在资源管理器中象往常那样删除了文件而没有在版本控制中删除,送交对话框将提示这些文件并让你在送交前在版本控制中删除它们。
撤销修改Undo Changes
如果你想撤销自上次更新后所作的改动,选择文件,左键right click,在快捷菜单的TortoiseSVN子菜单中选择复原revert ,在对话框中选择你想要复原的文件,点击确定OK.
图 4.14. 复原对话框
撤销已送交的变更Undoing Changes which have been Committed
复原Revert 只撤销本地的改动,而不撤销已送交文件的改动。如果你想撤销某一版本的全部变更,可从版本记录对话框中处理。
Revision Log Dialog 版本记录对话框
对每次送交的更改,你必须同时提供更改的记录,以便日后能找出为什么/如何改动。记录对话框
记录对话框显示所有记录信息并显示在3个格里:
· 顶格显示版本号,包括日期,送交者等。
· 中格显示上格所选版本的完整记录Log。
· 底格显示该版本改动的文件列表。
在顶格还提供快捷菜单!
弹出记录对话框
图4.15. 记录对话框
弹出Log记录对话框的方式:
· 从TortoiseSVN 子快捷菜单
· 从属性页
· 更新进度对话框。
分支/标记Branching / Tagging
版本控制的作用是能将变更隔离成独立的方向,称之为分支branch. 分支用于主发布前尝试新特性。
另一特性是标记特殊版本,以利于在任何时间重新创建环境。这个过程叫标记tagging.
Subversion并没有特别的用于分支和标记的命令,而是用cheap copies代替。Cheap copies有点像连接links。
在由工作拷贝创建branch/tag前,你必须确认已更新档案库。
创建branch/tag非常简单:
图 4.18. 分支/标记对话框
从工作目录父文件夹点出快捷键,选择分支/标记Branch/Tag... ,输入档案库中存放分支/标记路径的URL,在原来输入trunk 的地方输入tags/tagname ,这里tagname 可能是ProjectName_v1.10.
C:/SVNRepository/trunk/ProjectName/...
C:/SVNRepository/trunk/AnotherProject/...
C:/SVNRepository/branches/ProjectName_SpecialDebugBuildBasedOn_v1.09/
C:/SVNRepository/tags/ProjectName_v1.10
点击OK ,Subversion在你选择的档案库的目录内创建了一个cheap copy。创建Branch / Tag不影响你的工作目录。
取出或切换…To Checkout or to Switch...
…这确实是个问题!由于Checkout取出了分支中的所有数据, 转向Switch... 只是转移你工作目录中变化了的数据。
为了能在新的的工作拷贝上工作,你可以:
· 再次执行取出Checkout 。你可以取出任意次到你本地硬盘上的任何地方。
· 转换到新创建的档案库拷贝上。只需执行切换Switch...
在下面的对话框中输入你的分支的URL,保留“Head Revision”点击 OK,你的工作目录将切换到新的分支/标记branch / tag.
切换与更新,不会丢失你在本地所作的修改,而是将未送交的修改合并。
Figure 4.19. 切换对话框
分支与标记的不同点:
· 标记用于创建项目特殊阶段的静态快照 – 不再用于开发 – 而分支是用于开发的。这是我们建议使用/trunk /branches /tags 的理由。
· 如果你在工作拷贝上修改并送交,则在分支的修改体现在分支上而不是主干上。。
将分支合并到主干上
图 4.20. 合并对话框
(略)
创建并应用补丁Creating and Applying Patches
如果谁都可以修改,项目将没完没了,永远不会稳定下来。怎么办呢?通过“补丁patch”!将补丁送交的具有写权限开发团队,他们先审查补丁,再决定是否送交到档案库。
补丁文件仅显示工作拷贝和基础版本的差异。
Creating a Patch File 创建补丁文件
首先你需要测试你的修改是否正确,然后用创建补丁Create Patch... 而不是使用送交Commit... ,这将创建包含改动的文件。
Applying a Patch File 套用补丁文件
重新装入工作拷贝Relocating a working copy
Figure 4.21. The Relocate Dialog
如果因为某种原因档案库修改位置,你需要使用重新定位命令。
档案库浏览器The Repository Browser
直接在档案库上工作!
图 4.22. 档案库浏览器
进入档案库浏览器后,使用快捷菜单!
谁动了我的奶酪?Who Changed Which Line?
Figure 4.28. 注解/谴责对话框
有时你不但要知道那些代码改动了,还要知道谁改动的!使用追根溯源(谴责)Blame... 即可!将Blame翻译成谴责真不好,其意思只是追根溯源
图 4.29. TortoiseBlame
使用内建在TortoiseSVN中的TortoiseBlame可非常方便地查看修改的历史
本文转自:
http://blog.sina.com.cn/s/blog_43e42bde0100rxmc.html
分享到:
相关推荐
TortoiseSVN 针对 Windows 平台的 Subversion 客户端
Subversion客户端是与Subversion服务器交互的工具,使得用户可以在本地计算机上进行版本控制操作。 TortoiseSVN是Subversion的一个流行图形化客户端,特别设计用于Windows操作系统。它作为一个shell扩展集成到文件...
### Subversion客户端TortoiseSVN简单使用指南 在软件开发过程中,版本控制工具是必不可少的,它能够帮助团队管理代码的变化,确保项目的稳定性和可追溯性。Subversion(SVN)作为一款开源的集中式版本控制系统,在...
TortoiseSVN SVN subversion 客户端 下载 Sub Version 1.6 win32 实用于 win32 系统。可以同步 签入 签出 很不错的工具
TortoiseSVN-1.14.5客户端是一款基于Subversion(SVN)版本控制系统,专为Windows用户设计的图形界面工具。该客户端让用户能够更直观、方便地管理源代码和其他项目文件的版本控制。在本文中,我们将深入探讨...
基本操作 安装客户端,下载TortoiseSVN安装程序,双击直接安装。安装成功后,右键单击鼠标会多出两个选项,分别是SVN Checkout和SVN Update。SVN Checkout用于从版本库checkout文件,SVN Update用于更新本地文件。 ...
TortoiseSVN 是 Subversion 在 Windows 平台上的一个流行客户端,它作为一个 Windows Shell 扩展集成在文件管理器中,使得操作更加直观和便捷。 1. **安装** - **安装环境**:确保你的计算机运行的是支持 ...
在实际项目中,开发团队通常会设置一个中央仓库,所有成员通过SVN客户端(如TortoiseSVN)连接到仓库,进行代码的提交和更新。团队可以设定权限控制,确保只有授权的用户才能访问和修改特定的项目资源。同时,定期打...
TortoiseSVN是一款强大的Subversion客户端,它作为一个Windows Shell扩展,使得用户可以在资源管理器中直接进行SVN操作。它提供了丰富的功能,如: - **版本控制**:用户可以查看文件的历史版本,比较不同版本之间...
tortoiseSVN则是SVN的一个图形化客户端,专门为Windows平台设计,提供了一个直观且易于使用的界面,使开发者能够在文件资源管理器中直接进行版本控制操作。 #### SVN服务搭建流程 搭建SVN服务的第一步是下载并安装...
TortoiseSVN是Subversion版本控制系统的一个免费开源32位客户端,可以超越时间的管理文件和目录。TortoiseSVN文件保存在中央版本库,除了能记住文件和目录的每次修改以外,版本库非常像普通的文件服务器。你可以将...
TortoiseSVN是一个强大而灵活的Subversion客户端,适用于Windows平台,为用户提供了一套完整的版本控制解决方案。通过深入了解其各项功能,用户可以更高效地管理代码或文档版本,提高团队协作效率。
TortoiseSVN是一款在Windows操作系统上广泛使用的版本控制系统客户端,它基于Apache Subversion(SVN)库。这款工具提供了一种图形化的用户界面,使得版本控制操作更加直观易用。在“TortoiseSVN服务器与客户端软件...
七、基本操作流程 1、取出(check out) 取出版本库到一个工作拷贝: 来到任意空目录下,比如在f分区建立一个空文件夹 f:\work 。“右键 -> SVN Checkout”。在“URL of repository”中输入“svn://localhost/svn/...
针对 Windows 平台的 Subversion 客户端 版本 1.5.8 Stefan Küng Lübbe Onken Simon Large 2008/12/01 22:49:20 (r14739) 你是否在一个团队中工作? 是否发生过这样的情况: 当你在修改一个文件时,其他人也在...
TortoiseSVN是一款非常流行的Subversion客户端,它集成了Windows资源管理器,使得用户可以方便地进行版本控制操作。 1. **Subversion服务端**:Subversion服务器通常通过Apache HTTP Server或内置的svnserve进程...
TortoiseSVN不仅包括基本的版本控制功能,如提交、更新、差异比较,还提供了合并、恢复、锁定/解锁等高级操作。 **三、TortoiseSVN服务端安装** 1. **选择SVN服务器软件**:常见的SVN服务器软件有VisualSVN Server...
TortoiseSVN则是Subversion的一个图形化客户端,它为Windows用户提供了友好的界面,使得版本控制操作更加直观易用。下面我们将详细介绍Subversion和TortoiseSVN的安装与配置过程。 一、Subversion的安装 1. 获取...
TortoiseSVN是一款在Windows操作系统上非常流行的版本控制系统客户端,它基于Apache Subversion(SVN)服务端,提供了一套直观易用的图形用户界面,使得开发者和团队协作人员可以方便地进行版本控制操作。...
TortoiseSVN是Subversion的一个图形化客户端,专为Windows用户设计,提供了直观易用的界面。在这个压缩包文件中,包含的是TortoiseSVN 1.6.5和Subversion 1.6.5的安装程序。 **TortoiseSVN** 是一个强大的版本控制...