TortoiseSVN:Subversion客户端 · 团队开发? · 修改文件而他人也在改?你修改的内容丢失? · 保存了文件可又后悔了?想得到几天前的版本? · 发现了bug,想知道bug何时引入的? 这些问题都遇到了?那就使用TortoiseSVN吧。TortoiseSVN是Subversion的客户端。Subversion是针对CVS的不足而开发的版本控制系统。 图2.1. 典型服务器/客户机模型
文件共享的问题The Problem of File-Sharing 图 2.2. 要避免的问题
Figure 2.3. 锁定-修改-解锁方案
· 锁定可能引起管理问题: 如忘记解锁别人无法使用。 · 锁定造成不必要的串行作业。 · 锁定可引起安全问题。 拷贝-修改-合并The Copy-Modify-Merge Solution 图 2.4. 拷贝-修改-合并方案
这种模型好像很混乱,但实际上很好用。解决冲突的时间大大小于因锁定而等待的时间。解决冲突的最好办法是沟通。
实际操作Subversion 工作拷贝中包含了由Subversion创建和维护的一个特殊的子目录.svn ,该目录保存了重要的信息。不要删除这个目录! 例如,假定你的档案库包含两软件项目:paint和calc。 图 2.6. 档案库文件系统
Repository URLs:档案库URL Subversion的档案库借助不同方法得到:本地磁盘、网络协议等: Table 2.1. Repository Access URLs Schema 例: File:///c:/svn/prj/template/Dist c:/svn/prj/template是档案库的目录,Dist是档案库的子目录名称 http://build:88/prj/template/Dist http://build:88是Apache设置的URL,prj是通过Apache设置的位置,template是档案库名称,Dist是目录名 版本Revisions 图 2.7. 档案库
版本号代表整个档案库而非单个文件!
工作拷贝如何跟踪档案库? Subversion将下列两种管理信息记录在.svn/: · 工作版本 working revision · 从档案库更新的时间。 通过这些信息,在与档案库交换信息后,Subversion可得出文件的四种状态: l 未修改,新版本,送交无效 l 本地修改,新版本,可送交,更新无效 l 未修改,但在档案库中已修改,过期,送交无效,可更新 l 本地修改,在档案库中已修改,过期。先更新,修改冲突,再送交。 3. 服务器设置 l 利用WebDAV l 用浏览器浏览档案库 l 认证 l 安全 本地档案库
2. 创建档案库的子目录,如C:/SVNRepository。 3. 在新建的目录中右键 TortoiseSVN->在此建立档案库Create Repository here.... 可用FSFS和BDB两种格式创建。 注意:不要编辑档案库中的文件! 本地进入方式:file:///C:/SVNRepository/ 档案库备份 推荐办法: svnadmin hotcopy path/to/repository path/to/backup --clean-logs4. 日常应用指南
认证 图 4.2. 认证对话框
数据汇入档案库Importing Data Into A Repository 1. 创建新的空文件夹。 2. 创建目录结构 – 先不放文件! 3. 右键菜单,点击汇入…(Import...)将结构加入到档案库中。 注意:文件夹的名字不汇入档案库。通过档案库浏览器(Repo Browser)可直接浏览档案库结构。 汇入Import 1. 删除与项目无关的中间文件如生成的临时文件*.obj等。 如果设置了忽略的文件类型,或忽略的目录,可不删除。 2. 在文件夹中组织文件。 在资源浏览器中进入项目顶层文件夹,右键得到快捷菜单,选择汇入… (Import...) ,出现对话框: 图 4.3. 汇入对话框
汇入信息(import message)作为记录信息。 注意 只要点击确定OK TortoiseSVN将把整个目录及目录内的文件加入到档案库中。顶层文件夹的名字不会加入到档案库中,但其他子文件夹的名字均加入以保持档案库的结构。该项目的文件现在处在档案库版本控制中。请注意:目前的本地项目文件夹不处在版本控制下!要得到版本控制,必须取出checkout档案库得到工作拷贝! 特殊文件Special Files 对此建议使用template 文件,创建一共文件,它包含所有开发人员需要信息,将它加入到版本控制下,每个开发人员均可取出这个文件, 复制并重新命名,然后修改就没有问题了。不需要加入版本控制的文件可通过设置Subversion 特性(property) svn:ignored 来忽略。
取出工作拷贝Checking Out A Working Copy 在资源浏览器中选定将要存放工作目录的拷贝,右键弹出快捷菜单,选择C出…Checkout...,将出现对话框:(如果该目录已在版本控制下,则没有取出而是更新(Update)和送交(Commit)) 图 4.4. 取出对话框
注意
汇出Exporting 状态信息Getting Status Information 图标
新近取出的工作拷贝。Subversion状态是正常normal.
档案库状态 Status Of The Repository
送交Commit.... 命令也可用来显示本地的修改,如果不想实际送交到档案库,点击取消Cancel 即可。 将别人的改动更新到你的工作拷贝
如果你和他人改动的是相同部分但改动不一样,就会在更新过程中产生冲突 conflicts。冲突在对话框中用红色表示,双击后用外部编辑器解决冲突。 TortoiseSVN也允许你将工作拷贝更新到指定版本。用更新至版本Update to Revision... 命令,在弹出的对话框中输入指定的版本号即可。 注意 更新至版本Update to Revision... 命令允许复原至低版本。比如你的工作目录版本是100,你想复原至版本50-直接填写在复原对话框中填写复原至版本50。通常,不复原单个文件,确实需要,从记录对话框(Log)选择储存版本至Save revision to... 命令。 解决冲突Resolving Conflicts <<<<<<< filename your changes======= code merged from repository>>>>>>> revisionSubversion为每个冲突文件产生三个附加文件: 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 图 4.8. 送交对话框
送交框中不需要控制的文件 · 在服务器端编辑配置文件config,将不需要控制的文件 (或通配符)添加到排除文件列表。其影响是全局的。 · 通过快捷菜单命令Add to ignore list将文件添加到svn:ignore 列表。只影响到本目录。 图 4.9.送交进度
加入新文件或目录Adding New Files And Directories
Ignoring Files And Directories 忽略文件和目录
最好是在项目中加入忽略列表。 全局忽略列表The Global Ignore List 删除、换名和移动Deleting, Renaming And Moving Figure 4.13. Explorer context menu for versioned files
1. 选择待移动的文件和文件夹; 2. 按住左键拖动right-drag 文件(夹)到跟踪拷贝内的新地方; 3. 松开左键 4. 在弹出菜单中选择move files in Subversion to here 如果你在资源管理器中象往常那样删除了文件而没有在版本控制中删除,送交对话框将提示这些文件并让你在送交前在版本控制中删除它们。 撤销修改Undo Changes 图 4.14. 复原对话框
Revision Log Dialog 版本记录对话框 记录对话框显示所有记录信息并显示在3个格里: · 顶格显示版本号,包括日期,送交者等。 · 中格显示上格所选版本的完整记录Log。 · 底格显示该版本改动的文件列表。 在顶格还提供快捷菜单! 弹出记录对话框
· 从TortoiseSVN 子快捷菜单 · 从属性页 · 更新进度对话框。 分支/标记Branching / Tagging 另一特性是标记特殊版本,以利于在任何时间重新创建环境。这个过程叫标记tagging. Subversion并没有特别的用于分支和标记的命令,而是用cheap copies代替。Cheap copies有点像连接links。 在由工作拷贝创建branch/tag前,你必须确认已更新档案库。 创建branch/tag非常简单: 图 4.18. 分支/标记对话框
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... 在下面的对话框中输入你的分支的URL,保留“Head Revision”点击 OK,你的工作目录将切换到新的分支/标记branch / tag. 切换与更新,不会丢失你在本地所作的修改,而是将未送交的修改合并。 Figure 4.19. 切换对话框
· 标记用于创建项目特殊阶段的静态快照 – 不再用于开发 – 而分支是用于开发的。这是我们建议使用/trunk /branches /tags 的理由。 · 如果你在工作拷贝上修改并送交,则在分支的修改体现在分支上而不是主干上。。 将分支合并到主干上 图 4.20. 合并对话框
创建并应用补丁Creating and Applying Patches 补丁文件仅显示工作拷贝和基础版本的差异。 Creating a Patch File 创建补丁文件
Applying a Patch File 套用补丁文件 重新装入工作拷贝Relocating a working copy
档案库浏览器The Repository Browser 图 4.22. 档案库浏览器
谁动了我的奶酪?Who Changed Which Line?
图 4.29. TortoiseBlame
Final Step 最后 Enjoy it! |
|