补充说明
svn 是 Apache Subversion 的客户端,采用“集中式”版本控制模型:所有历史都保存在服务器仓库中,工作副本从仓库检出,提交直接写回服务器。它在文档、二进制文件和企业内网项目中仍很常见,与 Git 的分布式模型不同。
日常流程与 Git 类似但语义有别:svn update 拉取他人改动,svn commit 直接提交到仓库,没有本地提交一说;svn add 只把新文件标记为待加入,必须再 commit 才真正入库。冲突需要 svn resolve --accept=... 明确标记解决。
常用目录约定是 trunk/(主干)、branches/(分支)、tags/(标签),分支和标签本质上都是廉价的仓库内拷贝。认证信息缓存在 ~/.subversion/auth/,切换账号时可删除对应缓存。
语法
svn 子命令 [选项] [参数]
常用子命令
checkout(co):从仓库检出一份工作副本update(up):把工作副本更新到最新版本status(st):查看工作副本的修改状态add:把新文件或目录纳入版本控制delete(rm):从版本控制中删除commit(ci):提交改动到仓库log:查看提交历史diff:查看差异revert:撤销本地未提交的修改info:显示工作副本或 URL 的信息merge:合并分支改动export:导出不含.svn目录的干净副本switch(sw):把工作副本切换到另一个 URL
实例
# 检出一个仓库
svn checkout https://svn.example.com/repo/trunk myproject
# 查看当前修改
svn status
# 添加文件并提交
svn add newfile.c
svn commit -m "add newfile.c"
# 更新到最新版本
svn update
# 撤销某个文件的本地修改
svn revert src/main.c
# 查看最近 5 条日志
svn log -l 5
# 导出不含版本控制元数据的副本
svn export https://svn.example.com/repo/trunk /tmp/release