1)导入数据到版本库
第一种情况,使用Import导入命令的时候
不能选择包含哪些指定文件或目录, 导入的文件夹不能变成工作副本,(如果你在“工作副本”目录下执行导入命令是不起作用的。)必须通过签出操作从服务器拿回工作副本。 很容易把错误的文件夹层次导入到版本库。
现在进入资源管理器,选择你的项目的顶层目录,右击打开上下文菜单。选择命令TortoiseSVN → 导入 ...,它会弹出一个对话框:
在这个对话框中,需要输入版本库所在的 URL,你的项目将会导入到这里。非常重要的事项,你必须了解: 你要导入的本地文件夹自身不会出现在版本库中,版本库中只有文件夹中的内容。例如,你有这样的文件夹结构:
C:\Projects\Widget\source
C:\Projects\Widget\doc
C:\Projects\Widget\images
你将 C:\Projects\Widget 导入到 http://mydomain.com/svn/trunk,然后你会惊奇的发现:
你的子目录径直地进入 trunk 中,而不是在 Widget 子目录中。你需要将子目录作为
URL 的一部分明确的指出来,http://mydomain.com/svn/trunk/Widget-X。注意,如果版本库中不存在指定的子目录,导入命令将会自动创建它们。这个问题困惑了我好一阵。
默认情况下,匹配全局忽略模式的文件和文件夹不会被导入。你可以使用包含忽略文件检验栏来禁止此行为。请注意,你导入的文件夹没有被版本控制!你需要检出刚才导入的版本,以便获得受版本控制的工作副本
第二种情况,已经有了版本库,想增加一个新的目录结构
可以使用版本库浏览器,在版本库里新添加一个项目文件夹,如果已经使用了标准的布局, 就在trunk目录下建立你的子目录,而不是在根目录下创建,这样组织目录就方便很多。
将刚才浏览器里新建的项目目录签出覆盖到你想嵌入的本地目录,如果你得到本地目录非空的警告,可以忽略它。这样就得到一个版本受控的顶级目录,下面是非版本控制的内容。
在此受版本控制的文件夹上使用TortoiseSVN → 增加...增加部分或全部内容。你可以增加或删除文件,在文件夹上设置svn:ignore属性,或者你需要的其它修改。
提交顶级目录,这样就产生了一个新的版本树,得到一份从你已有目录创建的本地工作副本。
2) 专用文件
有时候你需要版本控制一个包含用户专用的数据。它意味着你有一个文件,每个开发者/用户都需要修改,一边满足他/她的本地配置。但是版本控制这样的文件是困难的,因为每个用户可能都要提交他/她的修改。(我想Web.Config和App.Config就属于这样的文件)
在这种情况下,我们建议使用模版文件。创建一个包含所有开发者需要的数据的文件,增加到版本库中,让开发者检出。然后,每个开发者创建一个副本,改名此文件。于是,修改这个文件不再是问题。
作为例子,你可以看看TortoiseSVN的构建脚本。它调用一个TortoiseVars.bat文件,它并不在版本库中。 只有TortoiseVars.tmpl在版本库中。TortoiseVars.tmpl是一个模版文件,每个开发者都需要创建一个副本,改名为TortoiseVars.bat。在这个文件中,我们增加了注释,所以用户知道他们需要编辑那些行,以便适应他们的本地配置,使其能工作。于是为了不干扰用户,我们也将TortoiseVars.bat增加到它的父目录的忽略列表,也就是,我们设置了Subversion属性svn:ignore包含这个文件名称。这样,每次提交时它都不会作为没有版本控制的文件出现。
3)Revision Graph
在版本浏览器点击右键菜单,选择Revision Graph,可以看到版本的历史图。
5)只想检出一个大文件树的某部分
当你想要检出一个很大的文件树的某些部分而且只更新某几个文件夹的工作副本时,
假设有一个很大的文件树,其中包含 99 个子文件夹从 Project01 到 Project99,你只想检出Project03,Project25。按下列步骤操作:
1. 检出父文件夹时检出深度使用“仅此项”。现在,你获得一个空的顶级文件夹。
2. 选中新文件夹,使用 TortoiseSVN → 版本库浏览器 来显示版本库的内容。
3. 右键单击 Project03 然后选择右键菜单 → 更新项目至版本...。保持默认设置并单击 确定。现在这个文件夹就位于你的工作副本中了。为 Project25 重复相同的操作。
改变工作副本深度
一旦以某个深度检出了工作副本后,以后还可以修改这个深度来获得更多或更少的内容,使用 右键菜单 → 更新该项至版本。在弹出的对话框中,确认选中了 粘滞深度 复选框。
6)提交修改到版本库
将你对工作副本的修改发送给版本库,称为提交修改。但在你提交之前要确保你的工作副本是最新的。你可以直接使用TortoiseSVN → 更新,或者,你可以先使用TortoiseSVN → 检查修改看看哪些文件在本地或是服务器上已经有了改动。
提交文件和提交文件夹的区别,当你提交文件时,提交对话框只显示你所提中的文件。当你提交文件夹中,提交对话框将自动选择有改动的文件。如果你忘记了你建立的一个新文件,提交文件夹将使你可以找到它。提交一个文件夹并不意味着每个文件都被标识为修改过的。
在提交对话框中双击任何修改过的文件,将运行外部 diff 工具显示你做的改动。上下文菜单将给你更多的选项,请看屏幕截图。你可以从这里将文件拖动到另一个应用程序中,如文本编辑器或 IDE。
缺省情况下,当你成功提交修改后,你在这些文件上持有的锁会被自动释放。如果你需要保留锁,请确认选中检查框保留锁。此检查框的缺省状态从 Subversion 配置文件的 no_unlock 选项获取。
拖放。你可以将文件从别的地方拖动到提交对话框,只要工作副本是由同一版本库中检出就可以了。比如,你有一个很大的工作副本,要开好几个资源管理器窗口来查看层次中不同的文件夹。如果你要避免从顶级文件夹提交(冗长而缓慢的文件夹改动检查),你可以打开一个文件夹的提交对话框,然后将别的窗口中的项拖进去,可样就可以一次提交它们了。
你可以将未版本控制的文件拖到工作副本提交对话框中,它们就会被自动增加。
从提交对话框底部的列表中将文件拖拽到日志消息编辑框中,就能以文本格式将文件的路径插入编辑框中。当你想将本次提交相关的文件路径插入日志消息中时该功能非常有用。
有时候文件不是用 Subversion 改名,于是它们在文件列表中作为丢失和未版本控制的文件出现。为了避免丢失历史,你需要通知Subversion。简单的选择老名称(丢失)和新名称(未版本控制),然后使用右键菜单 → 修复移动来指明这两个文件是改名关系。
7)用来自别人的修改更新你的工作副本
你需要定期地确保将别人所做的修改整合到你本地的工作副本中。从服务器获取更改到本地副本的过程就叫做 更新。更新的对象可以是一个文件,选中的多个文件或者对整个目录结构进行递归。要进行更新,选中要更新的文件或目录,右键单击然后选中右键菜单中的 TortoiseSVN → 更新。将会弹出一个
窗口,随着更新的进行显示进度。其他人所做的更改将会合并到你的文件中,并保留同一个文件中你所做的更改。版本库 不会 受更新影响。
进度对话框使用颜色代码来高亮不同的更新行为
紫色
新项已经增加到你的工作副本中。
深红
你的工作副本中删除了多余项,或是你的工作副本中丢失的项被替换。
绿色
版本库中的修改与你的本地修改成功合并。
亮红
来自版本库的修改在与本地修改合并时出现了冲突,需要你解决。
黑色
你的工作副本中的没有改动的项被来自版本库中新版本所更新。
这是默认的配色方案,但你可以通过设置对话框来定制这些颜色。
如果在更新过程中发生了 冲突 (有可能是因为你和他人修改了同一个文件的同一行并且这些更改不匹配)那么对话框会用红色显示冲突。可以通过 双击 那些行来启动外部合并工具解决冲突。等更新结束后,对话框会在文件列表的底部显示一段总结,包括已更新、已添加、已删除、冲突等情况的条目数量。可以使用 Ctrl+C 将这段信息复制到剪贴板。
冲突解决请看第二部分 使用TortoiseSVN碰到的几个问题(2)-冲突解决