TortoiseSVN日常使用指南.docx
- 文档编号:23548164
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:23
- 大小:173.73KB
TortoiseSVN日常使用指南.docx
《TortoiseSVN日常使用指南.docx》由会员分享,可在线阅读,更多相关《TortoiseSVN日常使用指南.docx(23页珍藏版)》请在冰豆网上搜索。
TortoiseSVN日常使用指南
本文目的在与描述TortoiseSVN客户端的日常使用。
不是一个版本控制系统指南,也不是Subversion(SVN)的指南。
本文档的价值在于,当你知道大概要做什么,却又记不起应该怎么做的时候,可以有个参考的地方。
如果你需要了解使用Subversion进行版本控制的指南,我们建立你阅读以下这本梦幻般的书:
Subversion权威指南本文档与TortoiseSVN和Subversion一样,也是处于正在开发的状态。
如果你找到了错误之处,请向邮件列表报告,这样我们就可以更新它。
日常使用指南(DUG)中的一些屏幕截图也许不符合当前软件中的情况。
请您原谅我们。
毕竟我们只是用业余的时间在制作TortoiseSVN你应该已经安装了TortoiseSVN
你应该熟悉版本控制系统。
你应该知道Subversion的基础。
你应该已经建立了一个服务器并且可以访问Subversion库.5.1开始5.1.1.图标重载图5.1.显示重载图标的资源管理器显示重载图标的资源管理器"src="/uploads/allimg/080318/1044380.png"/>
TortoiseSVN最直观的功能之一就是图标重载,重载的图标显示在你的工作复本文件上。
你一眼就可以知道文件被修改过了。
参考第 5.7.1 节“图标重载”学习不同的重载图标所表示的意义。
5.1.2. 右键菜单
图 5.2. 版本控制下一个目录的右键菜单
所有的TortoiseSVN命令都是通过windows资源管理器的右键菜单执行。
右键点击一个文件或者文件夹,大多数菜单项都能够直接显示。
一个命令是否显示取决于这个文件或文件夹或者它们的父文件夹是否受版本控制,你也可以将TortoiseSVN的菜单作为资源管理器菜单的一部分。
在某些情况下,你可能看到多个TortoiseSVN条目。
这不是BUG!
图 5.3. 在一个版本控制的文件夹下资源管理器文件菜单中的快捷方式。
本示例是在一个受控文件夹下的某个未受控的快捷方式,在资源管理器的文件菜单下有三个TortoiseSVN条目。
一个是受控文件夹本身的,一个是快捷方式本身的,第三个是快捷方式所指向的对象。
为了帮助你区分它们,菜单条目的图标的右下角有标志,表明是文件、快捷方式、文件夹或是选中了多项。
5.1.3. 拖放
图 5.4. 版本控制下的一个目录的右键拖拽菜单
在工作拷贝里右键拖拽文件或目录到新的位置,或者右键拖拽一个非版本控制的文件或文件夹到一个版本控制目录下的时候,右键菜单还能够出现其他的命令。
5.1.4. 常用快捷方式
一些常见的操作与Windows的快捷键是一样的,但没有出现在按钮或是菜单中。
如果你找不到一些显而易见的操作,比如刷新视图,请参考以下内容。
F1
当然是帮助。
F5
刷新当前视图。
这也许是单键命令中唯一一个最常用的了。
比如...在资源浏览器中,这个键可以刷新工作复本中的图标重载。
在提交对话框中,它可以重新扫描查找哪些是需要提交的。
在版本日志对话框中,可以重新联系版本库以检查更多的最近修改情况。
Ctrl-A
全选。
可用于在得到一个错误消息并想要复制粘贴到电子邮件时。
使用Ctrl-Ato选择错误错误,然后...
Ctrl-C
...复制选中的文本。
5.1.5. 认证
如果要连接的版本库需要口令,一个认证对话框就会显示出来。
图 5.5. 认证对话框
输入你的用户名和口令。
那个选择框能让TortoiseSVN在Subversion的缺省路径下$APPDATA\Subversion\auth的三个子目录里保存认证信息:
∙svn.simple文件里包含了基本认证方式所需要的认证信息(用户名/口令)。
∙svn.ssl.server文件里包含了SSL服务器证书。
∙svn.username文件里包含了用户名认证的认证信息(不需要提供密码)。
每个文件对应一个要连接的服务器。
文件是纯文本格式,因此可以用文本编辑器查看每个文件是应用于哪个服务器的。
如果希望Subversion和TortoiseSVN忘记某个服务器的凭证信息,只需删除这个服务器的对应文件即可。
如果想要清除所有服务器的认证缓存,可以通过TortoiseSVN的设置对话框的常规设置页来实现。
那个按钮能够清除Subversion的auth目录下缓存的所有认证数据,以及老版本的TortoiseSVN存储在注册表里的认证数据。
请参考第 5.27.1 节“常规设置”。
关于如何设置服务器的认证和权限的更多信息,请参考第 3 章配置服务器
提示
如果使用WindowsNT域进行认证,输入用户名的时候要包括域名,如:
MYDOMAIN/johnd。
5.2. 导入数据到版本库
5.2.1. 版本库布局
在将你的数据导入到版本库之前,首先你得考虑如何组织你的数据。
如果你使用一种推荐的布局,你在后面的操作将会更容易许多。
有一些标准的、推荐的方式来组织一个版本库。
大多数人建一个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
如果项目不是密切相关,而且每一个是单独被检出,那么按项目布局是合理的。
对于那些你想一次检出所有项目,或需要将它们打成一个分发包的相关项目,按分支来布局通常比较好。
这种方式你只要检出一个分支,而且子项目之间的关系也比较清楚。
如果你采用顶层/trunk/tags/branches这种方式,并不意味着你必须拷贝整个主线为分支或标签,而且某些情况下这种结构更具灵活性。
对于不相关的项目,你可能更愿意使用不同的版本库。
当你提交时,改变的是整个版本库的修订号,而不是项目的。
让两个不相关的项目共用一个版本库,会导致修订号出现较大的跳跃。
Subversion和TortoiseSVN项目看起来是在同一个主机地址,但是它们是在完全独立的版本库中开发着,并且版本号也不相干。
当然,你完全可以不理会上面提及的通用布局。
你可以自由改变,来满足你和你团队的需要。
请记住,不管你选择哪种布局,它都不是永久的。
你可以在随时重新组织你的版本库。
因为分支和标签是普通的目录,只要你愿意,TortoiseSVN可以将它们移动或重命名。
从一种布局转换到另一种布局仅仅是在服务器端移动一些文件或目录;如果你不喜欢版本库的组织形式,仅管大胆地修改那些目录。
所以,如果你还没创建一个基本的文件夹结构到你的版本库中,你现在可以这样做:
1.在你的硬盘上创建一个空的文件夹
2.在那个文件夹下创建你想要的顶级目录--千万不要放任何文件进去!
3.通过在那个文件夹右键,选择TortoiseSVN→导入...将这个结构导入到版本库中。
这将导入临时文件夹到版本库的根目录形成一个基本的版本库布局。
注意,你所导入的那个文件夹的名字并不存在于版本库中,仅仅是它所包含的内容。
比如,创建如下结构的文件夹
C:
\Temp\New\trunkC:
\Temp\New\branchesC:
\Temp\New\tags
导入C:
\Temp\New到版本库的根目录,版本库中将会是这样:
/trunk/branches/tags
你还可以使用版本库浏览器直接在版本库中创建文件夹。
5.2.2. 导入
在将你的项目导入到版本库之前,你应该:
1.删除所有构建工程不需要的文件(临时文件,编译器产生的文件,例如*.obj,生成的二进制文件,...)
2.组织目录和子目录内的文件。
尽管以后可能会改名/删除文件,我们还是建议你在导入之前使你的项目结构组织良好!
现在进入资源管理器,选择你的项目的顶层目录,右击打开上下文菜单。
选择命令TortoiseSVN→导入...,它会弹出一个对话框:
图 5.6. 导入对话框
在这个对话框中,输入你的项目导入到版本库的URL。
这个输入信息将用作提交日志。
默认情况下,匹配全局忽略模式的文件和文件夹不会被导入。
你可以使用包含忽略文件检验栏来禁止此行为。
参考第 5.27.1 节“常规设置”以获得关于全局忽略模式的更多信息。
当你点击确认时,TortoiseSVN会导入包含所有文件的完整目录树到版本库。
如前所述,你导入的文件夹名称不会在版本库中出现,只有这个文件夹的内容会在版本库中出现。
现在这个工程就存贮在版本库,被版本控制。
请注意,你导入的文件夹没有被版本控制!
你需要检出刚才导入的版本,以便获得受版本控制的工作目录。
5.2.3. 专用文件
有时候你需要版本控制一个包含用户专用的数据。
它意味着你有一个文件,每个开发者/用户都需要修改,一边满足他/她的本地配置。
但是版本控制这样的文件是困难的,因为每个用户可能都要提交他/她的修改。
在这种情况下,我们建议使用模版文件。
创建你个包含所有开发者需要的数据的文件,增加到版本库中,让开发者检出。
然后,每个开发者创建一个副本,改名此文件。
于是,修改这个文件不再是问题。
作为例子,你可以看看TortoiseSVN的构建脚本。
它调用一个TortoiseVars.bat文件,它并不在版本库中。
只有TortoiseVars.tmpl在版本库中。
TortoiseVars.tmpl是一个模版文件,每个开发者都需要创建一个副本,改名为TortoiseVars.bat。
在这个文件中,我们增加了注释,所以用户知道他们需要编辑那些行,以便适应他们的本地配置,使其能工作。
于是为了不干扰用户,我们也将TortoiseVars.bat增加到它的父目录的忽略列表,也就是,我们设置了Subversion属性svn:
ignore包含这个文件名称。
这样,每次提交时它都不会作为没有版本控制的文件出现。
5.2.4. 引用的工程
有时候,构建一个需要不同检出的工作目录是很有用的。
举例来说,你需要不同的子目录来自版本库的不同位置。
,或者可能完全来自不同的版本库。
如果你需要每个用户具有相同的目录结构,你可以定义svn:
externals属性。
比如说,你检出了/project1,工作目录是D:
\dev\project1。
选择目录D:
\dev\project1,右击,在右键菜单选择Windows菜单→属性。
就会出现属性窗口,转到Subversion页,你可以设置属性。
从组合框选择svn:
externals属性,在编辑框按照名称URL格式输入,或者你需要一个指定的版本,那么使用名称-r版本URL。
你可以增加多个外部工程,每行一个。
注意,URL必须使用逃逸字符编码,不然可能无法正常工作。
举例说明,你必须将每个空格替换为%20。
使用包含空格的目录名称是不可能的。
假设你为D:
\dev\project1设置了这些属性:
soundshttp:
//sounds.red-quick_graphshttp:
//graphics.red-skins/toolkit-r21http:
//svn.red-
现在点击设置,然后提交你的修改。
当你(或其他用户)更新工作目录时,Subversion将会创建子目录D:
\dev\project1\sounds,并且检出sounds工程,另一个子目录D:
\dev\project1\quickgraphs包含graphics工程,最后一个嵌套的子目录D:
\dev\project1\skins\toolkit包含的skin-maker工程的版本21。
如果一个外部工程位于同一版本库中,当你向主项目提交你的修改时,你对外部工程做的修改也会包含在提交列表中。
如果外部工程位于不同的版本库,当你向主项目提交你的修改时,你对外部工程做的修改会被通报,但是你必须单独的提交这些外部项目的修改。
注意如果你修改了svn:
externals属性中的URL,下次更新工作目录时,Subversion将会删除老的外部目录,重新检出副本,于是你将看到文件被增加而不是你期望的被更新。
当你引用一个其它项目的标记时,这种情况就可能发生。
即当那个项目发布新版本时,你将外部引用改为新的标记。
提示
你应当认真考虑在所有外部定义中使用确定的版本号。
这样做意味着你决定下载一个快照,并且精确的指明了是哪个快照。
与使用通常的分支相比,你不会为第三方版本库的修改感到惊讶,这些版本库你可能没有任何控制,使用精确的版本号能使你回溯工作目录到以前的版本,你的外部定义也遵循此规则,看起来是以前的版本,即外部工作副本的更新匹配他们的老版本。
对于软件工程,它是你的复杂代码构建成功或失败的重要区别。
外部定义svn:
externals中的URL是绝对路径。
如果你重新定位工作副本,或者外部版本库重新定位了,这些URL不会自动更新。
而且,如果你分支了一个工程,它的外部定义位于同一版本库中,分支中的这些URL也不会更新;你可能需要用对分支的引用替换对最新版本的引用。
如果你需要TortoiseSVN如何处理属性的更多信息,请阅读第 5.15 节“项目设置”。
如果你需要知道存取公共子个我我你工程的不同方法,请阅读第 B.6 节“包含一个普通
5.3. 检出工作拷贝
为了得到一个工作拷贝,需要进行从版本库检出的操作。
在Windows资源管理器里选择一个存放工作拷贝的目录。
右键点击弹出右键菜单,选择TortoiseSVN→检出…命令。
然后就会看到下面的对话框:
图 5.7. 检出对话框
如果输入一个并不存在的目录名,那么这个名字的目录就会被创建出来。
重要
你应该只检出到一个空的目录。
如果你要将你的源代码树检出到与你导入它们时相同的目录,Subversion会给出一个错误信息它不会用已受控的文件覆盖已经存在的但未受控的文件。
你必须检出到一个不同的目录或是先将已经存在的源代码树删除。
如果你只希望检出最顶层的文件夹而忽略子文件夹,请选中只检出顶层文件夹复选框。
如果项目含有外部项目的引用,而这个引用你不希望同时检出,请选中忽略外部的复选框。
重要
如果这两个选项的任何一个选中了,你应该使用TortoiseSVN→更新至版本...来更新你的工作复本而不是使用TortoiseSVN→更新。
标准的更新将会包含所有的子文件夹和外部引用。
强烈建议你只检出trunk的那部分目录树。
如果你在URL中指定了目录树的父路径,你的硬盘有可能被塞满,因为你将会得到整个版本库树的复本,包括项目所有的分支和标签(tag)!
关于导出
有时你可能想要建立一个没有.svn目录的本地的复本,比如建立一个源代码压缩包。
要达到这个目的,请参考第 5.23 节“导出一个Subversion工作拷贝”。
5.4. 让你的修改进入版本库
将你对工作复本的修改发送给版本库,称为提交修改。
但在你提交之前要确保你的工作副本是最新的。
你可以直接使用TortoiseSVN→更新,或者,你可以先使用TortoiseSVN→检查修改看看哪些文件在本地或是服务器上已经有了改动。
如果你的工作复本是最新的,并且没有冲突,你就已经为提交做好准备了,选择你要提交的文件和/或文件夹,然后TortoiseSVN→提交....
图 5.8. 提交对话框
提交对话框将显示每个被改动过的文件,包括新增的、删除的和未受控的文件。
如果你不想改动被提交,只要将该文件的复选框的勾去掉就可以了。
如果你要加入未受控的文件,只要勾选该文件把它加入提交列表就可以了。
那些被切换(switched)到不同版本库路径的项也用(s)标记来表示。
当工作在分支上的时候你可能切换到某处,然后忘记切换回主干。
这是你的警告信号!
提交文件还是文件夹?
当你提交文件时,提交对话框只显示你所提中的文件。
当你提交文件夹中,提交对话框将自动选择有改动的文件。
如果你忘记了你建立的一个新文件,提交文件夹将使你可以找到它。
提交一个文件夹并不意味着每个文件都被标识为修改过的,它仅仅是通过帮你多做些事从而让你的生活更滋润一点。
如果你修改的文件是使用了svn:
externals从别的版本库中包含进来的,那么这些改动不会被自动提交。
在文件列表下方的警告符号会告诉你是否出现了这种状况,工具提示(tooltip)提示了外部文件必须要分开提交。
在提交对话框中有很多未受控的文件
如果你认为TSVN提交对话框显示了太多的未受控文件(如编译器产生的文件或是编辑器的备份文件),有几种方法可以处理这种情况。
你可以:
∙将文件(或是通配符扩展)加入到设置页的排除列表中。
这对每个工作复本都起作用。
∙使用TortoiseSVN→加入忽略列表,将文件加入svn:
ignore列表。
这只对你设置了svn:
ignore属性的路径有效。
使用SVN属性对话框,你可以改变一个目录的svn:
ignore属性。
参考第 5.11 节“忽略文件和目录”获得更多的信息。
在提交对话框中双击任何修改过的文件,将运行外部diff工具显示你作的改动。
上下文菜单(右键菜单)将给你更多的选项,请看屏幕截图。
你可以从这里将文件拖动到另一个应用程序中,如文本编辑器或是IDE。
在底部面板中显示的列是可定制的。
如果你右击任何一列的头部,你就会看到一个上下文菜单,允许你选择哪一列要显示。
还可以在鼠标移动到列边界时通过拖动手把来改变列的宽度。
这些定制的内容都会被保留下来,下一次你会见到相同的列。
拖放
你可以将文件从别的地方拖动到提交对话框,只要工作复本是由同一版本库中检出就可以了。
比如,你有一个很大的工作复本,要开好几个资源管理器窗口来查看层次中不同的文件夹。
如果你要避免从顶级文件夹提交(冗长而缓慢的文件夹改动检查),你可以打开一个文件夹的提交对话框,然后将别的窗口中的项拖进去,可样就可以一次提交它们了。
修复外部改名
有时候文件不是用Subversion改名,于是它们在文件列表中作为丢失和未版本控制的文件出现。
为了避免丢失历史,你需要通知Subversion。
简单的选择老名称(丢失)和新名称(未版本控制),然后使用右键菜单→修复移动来指明这两个文件是改名关系。
确保输入描述你所提交的修改内容的日志信息。
这可以帮你回顾做了什么,什么时候做的。
信息的内容可长可短,许多项目规定了要包含的内容、使用的语言甚至是严格的格式。
你可以使用与电子邮件相似的约定,简单格式化日志消息。
如果对文本采用这些样式,使用*文本*表示粗体,_文本_表示下划线,^文本^表示斜体。
图 5.9. 提交对话框的拼写检查器
TortoiseSVN包含了一个拼写检查器帮助你正确地书写日志信息。
对任何错误拼写的词都高亮显示。
使用右键菜单可以获得修改建议。
当然它不会知道所有的技术术语,所以有时一些拼写正确的词会被当作错误。
但不用担心,你可以使用右键菜单将它们加入你的个人字典中。
日志信息窗口还包含一个文件名和函数自动完成的功能。
这使用了正则表达式来从你提交的(文本)文件中提取类和函数名,当然包括文件名本身。
如果你现在敲入的一个词与列表中的任意一个匹配(在你输入至少3个字符后),就会出现一个下拉列表,允许你选择完整的名字。
与TortoiseSVN一起提供的正则表达式位于TortoiseSVN安装路径的bin文件夹中。
你可以定义自己的正则式并将其存放在%APPDATA%\TortoiseSVN\autolist.txt。
当然你自定义的自动列表不会在升级安装的时候被覆盖。
如果你不熟悉正则表达式,请参考在线文件和教程:
http:
//www.regular-expressions.info/.
在按下OK之后,会出现一个对话框显示提交的进度。
图 5.10. 显示提交进度的进度对话框
进度对话框使用颜色代码来高亮显示不同的提交行为。
蓝色
提交一个修改。
紫色
提交一个新增项。
深红
提交一个删除或是替换。
黑色
所有其他项。
这是默认的配色方案,但你可以通过设置对话框来定制这些颜色。
参考第 5.27.2.5 节“TSVN颜色设置”获得详情。
指定文件夹属性
有几个特殊的文件夹属性可用于帮助我们得到更多的对提交日志信息的格式以及拼写检查模块的控制。
参考第 5.15 节“项目设置”以了解详情。
与缺陷跟踪工具整合
如果你激活了一个缺陷跟踪系统,你可以在Bug-ID/Issue-Nr:
文本框中设置一个或多个问题。
多个问题应该用逗号分割。
另外,如果你使用基于正则表达式的缺陷跟踪支持,只要将你的问题引用作为日志信息的一部分加入就可以了。
详情请见第 5.25 节“与BUG跟踪系统/问题跟踪集成”。
5.5. 用来自别人的修改更新你的工作复本
图 5.11. 已经完成更新的进度对话框
你应该定期地确保别人作的修改与你的工作复本可以整合。
从服务器上获取改动到你本地复本的过程称为更新。
更新可以针对一个文件、几个选中的文件或是递归整个目录层次。
要进行更新操作,请选择要更新文件和/或路径,右击选择右键菜单中的TortoiseSVN→更新。
会弹出一个窗口显示更新的进度。
别人作的修改将合并到你的文件中,你所做的修改会被保留。
版本库受更新操作的影响。
进度对话框使用颜色代码来高亮不同的更新行为
紫色
新项已经增加到你的工作副本中。
深红
你的工作副本中删除了多余项,或是你的工作副本中丢失的项被替换。
绿色
版本库中的修改与你的本地修改成功合并。
亮红
来自版本库的修改在与本地修改合并时出现了冲突,需要你解决。
黑色
你WC中的没有改动的项被来自版本库中新版本所更新。
这是默认的配色方案,但你可以通过设置对话框来定制这些颜色。
参考第 5.27.2.5 节“TSVN颜色设置”获得详情。
如果你在更新中遇到了冲突(这是由于别人与你修改了同一个文件的同一行代码,并且两者的修改不匹配),对话框中将冲突显示为红色,你可以双击这些行启动外部合并工具来解决冲突。
当更新完成后,进度对话框在文件列表下面显示汇总信息,多少项更新,增加,删除,冲突等。
汇总信息可以使用CTRL+C复制到剪贴板。
标准的更新命令没有选项,仅仅是把你的工作复本更新到版本库中的最新版本,这也是最常用的情况。
如果你要对更新过程进行更多的控制,就要使用TortoiseSVN→更新到版本...。
这个操作允许你更新工作复本到一个指定的版本,不仅仅是最新的。
假设你的工作复本是在版本100,但你要回顾一下版本50是什么样的——那你只要简单地更新到版本50就可以了。
在同一个对话框中你还可以选择不递归更新当前文件夹(就是不更新所有的子文件夹)并且可以选择是否在更新中忽略外部的项目(比如具有属性svn:
externals的被引用的项目).
小心
如果你把一个文件或是文件夹更新到某个特定的版本,你不应该对这些文件做修改。
你在提交的时候会得到一个已经过期的错误消息!
如果你要取消修改,从一个早前的版本重新开始,你可以通过版本日志对话框回
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TortoiseSVN 日常 使用指南
![提示](https://static.bdocx.com/images/bang_tan.gif)