ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Subversion (SVN) 命令行速查手册:从工作副本操作到仓库管理的一站式参考

Subversion (SVN) 命令行速查手册:从工作副本操作到仓库管理的一站式参考 文档知识库教程开发工具【免费下载链接】reference为开发人员分享快速参考备忘清单(速查表)项目地址https://gitcode.com/jaywcjlove/reference点击查看免费下载本篇速查手册以开源仓库 jaywcjlove/reference 中的 docs/subversion.md 为骨架整理而成系统梳理了 Subversion 版本控制系统的常用命令行指令覆盖svn客户端日常操作添加、提交、更新、合并、差异、属性、日志、svnadmin服务端管理创建、转储、加载仓库以及工作副本状态码与参数快捷方式。读完本篇你可以在不翻阅厚本手册的情况下快速完成 SVN 从入门到仓库运维的绝大多数实战操作。SVN 工具链组件一览Subversion 并非只有一个可执行文件而是一整套围绕仓库repository与工作副本working copy设计的工具链。本仓库的 docs/subversion.md 列出了各核心组件及其职责| 名称 | 说明 | | :- | :- | |svn| 命令行程序客户端主程序 | |svnversion| 查看工作副本的修订版本号 | |svnlook| 检查存储库查看仓库内部信息 | |svnadmin| 存储库管理创建、转储、加载 | |svndumpfilter| 过滤存储库流dump/load 数据流过滤 | |mod_dav_svn| Apache HTTP Server 模块提供 HTTP(S) 访问能力 | |svnserve| SVN 独立服务器使用 svn:// 协议 | |svnsync| 镜像仓库仓库级复制同步 |从源码结构看这些工具分别面向客户端、服务端与管理端三类场景日常开发主要使用svn搭建或维护仓库时使用svnadmin、svnlook、svndumpfilter对外提供服务时则依赖svnserve或mod_dav_svn。在仓库首页 README.md 的Git 版本控制分类中Subversion (SVN) 与 Git、Github、Github CLI、Github Actions、Gitlab CI/CD 并列方便在各类版本控制工具之间横向对照查阅。访问仓库的协议SVN 仓库可以通过多种协议访问不同协议对应不同的部署方式与安全级别| 协议 | 说明 | | :- | :- | |file://| 本地文件系统直接访问 | |http://| HTTP 访问Apache mod_dav_svn | |https://| HTTPS 访问SSL 加密 | |svn://| SVN 原生协议svnserve 服务 | |svnssh://| 基于 SSH 隧道的 SVN 协议 |选择建议单机或个人使用可选file://团队内网协作可用svn://或svnssh://后者复用 SSH 账号体系无需额外维护用户密码需要跨公网访问、浏览器查看仓库时推荐http(s)://并配合 Apache 的认证与 SSL 配置。签出与建立工作副本一切日常开发都从签出checkout开始它将仓库中的目录复制到本地形成带.svn元数据的工作副本$ svn checkout /path/to/repository/folder # 创建“folder”的工作副本 $ svn checkout /path foldername # 签出到新文件夹“foldername”指定本地目录名签出成功后本地目录即与仓库建立关联后续的添加、修改、提交、更新等操作都在该工作副本内进行。svn checkout也可以写作简写形式svn co。添加文件或文件夹新文件必须先svn add纳入版本控制才能被后续的commit提交$ svn add * # 添加文件夹中的所有项目然后递归忽略版本目录 $ svn add itemname # 如果 itemname 是文件夹则所有子文件夹和文件也会被添加 $ svn add * --force # 强制递归到版本化目录把已被忽略或已版本化的内容也纳入注意区分svn add只是把文件登记进版本控制标记为待添加真正写入仓库历史的是后续的svn commit。--force常用于目录本身已受版本控制、但需要强制递归添加其中新文件的情形。将更改提交到存储库svn commit是 SVN 的核心操作把工作副本中的更改写入仓库并产生新的修订版本revision$ svn commit /path # 提交对文件或文件夹的更改 $ svn commit -m Message /path # 携带提交消息“Message”提交 $ svn commit -N /path # 提交对文件夹的更改而不递归仅提交该目录本身参数说明-m Message必填或配合--editor-cmd使用用于书写提交说明也是后续svn log追溯变更的依据-N/--non-recursive限定只提交指定目录本身不包含其子目录中的更改。提交后 SVN 会返回新的修订号如Committed revision 10.该修订号可用于后续的diff、merge、update -r等操作。从存储库更新工作副本与他人协作时提交前通常先更新把仓库中的最新更改同步到本地避免冲突$ svn update /path # 更新整个路径到最新版本 $ svn update -r9 /path # 更新至修订版 9指定历史版本更新时若本地修改与仓库修改落在同一行SVN 会标记冲突状态码C需要手动resolve解决后再提交。养成先 update 后 commit的习惯是减少冲突的关键。删除、复制和移动$ svn delete /path # 删除路径提交后从仓库移除 $ svn -m Deleting delete /path # 删除并显示提交消息“正在删除”-m 位置在子命令前 $ svn copy sourcepath targetpath # 将源复制到目标常用于打分支/标签 $ svn move sourcepath targetpath # 将源移动到目标即重命名/移动文件要点svn delete、svn copy、svn move都支持-m提交消息也可不写-m先在本地区域操作随后统一svn commit提交svn copy是 SVN 中创建分支branch与标签tag的标准方式仓库会记录复制来源便于后续合并mergesvn move等价于复制 删除原文件SVN 会保留文件的历史重命名文件后依然可以用svn log追溯旧路径上的变更。合并更改合并merge用于把某个分支、某段修订范围或两个 URL 之间的差异应用到当前工作副本$ svn merge -r 2:7 item /path/file # 将“item”在修订版 2 到 7 之间的差异应用到“/path/file” $ svn merge url1 url2 /path/file # 将“url1”和“url2”之间的差异应用到“/path/file”使用场景把主干trunk的修复同步到分支或把分支功能合并回主干。合并后需svn status检查结果再svn commit提交合并产物。相比 Git 的 merge 语义SVN 的 merge 更接近应用补丁差异因此分支合并前建议先svn merge --dry-run或svn mergeinfo评估影响范围。查看文件之间的差异svn diff在提交前检查自己的改动或对比任意两个修订版本$ svn diff /path/file # 查看“/path/file”中的未提交更改 $ svn diff /path/file2 /path/file7 # 比较修订版 2 和 7 中的文件内容 $ svn diff -r 2:7 /path/folder # 比较修订版 2 和 7 之间文件夹中所有文件的差异其中2是peg revision钉住修订号写法用于指定某个历史版本-r 2:7表示修订号区间。svn diff也可通过-x参数透传底层 diff 工具的选项如忽略空白。日志与责任Log 与 Blame追溯历史是版本控制的重要能力$ svn log /path # 显示存储库中该路径的日志消息含修订号、作者、日期、消息 $ svn blame /path # 显示路径每一行内容是由哪个修订版本、哪次提交引入的svn log常配合-r限定修订范围、-v显示变更文件列表svn blame别名svn annotate/svn praise在代码审查、定位缺陷引入点时非常实用逐行标注修订号与作者。属性Property操作SVN 除了版本化文件内容还支持给文件/目录附加任意属性property常用于设置可执行位、MIME 类型、自定义元数据等| 命令 | 说明 | | :- | :- | |$ svn proplist /path| 列出路径上的所有属性 | |$ svn propset PROP VAL /path| 将属性PROP设置为值VAL| |$ svn propget PROP /path| 获取属性PROP的当前值 | |$ svn propedit PROP /path| 用编辑器编辑属性PROP| |$ svn propdel PROP /path| 删除属性PROP|经典用法示例svn propset svn:executable ON script.sh设置可执行属性svn propset svn:mime-type image/png logo.png设置 MIME 类型避免二进制文件被当作文本进行 diff。注意属性修改同样需要svn commit才会写入仓库。恢复本地未提交更改操作失误时可用revert撤销尚未提交的本地修改$ svn revert /path/filename # 恢复对文件的更改丢弃未提交修改 $ svn revert -R /path/folder # 递归恢复对文件夹的更改revert只作用于未提交的更改工作副本层面不会影响仓库历史递归版本-R会回滚整个目录树下的全部本地改动请谨慎使用。冲突处理与其它杂项命令协作更新或合并时可能产生冲突以下命令用于处理冲突与日常维护| 命令 | 说明 | | :- | :- | |$ svn resolve /path| 解决冲突标记为已解决 | |$ svn cleanup /path| 递归清理删除残留锁并完成中断的操作 | |$ svn lock /path| 锁定路径防止他人修改 | |$ svn unlock /path| 解锁路径 | |$ svn cat /path| 查看输出文件内容 | |$ svn status /path| 获取路径状态 |实践要点冲突文件会出现C状态并生成.mine、.rOLD、.rNEW等临时文件手动编辑取舍后执行svn resolve --accept working /path或--accept theirs-full/mine-full标记解决再svn commitsvn cleanup通常在断电、进程被杀等异常中断后执行用于清理工作副本中的残留锁svn lock/svn unlock适合二进制文件等无法合并的场景锁定期间其他用户无法提交该路径。将本地文件夹导入存储库对于尚未建立工作副本、想把已有目录一次性纳入仓库的场景使用import$ svn import folder /path/to/repository # 将本地 folder 的内容导入到仓库路径import直接以当前目录内容创建仓库中的首个版本不需要先checkout。导入后建议再svn checkout一份工作副本用于后续开发。工作副本状态码svn status输出中每个文件第一列的字符表示其状态。掌握这套状态码是读懂 SVN 输出、定位问题的前提| 状态 | 说明 | | :- | :- | | 空格 | 无修改 | |A| 添加已 add待提交 | |D| 删除已 delete待提交 | |M| 修改Modified | |R| 已更换物品Replaced | |C| 冲突中Conflicted | |X| 外部定义外部链接目录 | |I| 被忽略Ignored | |?| 不在存储库中未版本化 | |!| 物品缺失Missing被手动删除或损坏 | |~| 对象类型已更改如文件变目录 |日常高频状态是A新增待提交、M修改待提交、D删除待提交、?未版本化文件需先svn add、C冲突需 resolve。svn status也常用参数-u显示与仓库的差异*表示远端有更新。参数快捷方式SVN 常用长选项都有对应的单字符短选项速查如下| 参数 | 说明 | | :- | :- | |-m Message|--message提交/日志消息 | |-q|--quiet安静模式减少输出 | |-v|--verbose详细输出 | |-r|--revision修订版本 | |-c|--change指定单个变更如-c 5等价于-r 4:5 | |-t|--transaction事务配合 svnlook 使用 | |-R|--recursive递归处理子目录 | |-N|--non-recursive不递归 |Subversion 帮助系统记不住参数时随时调用内置帮助$ svn help # 列出全部子命令及简要说明 $ svn help import # 显示“import”子命令的详细帮助用法、参数、示例svn help 子命令是对单个命令的完整说明覆盖所有可选参数与示例是命令行环境下的第一手参考资料。存储库管理svnadmin仓库管理员使用svnadmin完成仓库的创建、备份与迁移$ svnadmin create /path/to/repository # 创建存储库初始化目录结构与配置 $ svnadmin setlog path -r 7 message.txt # 修改第 7 版修订版本的变更日志消息内容取自 message.txt 文件 $ svnadmin dump repository filename # 将存储库的全部内容转储dump为可移植的文件流 $ svnadmin load repository filename # 将 dump 文件的内容加载load到存储库管理要点svnadmin create会在目标目录生成conf/、db/、hooks/等子目录其中hooks/存放提交钩子脚本如强制提交消息格式、触发 CIsvnadmin dump/svnadmin load是 SVN 备份与迁移的标准组合拳先把仓库dump成文本流再在新服务器上svnadmin createload实现无损搬迁若只需过滤掉历史中的某个路径可配合svndumpfilter对 dump 流做二次加工。在 reference 仓库中的定位与延伸阅读本篇内容对应仓库中的 docs/subversion.md属于Git 版本控制分类下的速查清单。仓库通过refs-cli见 package.json将各docs/*.md编译为静态 HTML 站点采用统一的页面大标题 介绍 H2 分类 H3 卡片结构参考 docs/quickreference.md 的排版说明因此本篇所有表格与代码块均可在编译后的页面中直接以卡片形式查阅。需要横向对比其它版本控制工具时可以继续阅读Git 备忘清单git init/clone/add/commit/reset等 Git 日常命令Github 备忘清单GitHub 平台操作与协作流程Github CLI 备忘清单gh命令行工具Github Actions 备忘清单CI/CD 工作流语法Gitlab CI/CD 备忘清单GitLab 流水线配置。常用工作流速查最后将本文内容串联成三条最常用的完整流程首次接手项目签出 → 修改 → 提交svn checkout https://svn.example.com/repo/project/trunk project cd project svn add newfile.txt # 新文件先登记 svn status # 确认状态A / M / ? / C svn diff # 复查改动 svn commit -m add feature # 提交分支开发与合并svn copy https://svn.example.com/repo/project/trunk \ https://svn.example.com/repo/project/branches/feature -m create branch svn checkout https://svn.example.com/repo/project/branches/feature # ... 在分支上开发并提交 ... svn merge -r 10:HEAD https://svn.example.com/repo/project/trunk svn status svn resolve --accept working conflicted-file # 如有冲突 svn commit -m merge trunk into feature仓库备份与迁移svnadmin dump /var/svn/repos repos.dump svnadmin create /var/svn/newrepos svnadmin load /var/svn/newrepos repos.dump以上命令均以当前仓库文档 docs/subversion.md 中的内容为准配合svn help可随时查阅更详细的参数说明。赞分享文档知识库教程开发工具【免费下载链接】reference为开发人员分享快速参考备忘清单(速查表)项目地址https://gitcode.com/jaywcjlove/reference点击查看免费下载相关推荐Subversion (SVN) 命令行速查与实战指南从检出到仓库管理的完整备忘清单Subversion SVN 命令行速查与实战指南从检出到仓库管理的完整备忘清单 本篇技术指南以当前仓库 docs/subversion.md https:/文档教程Windows CMD 命令速查手册从基础操作到系统网络运维的完整参考Windows CMD 命令速查手册从基础操作到系统网络运维的完整参考 本手册整理自 reference 项目cheatsheets.zip中的 wind文档教程知识库告别终端操作繁琐Zellij命令行参数速查手册告别终端操作繁琐Zellij命令行参数速查手册 Zellij 是一款功能强大的终端工作区工具A terminal workspace with batter开发工具CLI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表