TortoiseSVN日常操作指南
目录
1. 使用………………………………………………………………………………………………………………. 3
2. 认证……………………………………………………………………………………………………………... 3
3. 导入数据到仓库……………………………………………………………………………………………… 4
3.1. 仓库规划……………............................................... …………………………..4
3.2. 导入……………………………………………………………………………………………………... 6
3.3. 特殊文件……………………………………………………………………………………………... .7
3.4. 参考项目…………………………………………………………………………………………….... 7
4. 取出工作副本.………………………………………………………………………………………………...7
5. 获取状态信息…………………………………………………………………………………………………. 8
5.1. 重载图标………………………………………………………………………………………………. 9
5.2. 资源管理器中的专栏……………………………………………………………………………... 10
5.3. 仓库状态…………………………………………………………………………………………….... 10
5.4. 查看区别…………………………………………………………………………………………………11
6. 更新工作副本………………………………………………………………………………………………….11
7. 解决冲突………………………………………………………………………………………………………..12
8. 把你的修改发送到仓库…………………………………………………………………………………….13
9. 获取(修改)文件(目录)信息……………………………………………………………………….15
10. 整合Bug跟踪系统……………………………………………………………………………………… 18
11. 加入新文件和新目录……………………………………………………………………………………. 20
12. 忽略文件和目录…………………………………………………………………………………………… 20
13. 删除、重命名、移动……………………………………………………………………………………..21
14. 取消改变……………………………………………………………………………………………………. 22
15. 修订日志窗口……………………………………………………………………………………………… 23
15.1. 调用日志窗口……………………………………………………………………………………….24
15.2. 获取附加信息………………………………………………………………………………………. 25
15.3. 获取所有日志……………………………………………………………………………………….26
15.4. 修改日志内容和作者……………………………………………………………………………..27
15.5. 统计信息………………………………………………………………………………………………27
16. 分支/标记. …………………………………………………………………………………………………..27
16.1. 创建分支或标记…………………………………………………………………………………….28
16.2. 取出还是切换……………………………………………………………………………………….30
17. 合并………………………………………………………………………………………………………….…31
17.1. 合并指定版本范围……………………………………………………………………………….…31
17.2. 合并两个不同的目录树……………................................................. ….33
18. 创建和应用补丁………………………………………………………………………………………….. 34
18.1. 创建补丁………………………………………………………………………………………………34
18.2. 应用补丁…………………………………………………………………………. …………………35
19. 副本重定位…………………………………………………………………………………………………..36
20. 仓库浏览器……………………………………………………………………………………………………39
21. TSVN的设置……………………………………………………………………………………………….. 39
21.1. 一般设置................................................................................ 39
21.2. 外观感受设置.......................................................................... 41
21.3. 网络设置................................................................................ 42
21.4. 比较/合并设置......................................................................... 43
22. 谁动了哪一行……………………………………………………………………………………………….43
23. 版本路线图…………………………………………………………………………………………………. 46
图1:在版本控制下的目录菜单
所有TortoiseSVN命令都集成在Windows的资源管理器的菜单中。当你在一个文件或文件夹单击鼠标右键时,大多数命令都会直接显示出来。哪些菜单显示出来,依赖于文件或文件夹是否处于版本控制之下。
在工作副本目录中,当你用鼠标右键拖拽文件或文件夹到一个新目录,或者把没有在版本控制下的文件或文件夹拖拽到版本控制下的目录中,就会显示另外一些命令在右键菜单中。
假如你试图访问一个有密码保护的仓库,一个认证对话框会跳出来。
图2:认证对话框
输入你的用户名和密码。那个复选框可以让TortoiseSVN保存认证信息在Subversion的默认目录中。
如果你想让Subversion和TortoiseSVN忘记你的认证信息,你必须删除相关的文件。
在将数据导入到仓库之前,你必须先想好如何组织存放你的数据。如果你使用一种我们推荐的规划方式,你将在以后的使用中感觉到很舒服。
我们这里有很多种标准的推荐仓库组织形式。大多数人会创建一个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
如果多个项目之间的关系不是很紧密,并且他们都是被单独取出的,那根据项目来规划会比较有意义些。
对不相干的项目来说,你可以使用多个不同的仓库。当你提交一个改动,版本号会是整个仓库的版本号,而不是项目的版本号。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)直接在仓库中创建新目录。
在把你的项目导入到仓库之前,下面的工作必须做好:
1. 把项目中不需要的文件删除。(临时文件、编译器创建的文件,比如*.obj、2进制文件等。)
2. 把目录和子目录中的所有文件整理一遍。虽然你可以在导入之后再来进行重命名或删除等操作,但是还是推荐你在导入之前把你的项目整理好。
现在,在资源管理器(windows explorer)中选择项目的根目录,单击鼠标右键,选择Import…命令,跳出一个对话框:
图3:导入对话框
在这个对话框中你需要填写你要将项目导入仓库的URL地址。那个Important Message是用来记录日志信息的。
当你按下OK按钮,TortoiseSVN就开始把整个目录树包括所有文件导入到仓库了。和前面讲到的一样,这个目录的名字不会出现在仓库中,只有目录中的内容会出现。现在,你的这个项目就处于版本控制之下了。请注意,你刚才导入的这个目录(在你本地硬盘上的这个)并没有处于版本控制下!要获取一份处于版本控制之下的工作副本,你需要对刚导入的版本做一次取出(Checkout)操作。
有时候你需要版本控制一个存储着用户个性信息的文件。也就是说这个文件每个开发者或用户都会去修改以适应他本地的设置。但每个用户在进行提交(commit)操作时都会把这个文件的修改提交给仓库,这就使得版本控制这样一个文件很困难。
在这种境况下,建议使用模版文件。你可以创建一个包含开发人员需要的所有数据的文件,把它添加到版本控制之下,然后让开发人员取出这份文件。接下来,每个开发人员就可以给这个文件做个备份,然后给他改个名字。这样操作之后,不管怎么修改这个备份都不再是什么问题了。
例如,你可以看看TortoiseSVN的脚本文件,那是一个叫做TortoiseVars.bat的文件。它不在用户创建的版本库中,而只有一个叫做TortoeseVars.tmpl的文件。TortoiseVars.tmpl是一个模板文件,通过它每个开发用户可以创建一个工作拷贝,并且可对于TortoiseVars.bat重命名那个文件。在文件中,我们可以增加一些内容,用户可以通过查看这些内容来知道哪一行他们编辑或修改过。
所以,为了不使用户麻烦,我们也把TortoiseVars.bat这个文件增加进了父文件夹的忽略列表中。并且设置了Subversion的属性svn:不包括那个文件。通过这样,不必让用户在每次提交中都显示未知的版本名称。
有时候,为了构建一个工作拷贝,需要经常大量的使用不同的检出。例如,你可能需要不同的补充指南来自一个版本库的不同位置或者来自不同的版本库。 如果你希望每个用户都使用同一个层,那么你能定义svn :外部属性。
如果你要从/Project1检出一个工作拷贝到D:/dev/Project1。选择D:/dev/Project1文件夹,右键鼠标并选中菜单中的属性,出现属性对话框,选择subversion选项。在这里,你可以设置属性,从组合框中选择svn的外部属性,并且在编辑框中输入重定位的URL。例如:subversion http://svn.collab.net/repos/svn/trunk, 这时,单击设置并且提交修改。
为了获取一个工作副本,你必须从仓库中做一次取出(checkout)操作。
在资源管理器中选择一个你想要存放工作副本的目录。单击鼠标右键跳出菜单,选择命令Checkout…,再跳出一个窗口:
图4:检出对话框
如果你输入一个不存在的目录名,那这个目录会自动创建。
重要信息:
你只能取出到一个空目录。假如你想要取出到先前导入的原始目录,Subversion会抛出一个错误。你必须取出到另外的一个目录或者先把原始目录删掉。强烈建议您仅取出trunk部分。假如你坚持要取出父目录,那你有可能就会把你的硬盘塞满,因为你将得到整个仓库的数据(包括项目的每一个branch和tag)。
导出Exporting
有时候你也许需要一份没有那些.svn目录的工作副本,比如要建一个源代码zip压缩包。TortoiseSVN提供一个导出命令 Export…,可以免除我们自己动手来操作(做一个副本,然后手动删除所有.svn目录)。如果你在工作副本中执行这个命令,你可以选择一个目录用来存放没有.svn目录的干净工作副本。同样,你也可以指定是导出所有文件还是那些被版本控制的文件。
导出的另一种方法是,用鼠标右键拖拽一个工作目录到其他地方,然后选择Subversion export here 或者 Subversion export all here。
当你在你的工作副本中工作的时候,你经常会需要知道哪些文件被修改过,哪些被增加,哪些被重命名,或者哪些文件是其他人修改和提交的。
图5:图标的重载
在从仓库中取出工作副本之后,你会发现资源管理器中文件的图标发生了变化。这就是TortoiseSVN受欢迎的一个原因。TortoiseSVN为每个文件图标在原来的基础上增加了一个叫做覆盖图标的东东。覆盖图标根据Subversion状态的不同而显示不同的图标。
u 绿色图标表示这是一个最新取出的工作副本,他的Subversion状态是normal。
u 当你开始编辑一个文件,这个文件的状态就会变成modified,图标也会变成红色圆圈带一个感叹号。这样你就可以轻易的知道自从上次更新以来都有修改过哪些文件,需要提交哪些文件。
u 这个黄色三角符号带感叹号,表示在一次update中产生了一个冲突(conflict)。
u 蓝色加号意味着这个文件或文件夹已经被计划加入到版本控制之下。
u 红叉叉表示相应文件或文件夹被计划删除(deleted),或者表示文件缺失。
文件夹也有这样的覆盖图标显示。默认情况下只会显示文件夹自己的状态。但你也可以在设置中做一些设置,让文件夹的图标递归显示。但这会导致覆盖图标显示缓慢,因此在不太好的机器上或工作副本太大我们都不推荐这样。
在这样设置之后,每个文件夹都会显示为他下面所有文件的状态,优先显示顺序为冲突>修改>正常。这样你就可以轻松的看到一个文件夹是否有冲突或者修改过了。
和重载图标一样有用(或更有用)的信息可以显示在浏览器详细资料视图方式时的附加栏中。简单地用鼠标右键单击在其中一列的标题,从菜单中选择更多将会显示。 一个对话框将出现在你能指定列和他们的顺序的地方,在“细节观察”中被显示出来。 往下移动,直到开始看见svn。 检查您希望显示的那个并且结束对话通过按OK。
图6:检查修改
清楚地知道自己修改了哪些文件以及别人修改提交了哪些文件是很有用的。这就是命令Check For Modifications用的着的地方了。这个对话框显示出你的工作副本中修改过的每一个文件,没有在版本控制下的文件也会被显示出来。点击Check Repository按钮,可以检查仓库中的改动。在做update之前,你可以这么做一下,来检查是否有冲突的可能。
在其中选择文件或文件夹单击鼠标右键,在菜单中我们可以选择查看文件的差别,或者把本地的修改取消。TortoiseSVN会从仓库中自动下载最新的版本来进行比较。
我们经常会想要在文件里面查看哪些地方修改了。你可以先选择已经修改的文件,单击鼠标右键,选择TortoiseSVN的命令Diff。然后会打开一个比较查看器,它会对本地的文件和仓库中最新版本的内容进行详细的对比。
技巧Tip 不在工作目录中,或者你有多个版本的文件在一起的时候,你也可以使用比较功能: 在资源管理器中选中你要进行比较的两个文件(使用Ctrl键和鼠标),然后选择TortoiseSVN的菜单命令Diff。最后被点选的文件(焦点所在的那个,也就被虚线矩形框住的那个)将被认为是被修改过的那个。 |
图7:已完成更新的对话框
有时候你想要把别人做的修改融合到自己的本地副本当中。这个把改动从服务器拿到本地的过程就是我们已经知道的updating。Updating操作可以针对一个文件,或几个被选择的文件,或某个目录中的所有文件。选择你想要进行update操作的文件和(或)文件夹,单击鼠标右键,在菜单中选择Update。这时会跳出一个窗口显示正在update的进程。别人做的修改会合并到你的文件中,而你所做的修改会被保留。Update操作对仓库是不会产生任何影响的。
进程对话框用不同颜色的文字来表示不同的update动作。
蓝色
加入到你的工作副本中的新条目。
深红
从你的副本中删除的条目。
绿色
成功将改动合并到本地的条目。
亮红
合并改动到本地,但是有冲突需要解决。
黑色
所有其它的。
如果你在更新中产生了冲突(当你和别人同时修改了同一个文件的同一行并且改动的不同会发生这种情况),对话框中会用红色文字显示出冲突。双击对应的行就可以启动外挂程序来解决冲突。
TortoiseSVN 同时也允许你更新工作副本到一个特定的版本,并不仅仅是最新的版本。这个命令就是Update to Revision…,他会跳出一个对话框来让你输入你需要的版本。
有时候,你从仓库更新文件时会发生一些冲突。当两个或更多开发人员对同一个文件的某几行做了修改,就会产生冲突。因为Subversion对你的项目一无所知,他会把冲突留给开发人员来解决。只要冲突产生了,你就应该打开有问题的文件,然后找到以“<<<<<<<”开头的那几行,有冲突的区域会被下面这样标示:
<<<<<<< filename
your changes
=======
code merged from repository
>>>>>>> revision
另外,对每一个有冲突的文件,Subversion都会在你的目录中放三个另外的文件:
filename.ext.mine
这个文件是更新工作副本之前,冲突文件在你的工作副本中原来的样子。其中没有任何冲突标记。
filename.ext.rOLDREV
这个文件是版本号为OLDREV时的文件。也就是你做修改之前最后一次取出的文件。
filename.ext.rNEWREV
这是你更新时Subversion客户端从服务器收到的最新版本的文件。他是仓库的最新版本。
你可以在菜单中选择Edit Conflict来打开一个合并工具或冲突编辑器,或者用其他编辑器来解决这个冲突。你必须决定这些代码到底该是什么样子,做一些必要的修改,然后保存文件。
然后选择菜单中的Resolved命令执行,接着提交修改到仓库。请注意,命令Resolved并没有真正的解决冲突,它只不过是把filename.ext.mine 和 filename.ext.r*删除,并允许你提交修改而已。
发送你对工作副本的修改就是提交修改。在提交之前,你应该确认你的工作副本是最新的。你可以直接作一次Update操作,或者先Check for Modifications看看在本地或在服务器上哪些文件修改过。
如果你的副本是最新的,并且没有冲突,你就可以提交你的修改了。选中你想要提交的任意文件或文件夹,然后选择在菜单中选择Commit…。
图8:提交对话框
提交对话框会显示每一个有修改的文件,包括新增的,删除的,还有没有版本控制的。如果你不想提交某个有修改的文件,只要不勾选那个文件就好了。如果你要提交某个没有做版本控制的文件,只要勾选它就可以提交了。
提交文件还是文件夹? 当你提交文件时,提交对话框只显示你所提中的文件。当你提交文件夹中,提交对话框将自动选择有改动的文件。如果你忘记了你建立的一个新文件,提交文件夹将使你可以找到它。提交一个文件夹并不意味着每个文件都被标识为修改过的,它仅仅是通过帮你多做些事从而让你的生活更滋润一点。
|
如果你修改的文件是使用了svn:externals从别的版本库中包含进来的,那么这些改动不会被自动提交。在文件列表下方的警告符号会告诉你是否出现了这种状况,工具提示(tooltip)提示了外部文件必须要分开提交。
在提交对话框中双击一个有修改的文件,可以启动外挂的比较工具来显示修改细节。
在按下OK按钮之后,会出来一个显示提交进程的对话框。
图9:提交进度对话框
这个显示进程的窗口中采用了不同颜色的文字来表示不同的提交动作。
蓝色Blue
提交一个修改的或新的条目。
深红Dark red
提交一个删除或覆盖操作。
黑色Black
其它所有条目。
对于每次进行修改和提交,你应该有针对性地留下日志信息。这样,你就可以在以后方便地看到你都做了什么,为什么这么做。当然这么做还是你拥有了开发过程的详细日志。
版本日志对话框可以获取所有的日志信息,并将其显示出来。对话框的视图分成3个面板。
1. 最上方的面板显示了版本的列表。这其中包含了日期和时间,以及提交的用户和日志信息开头的部分内容。
2. 以蓝色显示的行表示某些内容被复制到该开发版本中(可能是从一个分支中复制而来)。
3. 中间的面板显示了被选中的版本的完整的日志信息。
4. 最下面的面板显示了被选中版本中都对哪里文件和文件夹进行了修改。
当然,对话框的作用不止于此——它提供了右键菜单,通过它可以获取更多的项目历史信息。
图10:日志对话框
有几种途径可以调出日志对话框:
1. 从右键菜单的TortoiseSVN子菜单中调用
2. 从属性页中调用
3. 在更新结束后,从进度对话框中调用。在这里,日志对话框只显示你上一次更新以来的版本变化。
有时你想得到一个文件或文件夹更细节的,比覆盖图标更多的信息。你可以在浏览器属性对话框中得到Subversion提供的所有信息。选择文件或文件夹,然后在菜单中选择属性(注意:这个属性是资源管理器提供的那个菜单中的属性,不在TortoiseSVN子菜单里面)。在属性对话框中TortoiseSVN为在Subversion控制下的文件或文件夹加入了一个新的属性页。
在Subversion的属性页,你可以看到选中文件或文件夹所有的相关信息。另外你还可以读到或设置它的subversion属性。你可以加入你自己的属性,或者一些在subversion中有特殊含义的属性。那些以svn:和svn:externals就是这样的属性。
要设置一个属性,先在下拉框选择需要的属性名,然后在下方的输入框中键入值。那些有多个值得属性,比如忽略列表,可以分成多行来输入。单击Set按钮来添加属性到列表中。
如果你要应用一个属性到一个目录下的每一个文件和目录,注意选中Recursive复选框。
如果你要修改一个已存在的属性,先在列表中选中他,然后就可以修改了。
同样,要删除一个已存在的属性,可以先在列表中选中他,再单击Remove按钮。
TortoiseSVN也有一些自己的特殊属性,他们以tsvn:打头:
● tsvn:minlogmsgsize设置了提交时日志的最小长度。如果你没有输入指定长度的信息,是不能提交的。这个功能对你在每一次做提交操作时提醒你写一些合适的描述信息是很有用的。如果这个属性没有设置,或者他的值为0,那表示不填日志信息也可以。
● tsvn:logwidthmarker用在需要有一定格式日志信息的项目中,日志信息每行的宽度有限制(常见的是80个字符)。设置这个属性为一个非零值,将导致2个现象:出现一个灰色线条指示最宽的宽度,还有,自动换行没有了。这样你就能看到自己的文字是不是写的太长了。注意:这个功能只有在给日志显示选择了固定宽度字体时才能正常工作。
● tsvn:logtemplate用在一些有日志格式规范的项目中。这个属性包含多行的文本,当进行一个commit操作时,这些文本就会自动插入到提交信息窗口中。接下来,你就可以在其中再加入必要的信息。注意:如果你还使用了tsvn:minlogmsgsize属性,那一定要保证设置的长度比模板中的长,否则你将失去这个保护机制。(Note: if you are also using tsvn:minlogmsgsize, be sure to set the length longer than the template or you will lose the protection mechanism.)
● 在提交对话框中,你可以把有改动的文件列表粘贴进来,包括每个文件的状态(added,modified,等)。tsvn:logfilelistenglish定义了显示的文件状态文字是英文还是本地语言。如果这个属性没有设置,默认为true。
● TortoiseSVN可以使用拼写检查模块,就像OpenOffice和Mozilla使用的。如果你安装了这些东东,这个属性可以决定使用哪个拼写检查模块,比如你的项目的日志信息应该用哪种语言来写。tsvn:projectlanguage设置了日志信息中拼写检查器要使用的语言模块。在这里可以找到你的语言要使用的值:MSDN: Language Identifiers。
某些tsvn:属性需要一个true或者false的值。另外,TSVN会懂得把yes当作true,把no当作false。
在软件开发中,修改依赖于一个bug或问题编号是很常见的。bug跟踪系统的用户(问题跟踪者)喜欢在问题跟踪中将Subversion的修改与一个指定编号联系起来。因此很多问题跟踪者提供了一个预提交钩子脚本,分析日志,查找提交相关的bug编号。这稍微有些不可靠,因为它依赖于用户写完全的日志,预提交钩子才能正确分析。
TortoiseSVN可以在两个方面帮助用户:
1. 当用户输入日志信息时,一个定义良好,包含问题编号,与此提交相关的的行,会自动增加。这样减少了用户输入的问题编号不能比bug跟踪系统正确分析的风险。或者TortoiseSVN高亮显示日志消息中能被问题跟踪者识别的部分。这样,用户就知道日志消息能被正确解析。
2. 当用户浏览日志信息,TortoiseSVN在日志信息中创建指向每个bug标示的链接,它可以用浏览器打开。
你可以在TortoiseSVN中集成bug跟踪工具。为了使用这个特性,你要定义一些以bugtraq:
开始的属性,它们只能在文件夹上设置:
有两个方法集成TortoiseSVN 和问题跟踪。一个基于简单字符串,另一个基于正则表达式。它们的用法是:
bugtraq:url
将这个属性设置为你的bug跟踪工具的地址。它必须编码并且包含%BUGID%。%BUGID%用你输入的问题编号替换。它允许TortoiseSVN 在日志对话框中显示链接,于是你可以在察看版本日志时直接进入bug跟踪工具。你可以不提供这个属性,但是这样TortoiseSVN就不能显示链接了,只能显示问题编号。例如TortoiseSVN 使用http://issues.tortoisesvn.net/?do=details&id=%BUGID%。
bugtraq:warnifnoissue
如果你想TortoiseSVN给出空问题编号的警告,就设置为 真。有效取值是 真/假。如果没有定义,那么假定为假。
在最简单的方法里,TortoiseSVN为用户显示了一个单独的bug ID输入字段,然后后面预计会追加一个用户输入日志信息的行。
bugtraq:message
这个属性将问题追踪系统激活为输入框模式。如果设置了这个属性,在拟提交时,TortoiseSVN会提示你输入问题单号码。它通常会在日志信息后面添加一行。必须包含%BUGID%,在提交时会被替换为问题单号。这确保了你的提交日志包含了问题单号,保证了单号可以被问题追踪工具解析,从而与提交关联。例如TortoiseSVN项目使用Issue : %BUGID%,但是这依赖于你的工具。
bugtraq:append
这个属性定义了bug-ID。是追加到(true)日志信息的末尾,还是插入到(false)日志信息的开始。有效的值包括true/false,如果没有定义,默认是true ,所以现存的项目不会被打破。
bugtraq:label
是TortoiseSVN的提交对话框中用来输入问题单号码的输入项,如果没有设置,将会显示Bug-ID / Issue-Nr:,要记住窗口不会为适应标签而改变大小,所以请保持标签的小于20-25个字符。
bugtraq:number
如果设置为true,问题单号文本框只能输入数字,一个例外是逗号,所以你可以使用逗号分割输入的多个号码。合法的值包括true/false, 如果没有设置,默认是true。
在使用正则表达式的方法中,TortoiseSVN不会显示一个单独的输入框,而是标记用户输入的日志信息,认为这些标志可以被问题追踪工具识别。这是在用户编写日志信息的时候完成的,这也意味着bug ID可以出现在日志信息的任何位置!这种方法非常灵活,也是TortoiseSVN项目本身使用的方法。
如果同时设置了bugtraq:message和bugtraq:logregex属性,日志正则表达式会优先使用。
|
问题追踪集成并没有限制在TortoiseSVN,可以用于所有的Subversion客户端。
图11:未受版本控制的文件之资源管理器上下文菜单
如果在你的开发过程中你创建了新的文件或目录,那么你需要把他们加入你的版本控制中。选择那个文件或目录并使用TortoiseSVN → 添加(Add)。
当你添加了指定的文件/目录到版本控制系统之后,这个文件上会出现一个added标志,这意味着你得先提交你的工作副本使该文件/目录对其他开发者来说成为有效的。添加一个文件/目录不会not影响版本库。
更多 |
你也可以在已经版本化的目录上使用Add命令。那样的话,添加对话框会显示该版本化目录下所有未版本化的文件。如果你有许多新文件需要一起添加的话,这是很有帮助的。 |
你可以使用鼠标拖拽的方式从你的工作副本外部添加进文件。
1. 选择你要添加的文件
2. 拖拽(right-drag)他们到新的工作副本下,松开鼠标右键。
3. 选择上下文菜单 → SVN 增加文件到工作副本。这些文件会被复制到工作副本,加入版本控制。
图11:未受版本控制的文件之资源管理器上下文菜单
在很多项目中,有一些文件或目录是不应该被版本控制影响到的。包括那些编译器产生的*.obj, *.lst,还有一些存放可执行文件的输出目录。当提交修改时,TSVN就会把没有版本控制的文件列出来,占满了提交窗口的文件列表。当然你可以选择不显示他们,但这样可能会把一些需要添加的新加入的源代码文件漏掉。
避免这个问题的最好办法就是把这些文件加入项目的忽略列表。这样他们就不会再在提交窗口中出现了,而真正没有版本控制的源文件还是会被标记显示出来。
在没有版本控制的一个文件上单击鼠标右键,然后在TSVN的菜单中选择Ignore命令,这时会有一个子菜单出现,可以让你选择仅仅是这个文件,或者所有这个扩展名的文件。如果你最开始选中的是多个文件,那就不会有这个子菜单出现,而只能选择把这些选中的文件或目录加入忽略列表。
要把一个文件从忽略列表中去掉,必须编辑父目录的属性,把文件名从svn:ignore属性中移除。
全局忽略列表 |
另一个忽略文件的方法是添加这些文件到global ignore list .他们最大的不同是全局忽略列表是一个客户端特性。它会作用到 所有的(all)subversion 项目。但只能在pc客户端使用。在全局尽可能更好的使用svn:ignore特性,因为他能够应用到特殊的项目区域,并却他作用于所有检出该项目的人。 |
和CVS不一样,Subversion允许对文件和目录进行改名和移动操作。因此在TortoiseSVN的子菜单中有删除和重命名。
图12:版本控制文件的菜单浏览
如果使用TSVN删除了一个文件或目录,这个文件就已经从工作副本中删除了,并被标记为删除状态。这个文件的父目录将显示为一个“deleted”覆盖图标。要恢复这个文件,只需对他的父目录进行revert操作即可。
如果要在工作副本内移动文件,可以使用鼠标来拖拽:
1. 选中要移动的文件或目录。
2. 用鼠标右键拖拽他们到工作副本中一个新的目录。
3. 松开鼠标右键。
4. 在跳出的菜单中选择move files in Subversion to here。
如果一个删除操作不是在版本控制下完成的,比如就像平常删除文件那样删除的。提交时,对话框窗口还是会显示这些删除的文件,并让你把他们从版本控制下删除。所以如果忘记使用TortoiseSVN来删除这些文件,这些都不是什么大不了的问题。
提交父目录 |
既然重命名和移动都可以像添加之后又删除一样被执行,你必需提交该重命名/移动文件的父目录,所以重命名/移动的删除部分将出现在提交对话框中。如果你不提交重命名/移动的已删除部分,他将保留在仓库中并且你的同组人将更新该未移除的旧文件。例如,他们将有两个一老一新的副本。 你必须在重命名目录后而在更改目录下的任何文件前进行提交,不然你的工作副本就回真的混淆。 |
找回已删除的文件或目录 |
如果你删除了洋文件或目录并已经提交该删除操作到版本库,那么 一个常规的TortoiseSVN → Revert已不能再将其找回。但是该文件或目录并没有完全丢失。如果你知道该被删除文件或目录的版本(如果不能,使用日志对话框来查找出来),打开数据仓库的浏览器,并选择那个版本。然后选择你删除的文件或目录,右键并选择Context Menu → Copy to...作为目标执行复制操作,然后选择你的工作副本的路径。 |
如果要取消对一个文件所做的修改,只需用鼠标右键单击该文件,选择TSVN子菜单中的revert命令,在跳出的窗口中会显示你选择的文件,这时可以再次勾选文件,然后按下OK按钮就好了。注意这里所做的取消修改只能返回到该文件上次更新时的状态。
图13:恢复对话框
取消已经提交的改变 |
Revert仅能撤消你本地的变更。他不能撤消已经提交的的变更。如果你想撤消所有的包括已经提交到一个特定版本的变更。 |
每一次修改和提交,都应该做好日志记录。这样开发过程中就有了一个详细的记录,以后便可找出每一个修改是如何修改以及为什么这样修改的。
日志对话框会显示所有日志信息。显示分成3个部分:
1.最上面部分显示的是所有被提交的版本列表。显示有日期时间、提交者、修订版本号和日志信息的前面一部分。
用蓝色显示的行表示有某些文件被复制到了这个版本。
2.中间部分显示的是选中版本的所有日志信息。
3.底部显示的是选中版本所做修改的文件和目录列表。
还不仅仅是这些,对话框中还提供了很多的菜单命令可以使用。
图14:调用日志窗口
有很多个地方可以调出这个日志窗口:
1. 从TortoiseSVN的菜单。
2. 从文件的属性页。
3. 完成update操作之后的窗口。这个窗口将只显示自上次更新以来有过的版本。
图15:版本日志对话框的顶部面板的右键菜单
顶部窗格中的右键菜单功能如下:
1.Compare with working copy 对选中版本与本地副本进行比较。默认的比较工具是TSVN提供的TortoiseMerge。如果是某个目录的日志,就会显示有改动文件的列表,接下来可以选择单个文件进行改动查看。
2.Show Differences as Unified Diff 在一个文件里面显示所有的改动。这个操作比上面那个调用外部的比较查看器要快多了,因为TSVN只需要拿到不同,而不再需要获取所有的文件。
3.保存选中版本为一个文件,这样就可以得到这个文件的一个老版本了。这个选项只有当你选中的版本中只有一个文件被改动时才有效。
4.Browse Repository打开仓库浏览器,检查选中的目录。这个选项只有当日志只有一个目录时才有效。
5.Create tag from Revision 从选中版本创建branch或tag。这个功能很有用的。比如当你忘记创建一个tag而已经提交了一些改动,但这些改动你又不想包含到那个版本中去时。
6.更新工作副本到选中版本。当想把工作副本回复到以前的某个状态,这个选项是很有用的。最好是更新整个目录而不是只更新一个文件,否则你的工作副本就会不一致,而且你也将没办法提交任何改动。
7.恢复改动到选中版本。这个操作对仓库没有一点影响,只会在本地副本中进行改动的恢复。注意,它只取消那个版本的所有改动,没有用老版本的整个文件来替换你的副本。这在要取消一个以前的改动时很有用。
8.检索日志信息。这个功能可以在输入的日志信息和Subversion创建的动作摘要中进行查找。注意:大小写是不敏感的。
图16:顶部窗格中选中2个文件时的菜单
如果你一次选中两个版本,菜单就会只剩下三个选项了:
1.用可视化工具来比较选中的2个版本。默认的比较工具是TSVN提供的TMerge。这个功能只对文件有效,对目录没用。
2.在一个文件中显示这2个版本的不同点。这个对文件和目录都有效。
3.检索日志信息。和前面讲到的一样。
图17:日志对话框的底部面板的右键菜单
底部窗格菜单的作用如下:
1.查看选中文件在那个版本中所作的改动。这个菜单只有当文件为Modified时才有效。
2.保存选中文件的相关版本。
3.查看选中条目的Subversion属性。
日志窗口一般不会显示所有的日志的:
1.对一个大型仓库来说,显示成千上万的改动需要花太多时间。正常情况下,开发人员只关注最近的修改。默认情况,最多会显示100条日志。你也可以在Settings中修改这个值(见第4.21节,“TortoiseSVN的设置”)。
2.当查看一个branch或者tag的日志时,只会显示创建这个特定branch的目录到根的日志。这样的好处是不会显示多余的其他无关的日志信息。
注意这只对本地副本有效。如果使用仓库浏览器,日志信息会从分支的地方继续显示更多。
如果想得到所有日志,先回到版本1,再按Get All。
有时候需要修改早先输入的日志,因为各种各样的原因,比如一个拼写错误,或者要改进一些说法等等。另外还有可能需要修改提交修改的作者,比如由于忘记设置认证等等原因。
Subversion允许任意的修改日志内容或版本作者。但这个功能默认是关闭的,因为这些修改是不能取消的(这些修改没有在版本控制之下)。要让这个功能起作用,必须先设置好pre-revprop-change hook。关于如何设置的细节请查阅Subversion的Hook Scripts一节。关于如何在Windows环境如何实现hooks请阅读第3.5节“Repository Hooks”。
为服务器配置好必需的hooks之后,就可以修改每个版本的作者和日志内容了。用TSVN修改的方法是,在先按住SHIFT键,再用鼠标双击需要修改的作者或日志栏。如果没有按住SHIFT键,或没有点击在这2个栏上,那默认的双击动作(显示选中版本的区别)就会被执行了。
警告 |
由于Subversion的版本属性不受版本控制,对于这种属性的修改(如 svn:log提交信息属性将永久覆盖该属性之前的值。 |
按下统计按钮(Statistics)会显示一些关于修订版本的有趣信息。显示的内容包括,有多少作者在工作,他们提交了多少内容,每周的进展,等等。
注意,这个统计页面数据的范围和前一个界面里日志的范围是一样的。所以如果只是一个版本的日志,那这里的统计信息就不会有太大的意义了。
版本控制的一个重要特性是能将变更隔离成独立的开发线路。这就是所谓的分支(branch)。分支常用来测试新功能,但又不会因为编译错误或BUG干扰开发主线。一旦分支稳定下来,就可以把分支合并(merge)回主线(the trunk)了。
版本控制的另一个特性是标记特殊版本(比如一个可以发布的版本),这样有利于在任何时候重新创建一个特定的build或开发环境。这就是所谓的标记(tagging)。
Subversion没有什么专门的命令来branching或者tagging,而使用cheap copies来代替。Cheap copies有点像links(译者注:就像windows系统的快捷方式),并没有真正的进行复制操作。
在从副本创建分支或标记前,最好先确保本地与仓库的版本一致。
如果你是按先前的推荐组织方式存放仓库的,那创建分支或标记会非常简单:
图18:分支/标记对话框
在你当前的工作拷贝中给你你想要拷贝的分支或标记选择一个目录,然后选择命令TortoiseSVN → 分支/标记...。
默认的目标URL将会是你当前工作拷贝所处的源URL。你必须给你的分支/标记编辑一个新路径。来取代
http://svn.collab.net/repos/ProjectName/trunk
你可以使用这样的设置
http://svn.collab.net/repos/ProjectName/tags/Release_1.10
如果你忘记了你上一次使用的命名约定,可以用鼠标右键打开版本库浏览器来察看已经存在的版本库结构。
现在你必须选择要拷贝的源位置。在这里你有三个设置选项:
1.版本库中的最新版本
新分支直接从仓库中的最新版本里拷贝出来。不需要从你的工作副本中传输任何数据,这个分支的建立是非常快的。
2.在版本库中指定具体的版本
在仓库中直接拷贝建立一个新分支同时你也可以选择一个旧版本。假如在你上周发布了项目时忘记了做标记,这将非常有用。如果你记不起来版本号,通过点击鼠标右键来显示版本日志,同时从这里选取版本号。和上次一样不需要从你的工作副本中传输任何数据,这个分支建立起来是非常快的。
3.工作副本
新的分支是一个完全等同于你的本地工作副本的一个拷贝。如果你更新了一些文件到你的工作副本的某个旧版本里,或者你在本地做出了修改,这些改变将准确无误的进入拷贝中。自然而然地这种综合的标记会包含正在从工作副本传输到版本库的数据,如果这些数据还不存在的话。
如果你想把你的工作副本自动切换到最新创建的分支,使用转换工作拷贝至新分支/标记 选择框.但是如果你打算这么做,首先要确认你的工作副本没有被修改。如果有修改的话,当你转换后这些修改将会混合进你的工作副本分支里。
按下确认提交新副本到版本库中。别忘了提供一条日志信息。需要注意的是这个副本是在版本库内部创建的。
需要注意建立一个分支或标记不会影响你的工作副本。即使你拷贝了你的工作副本,这些修改也会提交到新分支里,而不是到主干里,所以你的工作拷贝可能仍然标记为已修改状态。
这是(不是真的)个问题。由于checkout会取出所有的数据,而switch只会传输修改的内容。
为了能够得到最新的副本进行工作,你可以:
1.再次执行checkout。你可以任意次的取出副本到本地的任意地方。
2.转换当前副本到新创建的仓库。只需再对项目的父目录执行Switch命令。
在下一个窗口输入刚才创建的branch地址。选择Head version。点击OK。本地副本就切换到新branch或tag了。
转换就像更新一样,不会丢掉本地的任何修改,而是将未提交修改合并。如果不想这样,那就在转换(switch)之前进行提交(commit)操作,或恢复(revert)副本到某个已提交版本(一般都选head版本)。
图19: 切换对话框
Subversion是不明白tags与branches的不同的。下面列出几点区别:
1.标记用于创建项目在一个特殊阶段的静态快照,通常不再用于开发,而分支是用于开发的。这就是先前推荐使用/trunk /branches /tags结构的理由。当然你也可以修改/tags/中的副本,但提交时TortoiseSVN会有警告。
2.如果一个已经标记过的还发布了的版本,还要进行修改,正确的方法是创建一个新的分支,在新分支上做修改,再根据这个分支创建新标记。比如Version_ 1.0.1 。
3.如果在副本上修改并提交,则修改只体现在分支上而不是主干上。
这个方法覆盖了你已经在分支(或者最新版本)上做出了一个或多个修改,并且你想将这些修改应用到不同分支的情况。
图20:合并对话框
为了合并版本,你需要进入接收修改的分支的工作副本,经常是trunk。选择右键菜单TortoiseSVN → 合并。
1.在从:域输入文件夹在分支或标记中的完整URL,它包含了你想应用到工作副本的修改。你也可以点击...浏览版本库,找到渴望的分支。如果你以前已经从这个分支合并过,可以直接从包含历史的下拉列表选择以前使用的URL。
2.因为你要将同一分支的版本范围合并到工作副本,所以要确保使用 "从:" URL 检查框选中。
3.在从版本域输入开始版本号。它是在你要执行合并的修改之前的版本号。切记为了合并,Subversion将会创建一个差异,所以开始点务必准确。 例如,你的日志象这样:
版本 注释
39. Working on MyBranch
38. Working on trunk
37. Working on MyBranch
36. Create branch MyBranch
35. Working on trunk
34. Working on trunk
如果你要将 MyBranch 的修改合并到 trunk,应该选择36作为开始版本,而不是象你想的是37。如果你选择37作为开始点,那么差异引擎将会比较结束点与版本37比较,这就丢失了版本37做的修改。如果这听起来很复杂,不要担心,在TortoiseSVN中有更简单的方法 ...
选择版本范围最简单的方法是,点击显示日志,列出最近的修改和日志。如果你要合并单个版本的修改,直接选取那个版本。如果你要合并多个版本,就选择范围(使用通常的Shift-键)。点击确认,就会为你填写合并对话框的全部域,开始版本和结束版本。
当选择了检查框 使用 "开始:" URL,只有按钮显示日志可用。这是因为显示日志对话框设置了全部开始:和结束:版本。所以你只用上面说的多项选择方法即可。
如果你已经从这个分支合并了一些修改,希望你在提交日志中注明最后一个合并的版本号。这时,你可以在工作服本上使用显示日志对话框跟踪日志。使用最后合并的版本号作为本次合并的开始版本。例如,你已经合并了版本37到39,那么本次合并你应该从版本39开始。
4.如果你没有使用显示日志对话框显示版本范围,那么你需要手工设置结束版本。在范围中输入你想合并的最后一个版本号。这经常是最新版本,尽管它不必是 - 你只想合并单个版本。
如果其他用户可能提交,那么要小心使用最新版本。如果有人在你最近更新之后提交了,它指代的版本可能就不是你想的那样了。
5.点击合并按钮完成合并。
现在合并结束。察看合并,看看它是否如预期那样工作,是个好想法。合并通常很复杂,如果分支与最新版本差别很大,合并经常会出现冲突。
当你已经测试了修改,准备提交时,日志信息应当总是包含这次合并的版本信息。如果你以后需要执行合并,就需要知道已经合并了什么,因为你不想多次合并同一修改。不幸的是,合并信息不会存储在Subversion版本库中。
分支管理很重要。如果你要保持这个分支与最新版本同步,你应当经常合并,这样分支和最新版本的差别就不会太大。当然,你仍旧应该遵循上面的说明,避免重复合并修改。
这个用例覆盖了这种情况,当你象Subversion手册里讨论的那样,创建了一个新特性分支。所有最新版本的修改都要每周一次合并到新特性分支,等新特性完成后,你向将它合并到最新版本。因为你已经保持了新特性分支和最新版本同步,所以除了你在分支做的修改,其它部分在分支和最新版本应该是相同的。于是在这种情况下,你应当用比较分支和最新版本的方法来合并。
为了将新特性从分支合并到最新版本,你需要进入最新版本的工作副本。在右键菜单选择 TortoiseSVN → 合并...
1.在开始:域输入trunk文件夹的全路径。这听起来好象是错误的,但是切记 trunk 是你想增加分支修改的开始点。也可以点击 ...浏览版本库。
2.因为你在比较两个不同的树,确认没有选择使用 "开始:" 路径检查框。
3.在结束:域输入关注的分支中文件夹的全路径。
4.在开始版本和结束版本 域,输入两个树被同步的最后一个版本号。如果你确信没有其他人提交,两个都可是输入 HEAD。如果在同步时可能有人提交的话,使用清楚的版本号以便面丢失最新提交。
你也可以使用显示日志选择版本。注意这种情况下,你不能选择版本范围,所以此时你选择的版本会实际出现在版本域。
5.点击合并按钮完成合并。
这种情况下,因为新特性已经集成到最新版本,你不再需要这个新特性分支。新特性分支变成多余的,如果需要可以从版本库删除它。
如果谁都可以随便修改,项目将没完没了,永远没法稳定下来。怎么办呢?通过“补丁patch”!将补丁送交给具有写权限的开发团队,他们先审查补丁,再决定是否提交,或者打回给作者。
补丁文件只保存有副本与基础版本的差异。
首先你需要做出修改并测试这个修改的内容。然后在父目录上使用 → 代替 → 。
图21:创建补丁的对话框
现在你可以选择要包含在补丁中的文件了,就像你要做一个完整的提交一样。这样会产生一个单一的文件,该文件包括一份自从最后一次从仓库更新后你对所选择文件做的全部修改的摘要。
在这一对话框中,纵列和在 检查修改对话框中的纵列同样是可以定制的。你可以创建包含对不同文件集合修改的相互独立的补丁。当然如果你创建了一个补丁文件,对于同一份文件的更多修改会创建另外一个补丁文件,第二份补丁文 件包含了全部的修改。
你可以用一个自己选择的文件名来保存这个补丁文件,补丁文件可以有任意的扩展名,但是按人一般习惯,人们都是用.patch
或者.diff
作扩展名,你现在已经做好提交你的补丁文件的准备了。
当你对你的工作拷贝打补丁的时候,你应当在与创建补丁文件时相同的目录层次上。如果你不能确定在那个目录层次上,就看一下补丁文件的第一行。例如,如果补丁第一个要处理的文件是doc/source/english/chapter1.xml 并且补丁文件的第一行是Index: english/chapter1.xml说明你必须要对english目录应用这个补丁文件。尽管如此,倘若你在正确的工作拷贝上工作,如果你选择了一个错误的目录层次,TSVN会察觉到这个错误,并给出正确的建议。
为了给你的工作拷贝打补丁,你至少需要对代码库的读权限。因为合并程序必须要参考修订版本中其他开发人员做的修改。
从那个目录的上下文菜单,点击TortoiseSVN → 应用补丁... 系统会弹出一个打开文件的对话框,让你选择要应用的补丁文件。默认情况下只显示.patch或者.diff文件,但是你可以选择"所有文件"。
如果补丁文件以.patch 或者 .diff 为扩展名的话,你可以选择直接右键点击该补丁文件,选择TortoiseSVN → 应用补丁... 在这种情况下,系统会提示你输入工作拷贝的位置。
这两种方法只是提供了做同一件事的不同方式。第一种方法,你先选择工作拷贝,然后浏览补丁文件。第二种方法,你先选择补丁文件,然后浏览工作拷贝。
一旦你选定了补丁文件和工作拷贝的位置,TortoiseMerge就会把布丁文件合并到你的工作拷贝中。系统会弹出一个小窗口列出所有被更改了的文件。依次双击每一个文件,检查所做的改变,然后保存合并后的文件。远程开发者的补丁现在已经应用到了你的工作拷贝上,你需要提交它以使每一个人都可以从代码库访问到这些修改。
远程开发者的补丁现在已经应用到了你的工作拷贝上,你需要提交它以使每一个人都可以从代码库访问到这些修改。
图22:重定位对话框
如果你的版本库因为某些原因而重定位了(IP/URL).也许你不能进行操作,不能提交,不能从新的定位检出拷贝,也不能将修改的数据提交到新位置的版本库中,TortoiseSVN → 重新定位也许正是你需要的。它的做法很简单: 查找所有 .svn 文件的接口然后把URL值改为新的版本库地址。
警告 |
这是一个极少使用的操作.重定位只能 在版本库路径更改时使用。可能的原因是:
换种说法,如果你要重定位,只有当你的工作拷贝仍然还在同一个版本库中定位,但版本库本身已经没有了。 以下情况不支持:
如果你使用以上任意一种重定位方式,它将破坏你的工作拷贝,在你更新、提交等操作时会提示一些令人费解的错误信息。一旦发生这种情况,唯一的办法就是检出最新版本。 |
有时候我们需要在版本库中直接进行操作,而不是在工作拷贝中。这就是我们的版本库浏览器可以做到的。正如资源管理器和能浏览你的工作拷贝一样,版本库浏览器允许你浏览版本库的结构和状态。
图23:版本库浏览器
在版本库浏览器中你可以执行比如拷贝,转移,重命名、、、直接操作在版本库上。
在版本库浏览器窗口的顶端输入版本库的URL地址和你要浏览的版本号。浏览一个历史版本对一些操作比如覆盖以前删除的文件是很有用的。用右键菜单 → 拷贝到...输入你要覆盖的被删除文件的工作地址就能做到。
主浏览窗和其他任意目录树浏览器一样。你可以点击顶部的列表头来调整排列顺序。如果你右击文件 置前转换按数字顺序排序可以实现。这个要比无格式二进制处理数字排序要智能多了,对在队列中获得版本标签也很有用。这种默认状态在设置对话框中可以设置。
如果你选择两个版本,你可以以单一差异文件显示修改,或者可以使用自带的比较工具清晰地显示整个列表的差异。这个对比较两个日志信息的修改很适用。
如果你选择两个拥有相同历史的标签(特别是/主干/),你可以使用右键菜单 → 显示日志...来查看
你也可以在版本库浏览器中使用拖拽的操作。如果你把一个文件夹从资源管理器中拖拽到版本库浏览器中,那就实现该文件夹的导入功能。有一点要注意,在导入多个文件时,必须分开一个一个地拖进去。
如果要在版本库浏览器中移动一个文件,只用左键拖到它要去的位置。如果你更愿意去拷贝该文件的话,使用这个按住左键拖 。操作就像在资源管理器中一样,拷贝时指针“加” 来标记。
如果你要拷贝/移动一个文件或文件夹到一个新的位置并重命名,你可以右键拖 或者 按住右键拖这个文件,而不用左键拖。这样,就会显示对话框来为该文件或文件夹重命名。
无论什么时候对版本库的任意操作,都要求加入它的操作日志。这为你操作失误提供了返回的机会。
有时候当你访问一个路径时,会跳出一个错误信息。也许是不可用的URL,也许是你没有访问权限,或者其他的一些原因,如果你要把这些信息发送出去,只用点击它然后右键 → 复制错误信息到剪贴板,或者简单地用CTRL+C。
图24:设置对话框,常规设置页面
这个对话框允许你指定自己喜欢的语言,同时也可做那些与Subversion相关的特殊设置。
语言
选择你TSVN的用户界面语言。不然你还期望从这里得到啥别的?
每周自动检查新版本
如果检查过,TSVN将每周联系它的下载站点一次,来看看程序是否有个可用的新版本。若你想马上得到结果,使用 按钮。无论如何,新版本不会被自动下载,而只是你将收到一条提示信息对话框,告诉你有新版本可用。
系统声音
TSVN已经默认安装了三个自定义声音。
· 错误
· 提示
· 警告
你可以使用Windows控制面板中的声音属性,来选择不同的声音(或是把这些声音完全关掉)。 按钮是一个打开控制面板声音属性的快捷方式。
全局忽略样式
全局忽略样式被用来防止非版本控制的文件在例如提交时的对话框中被列出来。那些符合样式的文件,在执行导入操作时将同样被忽略掉。通过在样式框中输入文件名或扩展名来忽略文件或文件夹。不同的样式之间将以空格分隔,例如 */bin */obj *.bak *.~?? *.jar *.[Tt]mp
。例子中前两个条目表示文件夹,其他四个表示文件。这些样式将采用文件名模糊匹配的方式来匹配要忽略的文件。
小心 |
如果你象下面段落那样使用Subversion配置文件来设置一个 全局-忽略 样式,那么它将覆盖你在这里做的设置。该Subversion配置文件可以象下面段落描述的那样,通过 编辑 按钮来访问。 |
忽略样式将作用于你所有的项目工程。因为它是非版本控制的,所以它将不会对其他的用户起作用。相对而言,你也可以使用可版本控制的 svn:ignore
属性来把要忽略的文件或文件夹排斥在版本控制之外。阅读 第 5.11 节 “忽略文件和目录” 以获得更多信息。
将文件日期设置为“最后提交时间”
该选项通知TSVN在做检出或更新操作时,把文件日期设置为最后提交的时间。否则TSVN将使用当前日期。如果你在做软件开发的话,使用当前日期是总体上最好的选择,因为那些软件构建器通常通过查看时间戳来决定需要编译哪些文件。如果你使用了“最后提交时间”并把代码文件还原到了一个旧版本,你的工程可能就不会像你期望的那样被编译了。
Subversion配置文件
使用 按钮来直接编译Subversion配置文件。有些设置不能被TSVN直接修改,就需要在这里完成。值得注意的是,Subversion可以从许多不同的位置读取配置信息,因此你也就需要了解哪一个将优先起作用。
使用“_svn”目录替代“.svn”目录
在使用VS.NET环境做web工程时,将无法处理 .svn
文件夹,但Subversion是要用这些文件夹来储存自己的内部信息的。这可不是Subversion的bug,这bug是VS.NET和它使用的frontpage扩展带来的。若你想改变Subversion和TSVN的这些行为,就可以使用这个选项框来设置控制这些的环境变量。
你应该注意到:改变该选项将不会使已存在的工作拷贝中的管理文件夹从“_svn”自动转换到“.svn”。你需要使用一个脚本(查看我们的FAQ)来自行完成这项工作,或是简单地重新检出一个新的工作拷贝。
图25:设置对话框,外观与样式页面
该页面允许你指定:在TortoiseSVN的主上下文菜单中哪些条目可以直接在鼠标右键菜单显示,哪些在TortoiseSVN子菜单显示。默认情况下很多项未被勾选,只在子菜单显示。
获得锁会有一个特别的情况,你可以将其提升到顶级带但,但是大多数文件不需要锁定,这样做只是添加了混乱。然而,一个标记为svn:needs-lock属性的文件每次编辑前都需要那个操作,所以这个菜单会进入顶级菜单会比较方便。选定这个选项,会使设置svn:needs-lock属性的文件的Get Lock出现在顶级菜单中。
如果在你的工作拷贝下有大量的文件,那么你 右键点击 该文件夹的时候将花费较长的时间使上下文菜单显示出来。这是因为在你查询文件夹状态的时候,Subversion要去获取其下所有文件的状态。你可以在这里取消对 为右键菜单获取SVN状态 选项的勾选以避免这种延迟。要注意的是,文件夹的上下文菜单有时不太正确,可能会包含一些本来不该在那儿的条目。举个例子,右键点击一个新 添加 的文件夹,你可能会看到 TortoiseSVN → 显示日志 的操作选项,但那个是不会起作用的,因为该文件夹还没真正提交到版本库里。
选项 使用顶级菜单的快捷键 有三种状态:
未勾选(默认)
这种状态下,菜单项全部是由TSVN画出的,不会显示任何快捷键。
已勾选
这种状态激活了TSVN命令的快捷键,但这些与浏览器右键菜单中的其他快捷键显然存在起冲突的可能。多次按下快捷键将循环匹配右键菜单中共享同个快捷键的条目。这种状态下,菜单项是被Windows画出来的,而且看上去丑的要命。
半勾选(灰色)
这种模式下快捷键被激活,同时菜单项将以纯文本的形式被画出,不显示任何图标。
如果你需要对每个版本库建立一套代理设置,你必须使用Subversion服务器文件来配置。使用编辑来直接访问该配置文件(servers.txt)。
你同样可以在此指定SSH客户端程序,用来支持TortoiseSVN同使用svn+ssh协议的版本库建立安全连接。我们推荐您使用TortoisePlink.exe。这是著名的Plink程序的一个定制版本, 并且业已包含在TortoiseSVN之中,但它被编译成了一个无窗口的应用,因此当你每次认证的时候将不会看到弹出的DOS窗口。
这里有个不弹出窗口的副作用:将没有什么错误信息可供你追踪。因此倘若认证失败你将得到一个信息说:“Unable to write to standard output”。这样一来,我们就推荐你第一次设置时使用原始的Plink程序;而当一切工作正常之时,再使用定制版的TortoisePlink,并且重复利用那些相同的参数。
图26: 高级差异比较设置/高级合并设置的对话框
在高级设置中,你可以为每种文件类型都定义一个不同的差异比较/合并程序。例如,你可以指定Photoshop作为.jpg文件的 “比较” 程序 :-) 也可以按照 svn:mime-type 属性指定差异/合并程序。
无需任何通配符,你仅需指定文件的扩展名,包含开始的点,但是没有任何通配符。使用 .BMP 来描述Windows位图文件,而 不是*.BMP。如果使用svn:mime-type属性,要指定多媒体文件类型,包含斜线,例如text/xml。
有时你不仅要知道哪一行做了修改,还要精确地知道谁修改了一个文件中的哪一行。这就是TortoiseSVN → 追溯...命令,有时候也叫做 评注命令派上用场的时候了。
对一个文件中的每一行,这个命令列出了作者和该行修改时的版本。
图27:评注/追溯对话框
如果对早期版本的修改不感兴趣,你可以设置从哪个版本开始追溯。如果你想追溯每一个版本,你可以把那个数值设置为1。
默认情况下,追溯文件使用TortoiseBlame,这个工具可以高亮显示不同版本从而使阅读更加容易。如果想打印或者编辑追溯文件,复选使用文字编辑器查看追溯信息。
一旦你按了 OK 按钮,TortoiseSVN就开始从版本库获取数据创建追溯文件。注意:视修改的文件的多少和你的网络连接情况,可能会花掉几分钟到几十分钟不等。追溯过程完成后,其结果将会写到一个临时文件中,你可以读到这个结果文件。
图28:TortoiseBlame
TortoiseBlame,包含在TortoiseSVN中,使得追溯文件更加容易阅读。当你的鼠标在追溯信息列的某一行上盘旋时,所有和该列具有相同版本号的行都会用一个比较暗的背景色显示。同一作者修改的其他版本的行会用一个亮一些的背景 色显示。如果你的显示设置为256色模式,那么颜色显示的可能不会很清楚。
如果在某一行上左击,具有同一版本号的所有行都会高亮显示,同一作者的其他版本的行会用一个更亮的颜色高亮显示。这个高亮具有粘性,也就是说允许你移动鼠标但原先高亮的地方仍然保持高亮。再次点击该版本将关闭高亮显示。
只要鼠标逗留在追溯信息列,版本注释(日志信息)就会作为提示出现。如果你想复制此版本的日志信息,使用在追溯信息列显示的右键菜单。
你可以在追溯报告里用编辑 → 查找...来搜索想要的内容。它允许你搜索版本号,作者还有文件的内容。这个搜索不包含日志信息-你可以在日志对话框里搜索日志信息。
你也可以使用 编辑 → 转到行 ... 来跳到指定行。
图29:版本分支图
有时候,我们需要知道从哪开始有了分支和标签,同时想知道这条支路是单独的分支还是树型结构。如果需要你可以使用TortoiseSVN → 版本分支图...。
这个版本历史分析图能够显示分支/标签从什么地方开始创建,以及什么时候删除。
|
重要 |
要实现版本分支图,TortoiseSVN必须从版本库中获取所有的日志信息。一个有上千版本号的版本库会需要几分钟的时间,这个主要有服务器速度,网络带宽等因素决定。如果你使用的是Apache的方式而且版本号超过300,000的话估计要等上比较长的时间了。 |
版本分支图将显示以下内容:
增加文件/文件夹
已增加或通过拷贝生成的文件/文件夹以圆圈的方式标记。
已删除文件/文件夹
已删除文件,比如说一个不在需要的分支,将显示octagon(rectangle with corners cut off)。
分支最新版本
当一个分支(或者主干或者标签)从最新的节点开始以来有了新的更改,将有一个插件显示出来。也就是说,任意分支的最新版本都会显示在分支图上。
一般的文件/文件夹
其他一般的文件用plain rectangle标示。
默认的分支信息只会显示那些有增加或删除文件的节点。要显示一个项目的所有版本将会产生一个庞大的毫无价值的版本图。如果你呀看到所有的版本,在视图工具栏里可以找到实现该功能的选项。
这也有一个功能来排列版本分支旁支。它根据日志来对分支排序。如果分支从拷贝创建后都没有修改过一般被认为是一个标签而独立保存起来。每个分支(创建后有过修改的)会有它们自己的列,所以你可以看到分支延展到什么情况了。
任何时候只要鼠标在版本框上滑过,都会显示该版本的日期、作者和备注信息。
选择两个版本(用ctrl+左击),你可以在右键菜单下查看这两个版本的差异。你可以在分支的起始点查看差异,但一般你会在一个分支的结束点来查看,比如,在最新版本。
你可以用查看单一差异文件的方式来查看差异,它在单一的文件中显示差异。如果你选右键菜单 → 比较版本所有修改过的文件都会呈现在列表中。双击一个文件名可以返回文件版本号和他们差异。
如果右击一个版本你可以使用右键菜单 → 显示日志 来查看它的历史。
小心 |
因为Subversion不能支持提供所有请求的信息,在有大量请求信息时,有时它能提供强大的返回信息。但无论如何,主干都会产生有用的输出。 |