SVN(Subversion)教程:版本控制入门
什么是 SVN?
SVN(Subversion)是一个集中式版本控制系统,用于管理代码、文档等文件的版本历史。它帮助团队协作开发,提供版本跟踪、文件还原和冲突解决等功能,是 Git 出现前非常流行的版本控制工具。
SVN 的基本概念
-
版本库(Repository):
- 存储项目文件的中央服务器,记录文件的所有版本历史。
-
工作副本(Working Copy):
- 从版本库检出的本地副本,开发者可以在本地修改、提交或更新。
-
版本号(Revision Number):
- 每次提交(Commit)会为版本库分配一个唯一的版本号,方便追踪文件的变化。
-
提交(Commit):
- 将本地工作副本的更改推送到版本库中,更新中央存储。
-
更新(Update):
- 将版本库中最新的更改同步到本地工作副本。
-
冲突(Conflict):
- 多人修改同一文件时可能出现冲突,需要手动解决。
SVN 的安装
在 Linux(Ubuntu)安装
执行以下命令安装 SVN:
bash
sudo apt update
sudo apt install subversion
在 Windows 安装
下载并安装 TortoiseSVN,它提供了用户友好的图形界面。
使用 SVN 的基本操作
1. 创建版本库(Repository)
如果你想本地创建一个 SVN 版本库,可以执行以下命令:
bash
svnadmin create /path/to/repository
2. 检出代码库(Checkout)
将远程版本库的文件检出到本地工作副本:
bash
svn checkout <repository_url> /path/to/working_copy
示例:
bash
svn checkout https://example.com/svn/project_name
3. 查看文件状态
在本地工作副本中,可以查看文件的修改状态:
bash
svn status
输出示例:
? 新文件.txt # 文件未被跟踪
M 修改的文件.txt # 文件已被修改
4. 添加文件到版本库
新文件需要添加到版本库后才能提交:
bash
svn add 文件名
示例:
bash
svn add 新文件.txt
5. 提交更改
将本地修改提交到版本库:
bash
svn commit -m "提交说明"
6. 更新工作副本
获取版本库中的最新更改:
bash
svn update
7. 查看日志
查看文件或项目的版本提交历史:
bash
svn log
保持 SVN 登录
为了避免每次操作都需要输入用户名和密码,可以通过以下方法保存 SVN 登录信息:
方法 1:启用自动保存登录信息
SVN 默认支持保存登录信息,但需要确认配置文件中此功能已启用。
操作步骤:
-
打开 SVN 配置文件:
bashnano ~/.subversion/servers
-
找到
store-auth-creds
设置,确保其值为yes
:plaintextstore-auth-creds = yes
-
保存文件并退出(按
Ctrl+O
,然后按回车,再按Ctrl+X
退出)。
方法 2:首次登录时选择保存凭据
首次运行 svn checkout
或其他需要登录的操作时,输入用户名和密码后,SVN 通常会询问是否保存凭据:
Store password unencrypted (yes/no)?
输入 yes
后,SVN 将登录信息保存到本地,下次操作时无需重新输入。
方法 3:使用 SSH 密钥登录(适用于 svn+ssh 协议)
如果 SVN 服务器使用 svn+ssh
协议,可以通过配置 SSH 密钥免去输入密码的麻烦:
-
生成 SSH 密钥:
bashssh-keygen -t rsa -b 4096 -C "your_email@example.com"
-
将公钥上传到服务器:
bashssh-copy-id user@svn-server-address
-
配置完成后,使用
svn+ssh
登录时无需输入密码。
方法 4:手动删除或查看已保存的凭据
-
SVN 将认证信息存储在
~/.subversion/auth/
目录下。可以通过以下命令查看:bashls ~/.subversion/auth/
-
如果需要清除已保存的登录信息,删除对应的凭据文件。例如:
bashrm -rf ~/.subversion/auth/svn.simple
高级操作
1. 创建分支
SVN 的分支是通过复制实现的:
bash
svn copy <repository_url/trunk> <repository_url/branches/branch_name> -m "创建分支"
2. 合并分支
在工作副本中合并分支的更改:
bash
svn merge <repository_url/branches/branch_name>
3. 解决冲突
当多人修改同一文件时可能会出现冲突,更新文件后可能看到冲突标记(如 <<<<<<<
、>>>>>>>
)。此时可以手动解决冲突并标记解决状态:
bash
svn resolve --accept working 文件名
总结
SVN 是一款经典的版本控制工具,适合小型团队或集中管理的项目。通过掌握 SVN 的基本操作以及如何保存登录信息,你可以显著提升开发效率。