安装 svn 客户端以开始协作使用 Subversion 作为版本控制系统的项目。
要安装客户端程序,您可以从源代码发行版中自行构建,也可以下载二进制包。您可以在 官方二进制包页面 上找到获取预构建 Subversion 客户端的网站列表。如果您想自己编译软件,请在 源代码 页面获取源代码。
安装客户端后,您应该能够通过发出 svn 命令来测试它。您应该看到以下输出
$ svn Type 'svn help' for usage.
现在您可以开始使用命令行客户端与远程仓库进行交互。
如果您不熟悉 Subversion,图形客户端可能更适合您。我们不维护此类客户端的列表;相反,我们建议您在网络上搜索 Subversion GUI 客户端。
仓库是一个版本控制数据库,通常驻留在服务器上,并且通常通过 Apache HTTP 服务器(通过 mod_dav_svn 模块)或 svnserve 服务器公开。仓库充当单一的事实来源,并且作为中央存储,它包含版本化数据的完整更改历史记录,以修订的形式。
仓库 URL 示例
工作副本是您用于与中央 Subversion 仓库交互的本地私有工作区。您使用工作副本修改项目的內容,并获取其他人提交的更改。
工作副本包含项目的數據,看起来并像您本地文件系统上的普通目录一样,但有一个主要区别 - 工作副本跟踪文件和目录中的状态和更改。您可以将工作副本视为具有版本控制功能的普通目录。工作副本在其根目录中有一个名为 .svn 的管理目录。管理目录包含 Subversion 管理版本控制功能所需的元数据。
您可以从同一个仓库或项目中创建任意数量的工作副本,并且可以包含任意组合的本地修改。
如果您想将现有的非版本化数据导入 SVN 仓库,您应该运行 svn import 命令。以下是一个示例
$ svn import https://svn.example.com/repos/MyRepo/MyProject/trunk -m "Initial project import"
要开始修改项目的數據,您必须创建版本化项目的本地副本。您可以使用命令行 svn 客户端或您喜欢的任何基于 GUI 的客户端。项目的本地副本称为工作副本,您可以通过发出 svn checkout 命令来创建它。以下是一个示例
$ svn checkout https://svn.example.com/repos/MyRepo/MyProject/trunk MyWorkingCopy
这样,您将获得名为 MyProject 的项目的树干的工作副本,该项目位于 MyRepo 存储库中。工作副本将位于您计算机上的 MyWorkingCopy 目录中。请注意,您可以检出分支或标签(假设它们已存在于存储库中),而不是检出树干。
您也可以获取整个 MyRepo 存储库的工作副本。但您应该避免这样做。一般来说,您不需要为您的工作拥有整个存储库的工作副本,因为您的工作副本可以立即切换到另一个开发分支。此外,Subversion 存储库可以包含许多不相关的项目,最好为每个项目设置一个专用工作副本,而不是为所有项目设置一个工作副本。
您不是唯一一个在项目上工作的人,对吧?这意味着您的同事也在对项目数据进行修改。为了保持最新状态并获取其他人提交的修改,您应该在工作副本中运行 svn update 命令。这样,您的工作副本将与存储库同步并下载同事所做的更改。
在将本地修改提交到存储库之前更新您的工作副本是一个好习惯。
大多数情况下,您将通过修改工作副本的内容来对项目数据进行修改。一旦您对修改感到满意并彻底审查了它们,您就可以将它们提交到中央存储库。
使用您喜欢的文本处理器、图形编辑器、音频编辑软件、IDE 等,像往常一样修改文件。一旦您将更改保存到磁盘,Subversion 将自动识别它们。
为了发布您在工作副本中所做的更改,您应该运行 svn commit 命令。
在提交更改之前,请查看您的更改!使用 svn status 和 svn diff 命令来查看更改。
以下是一个提交命令的示例
$ svn commit -m "My Descriptive Log Message"
请注意 -m (--message) 选项。您应该始终包含一个描述性的提交日志消息。它应该帮助包括您自己在内的其他人理解您进行此提交的原因。在日志消息中包含更改摘要也是一个好主意。
您可以在工作副本中对项目的任何数据执行任何操作,但涉及复制、移动、重命名和删除的操作必须使用相应的 svn 命令执行。
Subversion 不使用启发式跟踪来跟踪工作副本中的树更改。Subversion 需要显式跟踪树更改。如果您使用常规文件系统命令执行树更改(例如移动或复制),Subversion 将不会知道此操作。为了跟踪树更改,Subversion 应该知道它们。
使用 svn move 或 svn rename 命令移动和重命名文件和目录。
$ svn move foo.cs bar.cs
命令 svn rename 是 svn move 的别名。
使用 svn revert 命令丢弃您未提交的本地更改。
$ svn revert foo.cs
丢弃的未提交更改将永远丢失。您将无法恢复已还原的更改。谨慎使用 svn revert!
您应该使用 svn copy 命令来创建分支和标签。这与用于复制工作副本和存储库中的项目的相同命令,当您希望它们在历史上相关时。
命令 svn copy 用于创建分支,因为分支从技术上讲是您复制的源代码的副本。但是,它与您在本地文件系统中复制文件时熟悉的普通副本不同。Subversion 存储库中的分支被称为 "廉价副本",类似于符号链接。因此,创建新分支只需最少的时间即可完成,并且在 Subversion 存储库中几乎不占用空间。您可以创建分支并将其用于您想要的任何更改,无论更改的大小和范围如何。
在 Subversion 中创建分支很简单。最简单的方法是,创建新分支需要您针对远程存储库的 URL 运行命令。例如,让我们从主干分支创建一个新分支
$ svn copy https://example.com/MyRepo/trunk https://example.com/MyRepo/branches/MyNewBranch -m "Creating a new branch"
您可以在计算机上创建 Subversion 存储库,并使用 file:// 方案在本地与它交互。这种方法可以帮助您在本地使用 Subversion 来跟踪个人文件和单人项目。
以下过程为现有项目创建了一个最小环境。它将包含项目的目录转换为新创建的本地 Subversion 存储库的工作副本。因此,您可以修改工作副本中的文件并在本地存储库中跟踪更改。
在 Unix 上
$ mkdir -p $HOME/.svnrepos/
$ svnadmin create ~/.svnrepos/MyRepo
$ svn mkdir -m "Create directory structure." \ file://$HOME/.svnrepos/MyRepo/trunk \ file://$HOME/.svnrepos/MyRepo/branches \ file://$HOME/.svnrepos/MyRepo/tags
$ cd $HOME/MyProject
$ svn checkout file://$HOME/.svnrepos/MyRepo/trunk ./
$ svn add --force ./
$ svn commit -m "Initial import."
$ svn update
在 Windows 上
mkdir C:\Repositories
svnadmin create C:\Repositories\MyRepo
svn mkdir -m "Create directory structure." ^ file:///C:/Repositories/MyRepo/trunk ^ file:///C:/Repositories/MyRepo/branches ^ file:///C:/Repositories/MyRepo/tags
cd C:\MyProject
svn checkout file:///C:/Repositories/MyRepo/trunk .
svn add --force ./
svn commit -m "Initial import."
svn update
另请参阅 Subversion 手册中的快速入门说明。
如果您是 Apache Subversion (SVN) 的新手,请阅读使用 Subversion 进行版本控制手册 (SVNBook)。SVNBook 是 SVN 的圣经,是 Subversion 用户和管理员的必读手册。您可以在 https://svnbook.subversion.org.cn/en/1.8/ 找到 SVNBook 1.8