A Subversion client for Windows
Stefan Küng
Lübbe Onken
Simon Large
2005/01/17 19:09:21
二〇〇五年四月 Daan译
Table of Contents
4.3. 导入数据到仓库Importing Data Into A Repository. 5
4.3.1. 仓库规划Repository Layout 5
4.3.4. 参考项目Referenced Projects. 9
4.4. 取出工作副本Checking Out A Working Copy. 9
4.5. 获取状态信息Getting Status Information. 10
4.5.2. 资源管理器中TortoiseSVN的专栏... 12
4.5.3. 仓库状态Status Of The Repository. 12
4.6. 更新工作副本Update Your Working Copy With Changes From Others. 13
4.7. 解决冲突Resolving Conflicts. 16
4.8. 把你的修改发送到仓库Sending Your Changes To The Repository. 16
4.9. 获取(修改)文件(目录)信息Get/Set Information About Files/Directories. 19
4.10. 整合Bug跟踪系统Integration with Bugtracking Systems. 21
4.11. 加入新文件和新目录Adding New Files And Directories. 22
4.12. 忽略文件和目录Ignoring Files And Directories. 23
4.13. 删除、重命名、移动Deleting, Renaming And Moving. 24
4.15. 修订日志窗口Revision Log Dialog. 26
4.15.1. 调用日志窗口Invoking The Log Dialog. 26
4.15.2. 获取附加信息Getting Additional Information. 27
4.15.3. 获取所有日志Getting all log messages. 29
4.15.4. 修改日志内容和作者Changing the log message and author 29
4.15.5. 统计信息Statistical Information. 29
4.16. 分支/标记Branching / Tagging. 30
4.16.1. 创建分支或标记Creating a Branch or Tag. 30
4.16.2. 取出还是切换?To Checkout or to Switch... 31
4.17.1. Merging a Range of Revisions. 32
4.17.2. Merging Two Different Trees. 34
4.18. 创建和应用补丁Creating and Applying Patches. 35
4.18.1. 创建补丁Creating a Patch File. 35
4.18.2. 应用补丁Applying a Patch File. 35
4.19. 副本重定位Relocating a working copy. 36
4.20. 仓库浏览器The Repository Browser 36
4.21. TSVN的设置TortoiseSVN's Settings. 37
4.22. 谁动了哪一行?Who Changed Which Line?. 45
4.23. 版本路线图Revision Graphs. 46
Chapter 4. 日常操作指南
Table of Contents
这份文档描述TortoiseSVN的日常用法。注意这里不介绍CVS或者Subversion。
如果你需要一份Subversion的版本控制介绍,我们推荐您阅读Subversion: The Definitive Guide 。
这份文档像TortoiseSVN和Subversion一样,也一直在改进之中。如果发现任何错误,请在邮件列表中告诉我们,以便我们更新这份文档。请原谅,下面的一些贴图可能不是最新软件版本的贴图,因为我们都是在工作之余来维护的。
4.1. 使用 TortoiseSVN
图1:在版本控制下的目录菜单
所有TortoiseSVN命令都集成在Windows的资源管理器的菜单中。当你在一个文件或文件夹单击鼠标右键时,大多数命令都会直接显示出来。哪些菜单显示出来,依赖于文件或文件夹是否处于版本控制之下。
在工作副本目录中,当你用鼠标右键拖拽文件或文件夹到一个新目录,或者把没有在版本控制下的文件或文件夹拖拽到版本控制下的目录中,就会显示另外一些命令在右键菜单中。
4.2. 认证
假如你试图访问一个有密码保护的仓库,一个认证对话框会跳出来。
图2:认证对话框
输入你的用户名和密码。那个复选框可以让TortoiseSVN保存认证信息在Subversion的默认目录中:$APPDATA/Subversion/auth。
如果你想让Subversion和TortoiseSVN忘记你的认证信息,你必须删除相关的文件。
重要信息: 在Windows2000及其以上的系统中,认证信息被加密保存在注册表中。要删除认证信息,请选择settings对话框,并且点击Clear Auth Cache按钮。 |
提示: 如果你是使用WindowsNT域的认证方式,那么在输入用户名时要包括域名,比如:MYDOMAIN/johnd。 |
4.3. 导入数据到仓库Importing Data Into A Repository
4.3.1. 仓库规划Repository Layout
在将数据导入到仓库之前,你必须先想好如何组织存放你的数据。如果你使用一种我们推荐的规划方式,你将在以后的使用中感觉到很舒服。
我们这里有很多种标准的推荐仓库组织形式。大多数人会创建一个trunk目录来存放开发的“主线”,一个branches目录来存放支线副本,另外还有一个tags目录来存放标签副本。假如一个仓库只保存一个项目,经常会创建这样的几个顶级目录:
/trunk
/branches
/tags
如果一个仓库存放多个项目,经常会像下面这样根据分支来规划:
/trunk/paint
/trunk/calc
/branches/paint
/branches/calc
/tags/paint
/tags/calc
...或者根据项目分成多个目录:
/paint/trunk
/paint/branches
/paint/tags
/calc/trunk
/calc/branches
/calc/tags
如果多个项目之间的关系不是很紧密,并且他们都是被单独取出的,那根据项目来规划会比较有意义些。For related projects where you may want to check out all projects in one go, or where the projects are all tied together in a single distribution package, it is often better to index by branch. This way you have only one trunk to checkout, and the relationships between the sub-projects is more easily visible.对那些相关的项目(),最好根据分支来组织规划。这样的话,你就只有一个trunk需要checkout,而且子项目间的关系会更明显。
你如果采用/trunk /tags /branches并列于根目录的方式,那你必须为每个branch和tag复制整个trunk,也就是说这种结构显得更机动些。
对不相干的项目来说,你可以使用多个不同的仓库。当你提交一个改动,版本号会是整个仓库的版本号,而不是项目的版本号。2个不相干的项目共享一个仓库会在版本号方面导致极大的不方便。Subversion和TortoiseSVN的项目看起来好像在同一个地址,但事实上他们在完全不同的仓库中研发着,并且在版本号方面完全的不相干。
当然,你可以不管上面提到的这些形式。你可以随意发挥以满足你或者你的团队的需要。记住不管你怎么选择,那都不会是一个永久的形式,你可以在任何时候重新组织你的仓库。因为branches和tags都是很普通的目录,只要你愿意,TortoiseSVN可以随时移动它们,或改名。
从一种形式转换到另一种形式仅仅需要在服务器端做一些文件或目录移动操作;如果你不喜欢你仓库的某种组织形式,尽管大胆的操作那些目录。
到这里,如果你还没有在你的仓库中创建一个基本的目录架构,接下来你应该这么做:
1. 在你的硬盘中创建一个空目录。
2. 在这个目录中创建一个你中意的目录组织形式。注意现在不要放任何文件进去。
3. 接下来把这个结构导入仓库。在新建的那个目录上单击鼠标右键,选择Import…。这样,就把你刚才创建的临时目录导入到仓库的根目录了,并创建了仓库的基本架构。
注意:你导入的这个目录的目录名是不应该出现在仓库中的,应该只有目录中的内容会出现。比如,创建下面的目录结构:
C:/Temp/New/trunk
C:/Temp/New/branches
C:/Temp/New/tags
将C:/Temp/New 导入到仓库的根目录,那么根目录看起来应该是这样的:
/trunk
/branches
/tags
另外你也可以使用仓库浏览器(repository browser)直接在仓库中创建新目录。
4.3.2. Import
在把你的项目导入到仓库之前,下面的工作必须做好:
1. 把项目中不需要的文件删除。(临时文件、编译器创建的文件,比如*.obj、2进制文件等。)
2. 把目录和子目录中的所有文件整理一遍。虽然你可以在导入之后再来进行重命名或删除等操作,但是还是推荐你在导入之前把你的项目整理好。
现在,在资源管理器(windows explorer)中选择项目的根目录,单击鼠标右键,选择Import…命令,跳出一个对话框:
在这个对话框中你需要填写你要将项目导入仓库的URL地址。
那个Important Message是用来记录日志信息的。
重要信息: 和exclude pattern匹配的文件或文件夹不会被导入。 |
当你按下OK按钮,TortoiseSVN就开始把整个目录树包括所有文件导入到仓库了。和前面讲到的一样,这个目录的名字不会出现在仓库中,只有目录中的内容会出现。现在,你的这个项目就处于版本控制之下了。请注意,你刚才导入的这个目录(在你本地硬盘上的这个)并没有处于版本控制下!要获取一份处于版本控制之下的工作副本,你需要对刚导入的版本做一次取出(Checkout)操作。
4.3.3. Special Files
有时候你需要版本控制一个存储着用户个性信息的文件。也就是说这个文件每个开发者或用户都会去修改以适应他本地的设置。但每个用户在进行提交(commit)操作时都会把这个文件的修改提交给仓库,这就使得版本控制这样一个文件很困难。
在这种境况下,建议使用模版文件。你可以创建一个包含开发人员需要的所有数据的文件,把它添加到版本控制之下,然后让开发人员取出这份文件。接下来,每个开发人员就可以给这个文件做个备份,然后给他改个名字。这样操作之后,不管怎么修改这个备份都不再是什么问题了。
As an example, you can have a look at TortoiseSVN's build script. It calls a file named TortoiseVars.bat which doesn't exist in the repository. Only the file TortoiseVars.tmpl. TortoiseVars.tmpl is the template file which every developer has to create a copy from and rename that file to TortoiseVars.bat. Inside that file, we added comments so that the users will see which lines they have to edit and change according to their local setup to get it working.
So as not to disturb the users, we also added the file TortoiseVars.bat to the ignore list of its parent folder, i.e. we've set the Subversion property svn:ignored to include that filename. That way it won't show up as unversioned on every commit.
4.3.4. Referenced Projects
Sometimes it is useful to construct a working copy that is made out of a number of different checkouts. For example, you may want different subdirectories to come from different locations in a repository, or perhaps from different repositories altogether. If you want every user to have the same layout, you can define the svn:externals properties.
Let's say you check out a working copy of /project1 to D:/dev/project1. Select the folder D:/dev/project1, right click and choose properties from the context menu. The Properties Dialog comes up. Then go to the Subversion tab. There, you can set properties. Select the svn:externals property from the combobox and write in the edit box the repository url in the format name url. For example
subversion http://svn.collab.net/repos/svn/trunk
Now click Set and commit your changes. If a user updates their working copy the external project is checked out, too.
If you need more information how TortoiseSVN handles Properties read Section 4.9, “Get/Set Information About Files/Directories”.
4.4. 取出工作副本Checking Out A Working Copy
为了获取一个工作副本,你必须从仓库中做一次取出(checkout)操作。
在资源管理器中选择一个你想要存放工作副本的目录。单击鼠标右键跳出菜单,选择命令Checkout…,再跳出一个窗口:
如果你输入一个不存在的目录名,那这个目录会自动创建。
重要信息 你只能取出到一个空目录。假如你想要取出到先前导入的原始目录,Subversion会抛出一个错误。你必须取出到另外的一个目录或者先把原始目录删掉。 |
强烈建议您仅取出trunk部分。假如你坚持要取出父目录,那你有可能就会把你的硬盘塞满,因为你将得到整个仓库的数据(包括项目的每一个branch和tag)。
导出Exporting 有时候你也许需要一份没有那些.svn目录的工作副本,比如要建一个源代码zip压缩包。TortoiseSVN提供一个导出命令 Export…,可以免除我们自己动手来操作(做一个副本,然后手动删除所有.svn目录)。如果你在工作副本中执行这个命令,你可以选择一个目录用来存放没有.svn目录的干净工作副本。同样,你也可以指定是导出所有文件还是那些被版本控制的文件。 导出的另一种方法是,用鼠标右键拖拽一个工作目录到其他地方,然后选择Subversion export here 或者 Subversion export all here。 |
4.5. 获取状态信息Getting Status Information
当你在你的工作副本中工作的时候,你经常会需要知道哪些文件被修改过,哪些被增加,哪些被重命名,或者哪些文件是其他人修改和提交的。
4.5.1. 覆盖图标Icon Overlays
图4.5 覆盖图标
在从仓库中取出工作副本之后,你会发现资源管理器中文件的图标发生了变化。这就是TortoiseSVN受欢迎的一个原因。TortoiseSVN为每个文件图标在原来的基础上增加了一个叫做覆盖图标的东东。覆盖图标根据Subversion状态的不同而显示不同的图标。
绿色图标表示这是一个最新取出的工作副本,他的Subversion状态是