TortoiseSVN 安装与基本操作教程:从入门到实践
引言:版本控制的重要性与 TortoiseSVN
在软件开发、文档管理、项目协作等领域,版本控制系统(Version Control System, VCS)扮演着至关重要的角色。它能帮助我们追踪文件和代码的修改历史、回溯到任何一个旧版本、协同工作而不互相干扰,以及在必要时合并不同成员的修改。Subversion(SVN)是一种广泛使用的集中式版本控制系统。
然而,SVN 本身是基于命令行操作的。对于不熟悉命令行的用户来说,这可能会带来一定的学习曲线和使用障碍。这时,一款优秀的 SVN 客户端就显得尤为重要。TortoiseSVN 就是 Windows 平台上最流行、功能强大的 SVN 客户端之一。它通过与 Windows 文件资源管理器(Explorer)深度集成,提供了直观的图形化界面,让 SVN 的各种操作变得像文件复制粘贴一样简单方便。
本教程将带你从零开始,详细了解 TortoiseSVN 的安装过程,并逐步掌握其最常用的基本操作,包括如何获取代码、修改代码、提交修改、更新代码以及查看历史记录等,助你快速入门并高效使用 TortoiseSVN 进行版本控制。
第一部分:TortoiseSVN 的安装
安装 TortoiseSVN 是使用它的第一步。整个过程相对简单直观,但需要注意一些细节。
1. 准备工作
在开始安装之前,请确保你的计算机满足以下条件:
- 操作系统: TortoiseSVN 专为 Windows 设计,支持当前主流的 Windows 版本(如 Windows 7, 8, 10, 11 等)。
- 用户权限: 你需要拥有在你的 Windows 计算机上安装软件的管理员权限。
2. 下载 TortoiseSVN 安装程序
前往 TortoiseSVN 的官方网站下载最新版本的安装程序。推荐从官方网站下载,以确保软件的安全性和完整性。
- 打开浏览器,访问 TortoiseSVN 官方网站:
https://tortoisesvn.net/downloads.html
- 在下载页面,你会看到不同语言和不同系统架构(32位和64位)的下载链接。
- 确认你的 Windows 系统是 32 位还是 64 位: 如果不确定,可以在“我的电脑”或“此电脑”图标上右键,选择“属性”,在系统类型中查找。
- 选择与你的系统架构相匹配的安装包: 通常会下载一个
.msi
格式的文件。例如,对于 64 位 Windows 系统,你会下载类似TortoiseSVN-1.14.x.xxxx-x64-svn-1.14.x.msi
的文件。 - 选择语言包(可选但推荐): 如果你希望使用中文界面,可以在同一页面下载对应的语言包。语言包通常是一个
.msi
文件,名称中包含语言代码(如LanguagePack_1.14.x.xxxx-x64-zh_CN.msi
表示简体中文)。先安装主程序,再安装语言包。
将下载好的安装程序文件保存到你的计算机上一个容易找到的位置。
3. 执行安装程序
找到下载的 TortoiseSVN 主程序 .msi
文件,双击运行它。这将启动 TortoiseSVN 安装向导。
-
用户账户控制 (UAC): 如果系统开启了 UAC,可能会弹出一个询问是否允许程序修改系统的提示框,点击“是”或“允许”继续。
-
安装向导 – Welcome(欢迎): 欢迎界面显示软件版本信息。点击“Next >”继续。
-
安装向导 – End-User License Agreement(许可协议): 阅读软件许可协议。勾选“I accept the terms in the License Agreement”(我接受许可协议中的条款)来同意协议。点击“Next >”继续。
-
安装向导 – Custom Setup(自定义安装): 这是一个重要的步骤,你可以选择要安装的组件。
- TortoiseSVN core: 这是 TortoiseSVN 的核心组件,必须安装。
- Command line client tools: 强烈建议勾选此项。 虽然我们主要使用图形界面,但在某些高级操作或故障排除时,命令行工具会很有用。如果你的系统中没有独立的 SVN 命令行客户端,安装此项将提供一个。
- Language packs: 如果你下载了语言包,这里会显示是否安装已有的语言包。如果你想稍后安装语言包,这里可以不勾选。
- Dictionaries: 拼写检查字典,根据需要选择安装。
- 你可以点击组件前的图标来改变安装状态(例如,从“Will be installed on local hard drive”改变为“Entire feature will be installed on local hard drive”以确保所有子组件都被安装,特别是命令行工具)。
- Installation folder: 你可以选择 TortoiseSVN 的安装路径。默认路径通常在 Program Files 或 Program Files (x86) 下,通常不需要修改。
- 确认组件选择和安装路径后,点击“Next >”继续。
-
安装向导 – Ready to install TortoiseSVN(准备安装): 确认你的安装设置。点击“Install”开始安装过程。
-
安装向导 – Installing TortoiseSVN(正在安装): 安装过程会显示进度条。等待安装完成。
-
安装向导 – Completed(完成): 安装成功完成后,向导会提示安装已完成。可能会有一个选项让你重启计算机(“Restart the computer now”)。通常强烈建议勾选此选项并点击“Finish”来重启计算机。 重启是必要的,因为 TortoiseSVN 需要集成到 Windows Explorer 的右键菜单中,这需要 Explorer 进程重新加载。如果不重启,你可能看不到 TortoiseSVN 的右键菜单项和文件图标覆盖。
4. 安装语言包(如果需要)
如果你下载了语言包并希望使用中文界面,在完成主程序安装并重启计算机后,找到语言包的 .msi
文件,双击运行它。
- 语言包的安装过程比主程序简单得多,通常只需同意许可协议并点击几步“Next”即可完成。
- 安装完成后,打开文件资源管理器。在空白处或任意文件夹上右键,选择 “TortoiseSVN” -> “Settings”。
- 在设置窗口左侧导航栏选择“General”。
- 在右侧的“Language”下拉菜单中选择你安装的语言(例如,“简体中文”)。
- 点击“OK”保存设置。界面会立即或在下次文件资源管理器刷新时变为中文。
至此,TortoiseSVN 及其语言包就安装完成了。你现在可以在文件资源管理器中看到 TortoiseSVN 的图标覆盖和右键菜单项了。
第二部分:Subversion 版本控制系统的核心概念
在开始使用 TortoiseSVN 进行操作之前,理解 Subversion 的一些核心概念非常重要。TortoiseSVN 的界面和操作都是围绕这些概念设计的。
-
仓库 (Repository):
- 仓库是版本控制系统的核心,它是文件和目录及其所有修改历史的集中存储地。
- 你可以把它想象成一个中央的文件服务器或数据库,所有用户都从这里获取文件,并向这里提交修改。
- 仓库通常位于服务器上,通过网络(如 HTTP/HTTPS, svn://, file:///)访问。
- 一个仓库可以包含多个项目。
-
工作副本 (Working Copy):
- 工作副本是仓库中某个特定版本(通常是最新版本)的文件和目录在你本地计算机上的一个副本。
- 这是你进行日常工作的地方——你在这里修改文件、添加新文件、删除文件等。
- 工作副本与仓库是关联的。你可以将本地的修改提交到仓库,也可以从仓库更新获取其他人的修改到你的工作副本。
-
修订版本 (Revision):
- 修订版本代表了仓库在特定时间点上的一个完整的文件和目录状态快照。
- 每次成功提交(Commit)到仓库,都会创建一个新的修订版本。修订版本号是一个单调递增的整数(例如,r1, r2, r3, …)。
- 你可以随时获取仓库中任何一个修订版本的工作副本,或者查看任何两个修订版本之间的差异。
-
检出 (Checkout):
- 从仓库获取一个项目的完整副本到你的本地计算机,创建一个新的工作副本。
- 这通常是在你第一次开始参与一个项目时进行的操作。
-
更新 (Update):
- 将仓库中其他人提交的最新修改同步到你本地的工作副本。
- 这是获取最新代码以确保你正在基于最新版本工作的重要步骤。
-
提交 (Commit):
- 将你在本地工作副本中所做的修改(包括文件的修改、添加、删除、重命名等)上传到仓库。
- 提交成功后,这些修改就成为了仓库历史的一部分,并会创建一个新的修订版本。
- 每次提交时,都需要填写提交信息(Commit Message),说明本次提交做了哪些修改,为什么做这些修改。良好的提交信息对于后续的代码审查、问题追踪和历史查阅至关重要。
-
冲突 (Conflict):
- 当两个或多个用户修改了同一个文件的同一部分,并在他们各自提交之前都进行了更新时,就会发生冲突。
- SVN 无法自动合并这些相互矛盾的修改,需要用户手动解决冲突。
- 解决冲突的过程通常包括查看双方的修改,手动编辑文件以保留需要的更改,然后告诉 SVN 冲突已解决。
-
图标覆盖 (Icon Overlays):
- 这是 TortoiseSVN 的一个重要特性。它在文件资源管理器中,通过在文件或文件夹图标上叠加小图标,直观地显示其版本控制状态(例如,绿色圆圈表示正常,红色感叹号表示已修改,蓝色问号表示未版本控制等)。
理解了这些概念后,我们就可以开始学习如何使用 TortoiseSVN 进行实际操作了。
第三部分:TortoiseSVN 的基本操作
本部分将详细介绍使用 TortoiseSVN 进行日常版本控制工作的基本步骤。
1. 检出 (Checkout) 工作副本
如果你是第一次获取仓库中的项目代码,你需要执行“检出”操作。
- 选择目标位置: 在你的本地计算机上选择一个空文件夹(或者你希望存放项目工作副本的父文件夹)。
- 右键菜单: 在选定的文件夹内部或者在空白处点击鼠标右键。
- 选择 TortoiseSVN 菜单: 在右键菜单中,找到并选择“TortoiseSVN”。
- 选择 Checkout 命令: 在 TortoiseSVN 子菜单中,选择“Checkout…” (或“检出…” 如果是中文界面)。
- 检出对话框: 一个名为“Checkout”的对话框会弹出。
- URL of repository (仓库URL): 在这里输入你要检出的 SVN 仓库路径或项目路径。这通常由你的项目管理员提供,格式可能是
svn://server/project
、http://server/svn/project
或https://server/svn/project
等。 - Checkout directory (检出目录): 这是你本地存放工作副本的路径。对话框通常会自动填充你在右键点击时所在的路径。你可以点击右侧的“…”按钮选择其他路径。
- Revision to checkout (要检出的修订版本): 默认是 HEAD revision(最新版本)。通常保持默认即可。如果你需要获取历史上的某个特定版本,可以点击“…”按钮选择。
- Checkout depth (检出深度): 通常保持默认的“Fully recursive”(完全递归)即可,这意味着会检出所有子目录和文件。其他选项用于只获取部分内容(例如,只获取顶级目录)。
- Head revision (最新修订版本): 勾选此项通常表示你想要获取仓库中的最新版本。
- URL of repository (仓库URL): 在这里输入你要检出的 SVN 仓库路径或项目路径。这通常由你的项目管理员提供,格式可能是
- 确认并执行: 确认设置无误后,点击“OK”。
- 进度窗口: TortoiseSVN 会连接到仓库,并在一个进度窗口中显示检出的过程,包括下载的文件列表和状态。
- 完成: 检出完成后,进度窗口会显示“Completed”。点击“OK”。
- 结果: 你选择的本地文件夹中现在包含了仓库中的文件和目录,并且这些文件和文件夹上会有 TortoiseSVN 的图标覆盖,通常是绿色的圆圈,表示它们处于“正常”状态(与仓库最新版本一致)。
2. 更新 (Update) 工作副本
当其他团队成员向仓库提交了他们的修改后,你的本地工作副本就不是最新的了。你需要执行“更新”操作来获取这些最新的修改。
- 选择工作副本: 在你的工作副本文件夹(或其任何子文件夹、文件)上点击鼠标右键。
- 选择 TortoiseSVN 菜单: 在右键菜单中,选择“TortoiseSVN”。
- 选择 Update 命令: 在 TortoiseSVN 子菜单中,选择“Update” (或“更新…” 如果是中文界面)。
- 更新对话框(通常不会出现,直接开始): 大部分情况下,点击“Update”后会直接弹出一个进度窗口。
- 进度窗口: 进度窗口会显示 TortoiseSVN 连接仓库、检查修改、下载文件的过程。窗口中会列出每个文件的操作状态:
U
(Updated): 文件已更新到新版本。A
(Added): 仓库中新增的文件已下载到本地。D
(Deleted): 仓库中已删除的文件已在本地删除。C
(Conflict): 文件发生冲突,需要手动解决。G
(Merged): 文件被自动合并(常见于不同行修改)。E
(Exists): 文件已存在,可能是新添加的文件,但本地已有同名文件。Restored
: 文件从历史版本恢复。Skipped
: 文件被跳过更新(可能因为被锁定或其他原因)。
- 完成: 更新完成后,进度窗口会显示“Completed”。点击“OK”。
- 结果: 你的工作副本现在包含了仓库中的最新修改。文件图标覆盖也会根据更新后的状态进行变化。如果发生了冲突(状态为
C
),对应的文件或文件夹图标会变成黄色三角形带感叹号,你需要先解决冲突再提交。
3. 查看工作副本状态 (Check for modifications)
在提交修改之前,最好先查看一下你的工作副本中有哪些文件被修改、新增、删除或处于其他状态。
- 选择工作副本: 在你的工作副本文件夹上点击鼠标右键。
- 选择 TortoiseSVN 菜单: 选择“TortoiseSVN”。
- 选择 Check for modifications 命令: 选择“Check for modifications” (或“检查修改” 如果是中文界面)。
- 修改列表窗口: TortoiseSVN 会扫描你的工作副本,并弹出一个窗口列出所有与仓库最新版本不一致的文件和文件夹。
- 列表内容: 窗口中会列出文件的状态(如
modified
,added
,deleted
,unversioned
,missing
,conflicted
等)。 - 未版本控制文件 (Unversioned): 新创建的、但尚未添加到 SVN 控制的文件会在这里显示。它们的图标是蓝色问号。
- 菜单选项: 在这个窗口中,你可以对列表中的文件进行各种操作,如“Commit”(提交)、“Update”(更新)、“Revert”(恢复)、“Show differences”(查看差异)、“Add”(添加)、“Delete”(删除)等。
- 检查差异: 你可以选中一个
modified
或conflicted
状态的文件,右键选择“Compare with working copy” (或“与工作副本比较”),TortoiseSVN 会启动一个差异比较工具(默认为 TortoiseMerge),清晰地显示你本地的修改与仓库最新版本之间的差异。
- 列表内容: 窗口中会列出文件的状态(如
- 用途: 这个窗口非常有用,它能帮助你在提交前全面了解你将要提交的内容,避免遗漏或提交错误的文件。
4. 添加 (Add) 新文件/文件夹
当你创建了新的文件或文件夹,并希望将它们纳入版本控制时,你需要执行“添加”操作。
- 创建新文件/文件夹: 在你的工作副本中创建新的文件或文件夹。它们最初是“未版本控制”(unversioned) 状态,图标是蓝色问号。
- 选择要添加的项: 在新创建的文件或文件夹上点击鼠标右键(可以多选)。
- 选择 TortoiseSVN 菜单: 选择“TortoiseSVN”。
- 选择 Add 命令: 选择“Add” (或“添加” 如果是中文界面)。
- 添加对话框: 一个对话框会列出所有你选择要添加的文件和文件夹。确认列表正确。
- 确认并执行: 点击“OK”。
- 进度窗口: 显示添加操作的进度。
- 结果: 文件和文件夹的图标会变为绿色加号,表示它们已被“计划添加”到版本控制中。注意: “添加”操作仅仅是将这些文件标记为待提交的新文件,它们还没有被发送到仓库。你需要进行“提交”操作,它们才会真正进入仓库。
5. 删除 (Delete) 文件/文件夹
当你需要从版本控制中移除文件或文件夹时,你应该使用 TortoiseSVN 的删除功能,而不是直接在文件资源管理器中删除。
- 选择要删除的项: 在你的工作副本中,找到并选中要删除的文件或文件夹。右键点击。
- 选择 TortoiseSVN 菜单: 选择“TortoiseSVN”。
- 选择 Delete 命令: 选择“Delete” (或“删除” 如果是中文界面)。
- 删除确认: TortoiseSVN 会询问你是否确定要删除这些文件。点击“OK”。
- 结果: 被删除的文件或文件夹会立即从你的本地工作副本中消失,并且在文件资源管理器中(如果你设置了显示已删除文件)或“检查修改”窗口中,它们的图标会变为红色减号,表示它们已被“计划删除”。注意: “删除”操作仅仅是将这些文件标记为待删除,它们还没有从仓库中删除。你需要进行“提交”操作,它们才会真正从仓库的HEAD版本中移除(但历史版本依然保留)。
6. 重命名或移动 (Rename/Move) 文件/文件夹
像删除一样,重命名或移动版本控制下的文件或文件夹也应该通过 TortoiseSVN 进行操作,以保留其历史记录。
-
方法一(推荐):使用 TortoiseSVN 菜单
- 选中要重命名或移动的文件/文件夹,右键点击。
- 选择“TortoiseSVN” -> “Rename…” (或“重命名…”) 或 “Move versioned item here…” (或“移动已版本控制项到此处…”)。
- Rename: 弹出对话框,输入新的名称,点击OK。
- Move: 先复制或剪切文件,然后在目标位置右键选择此选项。
- 结果:文件/文件夹被标记为重命名/移动状态(通常图标会显示删除旧路径、添加新路径),等待提交。
-
方法二:拖放(右键)
- 选中要移动的文件/文件夹。
- 按住鼠标右键 将其拖动到目标位置。
- 释放右键后,会弹出一个上下文菜单,选择“SVN Move versioned item here” (或“SVN 移动已版本控制项到此处”)。
- TortoiseSVN 会处理重命名和移动操作,并标记为待提交。
-
方法三:在文件资源管理器中操作后修复
- 直接在文件资源管理器中重命名或移动文件。这些文件会变成“未版本控制”状态(新位置)和“丢失/缺失”状态(旧位置)。
- 在工作副本根目录或相关位置右键,选择“TortoiseSVN” -> “Cleanup…” (或“清理…”)。
- 在清理对话框中,勾选“Fix case/encoding of names”和/或“Remove unversioned items and restore missing items”等选项,有时可以帮助SVN检测并修复这种重命名/移动。
- 更可靠的方法是在“检查修改”窗口中手动处理: 在“检查修改”窗口中,你会看到旧路径显示为
missing
,新路径显示为unversioned
。选中旧路径(missing),右键选择“Delete”。选中新路径(unversioned),右键选择“Add”。但这会丢失历史记录的关联。因此强烈推荐使用前两种方法。
7. 提交 (Commit) 修改
当你完成了一系列修改(包括修改、添加、删除、重命名等),并希望将这些修改保存到仓库中,供其他团队成员获取时,你需要执行“提交”操作。
- 选择要提交的项: 在你的工作副本文件夹(或你修改过的特定文件/文件夹)上点击鼠标右键。通常,为了避免遗漏,推荐在工作副本的根目录或包含所有修改的父文件夹上右键。
- 选择 TortoiseSVN 菜单: 选择“TortoiseSVN”。
- 选择 Commit 命令: 选择“Commit…” (或“提交…” 如果是中文界面)。
- 提交对话框 (Commit): 这是一个非常重要的对话框。
- 顶部列表: 显示所有被 TortoiseSVN 检测到的有修改、添加、删除等状态的文件和文件夹。
- 文件状态: 列表中的每一项都会显示其状态(Modified, Added, Deleted, Renamed, etc.)。
- 勾选框: 列表中的每一项前面都有一个勾选框,默认情况下所有有状态变化的项都会被勾选。你可以取消勾选某些项,以排除它们不在此次提交中。这在你只想提交部分修改时很有用。
- 提交信息 (Message): 在顶部的多行文本框中,必须输入本次提交的描述信息,说明你做了哪些修改,修改的原因是什么。写清晰、有意义的提交信息是一个非常好的习惯! 这有助于你和其他人理解历史记录。
- 差异比较: 你可以在列表中选中一个
modified
的文件,双击或右键选择“Compare with BASE” (或“与基版本比较”,基版本是你更新后或检出时的那个仓库版本) 或 “Compare with HEAD revision” (或“与最新版本比较”,如果你的工作副本不是最新的),再次启动差异比较工具查看具体修改内容。 - 其他选项: 对话框底部可能还有一些选项,例如“Keep locks”(保留锁定,如果之前锁定过文件),“Include unversioned files”(包含未版本控制文件,不推荐),“Show log”(显示日志,查看仓库历史)。
- 确认并执行: 仔细检查文件列表和提交信息后,点击“OK”。
- 进度窗口: TortoiseSVN 会连接到仓库,上传你的修改。进度窗口会显示上传的每个文件以及最终的修订版本号。
- 完成: 提交成功后,进度窗口显示“Completed”,并会告诉你本次提交创建的新的修订版本号 (e.g., “Committed revision XXXX.”)。点击“OK”。
- 结果: 工作副本中的文件图标会恢复为绿色圆圈(正常状态),表示它们现在与仓库的最新版本(刚才提交创建的新修订版本)一致。
8. 查看日志 (Show Log)
日志记录了仓库中所有的提交历史。通过查看日志,你可以了解每次提交的作者、时间、提交信息以及修改了哪些文件。
- 选择工作副本或文件: 在你的工作副本文件夹(或特定的文件、文件夹)上点击鼠标右键。如果你在特定文件上查看日志,通常只显示与该文件相关的历史。在文件夹上查看则显示该文件夹及其子内容的整体历史。
- 选择 TortoiseSVN 菜单: 选择“TortoiseSVN”。
- 选择 Show log 命令: 选择“Show log” (或“显示日志” 如果是中文界面)。
- 日志对话框: 弹出“Log Messages” (或“日志信息”) 窗口。
- 顶部列表: 显示一系列的提交记录,每一行代表一个修订版本。列信息通常包括修订版本号、作者、日期、提交信息以及修改的文件数量。
- 提交信息详情: 选中顶部列表中的某一行提交记录,窗口下方会显示该提交的完整提交信息。
- 修改文件列表: 窗口底部通常会显示该提交所修改的具体文件列表,包括文件的状态(Added, Deleted, Modified等)和路径。
- 搜索和过滤: 日志窗口通常提供搜索功能(按作者、信息、文件路径等)和过滤功能(按日期范围、作者、信息关键字等),以便查找特定的提交。
- 右键菜单: 在顶部列表中的任一条日志记录上右键,可以进行多种操作:
- Show differences (显示差异): 比较该修订版本与工作副本、或与前一个版本、或其他指定版本之间的差异。
- Browse repository (浏览仓库): 打开一个新的窗口,浏览该修订版本时仓库中的文件和目录结构。
- Get revision (获取修订版本): 将该修订版本的文件导出到一个指定位置(不会创建工作副本,只是获取文件快照)。
- Update to revision (更新到修订版本): 将你的工作副本更新到该历史修订版本(这会让你的工作副本回到过去的状态,图标会变成蓝色,表示不是最新版本,需要谨慎操作)。
- Revert changes from this revision (回退本次修订的更改): 撤销本次提交引入的所有修改(这会创建一个新的本地修改,需要提交到仓库)。
- 用途: 查看日志是理解项目历史、追踪问题、查看他人修改、以及回溯到旧版本的重要手段。
9. 解决冲突 (Resolving Conflicts)
冲突是多人协作时可能遇到的问题。当发生冲突时,文件的图标会变为黄色三角形带感叹号。你需要手动解决冲突。
- 识别冲突: 更新 (Update) 操作完成后,进度窗口会提示冲突,并且冲突文件的图标变为黄色。
- 手动编辑文件: 打开冲突的文件。SVN 会在文件中插入特殊的冲突标记,通常是
<<<<<<<
,=======
,>>>>>>>
和|||||||
。<<<<<<< HEAD
或<<<<<<< .working
:这是你的工作副本中的修改开始处。=======
:分隔符。>>>>>>> .revisions
:这是来自仓库的修改结束处,后面的内容可能是修订版本号。||||||| .revisions
:有些冲突类型(如属性冲突或更复杂的合并)可能会有这个标记,显示共同祖先版本的内容。- 你需要手动编辑文件,删除这些标记,并合并两个版本的修改,保留你最终想要的代码或文本。
- 使用冲突编辑工具 (TortoiseMerge): TortoiseSVN 提供了强大的图形化冲突解决工具 TortoiseMerge。
- 在冲突文件上右键,选择“TortoiseSVN” -> “Edit conflicts” (或“编辑冲突” 如果是中文界面)。
- TortoiseMerge 会以三窗口或四窗口视图显示:你的版本、别人的版本、共同祖先版本(如果可用)以及你正在编辑的合并结果。
- 你可以点击工具栏上的按钮来选择使用你的版本、别人的版本,或者手动编辑中间的合并结果。
- 编辑完成后,保存文件并关闭 TortoiseMerge。
- 标记为已解决 (Resolved): 手动编辑或使用工具合并文件后,文件内容已经是你最终想要的版本。此时,你需要告诉 SVN 冲突已经解决。
- 在冲突文件上右键,选择“TortoiseSVN” -> “Resolved” (或“解决” 如果是中文界面)。
- 文件图标会变回红色感叹号(已修改)或绿色圆圈(如果解决冲突后与仓库HEAD版本完全一致)。
- 提交解决后的文件: 冲突解决并标记为已解决后,文件的状态变为已修改。你需要像提交普通修改一样,执行“Commit”操作,将解决冲突后的文件提交到仓库。在提交信息中,通常会说明解决了哪些文件的冲突。
10. 忽略未版本控制项 (Ignoring Unversioned Items)
在项目开发过程中,可能会产生一些不希望纳入版本控制的文件或文件夹,比如编译生成的可执行文件、对象文件、日志文件、用户配置、IDE 相关的临时文件等。这些文件通常被称为“未版本控制项”。如果它们数量很多,每次“检查修改”时都会出现,会干扰我们的视线。SVN 提供了忽略列表功能来解决这个问题。
- 选择要忽略的项: 在你希望忽略的文件或文件夹上右键点击。
- 选择 TortoiseSVN 菜单: 选择“TortoiseSVN”。
- 选择 Add to ignore list 命令: 选择“Add to ignore list” (或“添加到忽略列表” 如果是中文界面)。
- 忽略选项: 弹出的菜单会提供几个选项:
- 忽略该特定文件(例如,
ignore.log
)。 - 忽略所有具有该扩展名的文件(例如,
*.log
)。 - 忽略所有同名文件(例如,
ignore.log
,无论在哪个目录)。 - 忽略所有匹配特定模式的文件(可以自定义)。
- 忽略该特定文件(例如,
- 选择忽略范围: 选择合适的忽略选项。通常,对于临时的编译文件等,可以选择忽略整个类型(如
*.obj
,*.exe
)。对于 IDE 配置目录等,可以选择忽略特定的文件夹名称。 - 原理: TortoiseSVN 会在所选文件/文件夹的父目录上设置一个名为
svn:ignore
的属性(或在较新的 SVN 版本中是递归的svn:global-ignores
属性)。这个属性的值是一个模式列表,告诉 SVN 在该目录下忽略哪些文件/文件夹。 - 管理忽略列表: 你可以在文件夹上右键,选择“TortoiseSVN” -> “Properties” (或“属性”),然后编辑
svn:ignore
属性来查看或修改忽略列表。 - 提交属性修改: 记住,
svn:ignore
属性本身也是版本控制的一部分。你修改了忽略列表后,该文件夹的图标会变为红色感叹号(因为属性被修改了),你需要提交该文件夹,以便将忽略规则保存到仓库,供其他团队成员共享。
第四部分:进阶概念(简介)
虽然本文主要聚焦于基本操作,但了解一些进阶概念能让你对 SVN 有更全面的认识。
- 分支 (Branching): 创建项目的一个独立开发线。常用于开发新功能、修复bug或进行实验,而不会影响主开发线(通常是
trunk
或main
)。 - 合并 (Merging): 将一个分支上的修改整合到另一个分支(通常是将功能分支合并回主干,或将主干上的bug修复合并到发布分支)。
- 标签 (Tagging): 为仓库中的某个特定修订版本设置一个有意义的名称(标签),通常用于标记重要的里程碑,如软件发布版本。标签本身只是一个指向特定修订版本的分支,其约定是创建后不再修改。
- 属性 (Properties): SVN 不仅版本控制文件内容,还可以版本控制文件和文件夹的属性,例如
svn:ignore
,svn:keywords
,svn:eol-style
等。
TortoiseSVN 提供了图形界面来支持这些进阶操作,但其复杂性超出本基本教程的范围。
第五部分:使用 TortoiseSVN 的最佳实践
为了更高效、顺畅地使用 TortoiseSVN 进行协作,可以遵循一些最佳实践:
- 频繁更新: 在开始工作前和提交修改前,执行“更新”操作,获取最新的仓库内容。这能帮助你及时发现并解决潜在的冲突,避免积累大量修改后一次性处理复杂冲突。
- 频繁提交,每次提交包含相关修改: 不要等到完成大量工作后才提交。将一个大任务分解成逻辑上独立的、较小的修改块,并针对每个块进行提交。这样可以使每次提交的范围更小,更容易审查、回溯和理解。
- 写清晰、有意义的提交信息: 提交信息是每次修改的摘要和原因。好的提交信息应该简明扼要地说明本次提交“做了什么”和“为什么做”。避免使用含糊不清的描述(如“修改了”、“更新”)。
- 提交前先检查修改: 在执行“提交”操作前,使用“检查修改”功能仔细查看你将要提交的所有文件列表和状态,确保没有遗漏或包含了不应该提交的文件。
- 提交前先查看差异: 对于重要的修改文件,使用“Show differences”功能再次确认你的修改内容与原始版本或最新版本之间的差异,避免意外提交。
- 谨慎处理冲突: 解决冲突时要非常小心,确保最终合并的文件内容是正确的,包含了所有必要的修改。使用 TortoiseMerge 等工具可以大大简化这个过程。
- 利用忽略列表: 将不需要版本控制的文件或文件夹添加到忽略列表,保持工作副本的整洁,并避免意外提交这些文件。确保提交了包含忽略规则的父文件夹,以便其他团队成员也能应用相同的规则。
- 不要直接在文件资源管理器中移动或删除版本控制下的文件: 始终使用 TortoiseSVN 的菜单或右键拖放功能来执行这些操作,以保留文件的历史记录。
- 定期提交属性修改: 如果你修改了文件夹的属性(如
svn:ignore
),记得提交这些修改。
总结
TortoiseSVN 作为一款优秀的 Windows SVN 客户端,通过与文件资源管理器深度集成,极大地降低了 SVN 的使用门槛。本教程详细介绍了 TortoiseSVN 的安装过程以及检出、更新、添加、删除、重命名/移动、提交、查看状态、查看日志和解决冲突等基本操作。掌握这些操作,你就可以高效地使用 SVN 进行个人文件管理和团队协作了。
版本控制是一个持续学习和实践的过程。随着你的使用经验增加,你会逐渐熟悉 SVN 的工作流,并可能进一步探索分支、合并等高级功能。但掌握了 TortoiseSVN 的基本操作,你就已经具备了进行规范版本控制的基础能力,这将显著提升你的工作效率和项目管理的可靠性。现在,就开始你的 TortoiseSVN 之旅吧!