
SVNSubversion是集中式版本控制系统在芯片设计/验证团队中广泛使用。以下按使用场景分类详解常用命令。一、基础概念速览概念说明Repository仓库服务器端集中存储所有版本历史Working Copy工作副本本地检出的工作目录Revision版本号全局递增的整数版本号r1, r2, ...HEAD仓库中最新版本BASE工作副本对应的版本trunk/branches/tags主干/分支/标签约定目录结构二、检出与初始化1. checkout检出—— 首次获取代码# 检出整个仓库 svn checkout url svn co url # co 是简写 # 检出到指定目录 svn co url my_project # 检出指定版本 svn co -r 100 url # 只检出某个子目录SVN 的优势 svn co https://repo/project/rtl/2. import导入—— 把本地目录首次上传到仓库svn import ./local_dir url -m initial import三、查看状态与信息1. status查看本地状态★ 最常用svn status # 查看工作副本改动 svn st # 简写 svn status -u # 同时显示服务器更新带 * 标记 svn status -q # 只显示有改动的文件状态码含义符号含义MModified已修改AAdded已添加待提交DDeleted已删除待提交?未纳入版本控制!文件丢失被非 svn 方式删除CConflict冲突*服务器有更新配合 -uGmerGed合并成功2. info查看版本信息svn info # 显示 URL、版本号、作者等 svn info file3. log查看提交历史★svn log # 查看历史记录 svn log -l 10 # 只看最近 10 条 svn log -v # 显示每次改动的文件列表 svn log -r 100:200 # 查看版本 100~200 svn log file # 查看某文件的历史 svn log -r 100 -v # 查看版本100的详细改动4. diff查看差异★svn diff # 本地改动 vs BASE svn diff file # 某文件的改动 svn diff -r 100:200 # 版本100与200的差异 svn diff -r 100 file # 工作副本与版本100的差异 svn diff -r PREV:HEAD file # 上一版与最新版差异四、更新与提交日常核心1. update更新★ 最常用svn update # 更新到最新版本HEAD svn up # 简写 svn up -r 100 # 更新到指定版本 svn up file # 只更新某文件好习惯每天开始工作前先svn up提交前也先svn up减少冲突。2. commit提交★ 最常用svn commit -m 提交说明 # 提交所有改动 svn ci -m fix bug # ci 是简写 svn commit file -m 说明 # 只提交某文件 svn commit dir1 file2 -m 说明 # 提交多个指定项重要-m提交说明是强制要求团队规范写清楚改了什么。五、增删改与移动1. add添加新文件到版本控制svn add file # 添加单个文件 svn add dir # 添加目录含内容 svn add --force . # 添加当前目录所有未跟踪文件 svn add *.v # 添加所有 .v 文件新建文件后必须svn add再commit才会进仓库。2. delete删除svn delete file # 删除文件标记删除 svn del file # 简写 svn rm file # 同义 svn delete url -m 说明 # 直接删除仓库中的文件3. copy复制常用于建分支/标签svn copy src dst -m 说明 svn cp trunk branches/dev -m create dev branch4. move / rename移动或重命名svn move src dst # 移动/重命名保留历史 svn mv old.v new.v # 重命名文件注意删除、移动、重命名都要用 svn 命令不要直接用系统命令rm/mv否则丢失版本追踪。六、撤销与恢复1. revert撤销本地改动★ 常用svn revert file # 撤销单个文件的本地修改 svn revert -R . # 递归撤销当前目录所有改动 svn revert --depthinfinity . # 同上⚠️ revert 会丢弃所有未提交改动恢复到 BASE 版本不可逆谨慎使用。2. 恢复到历史版本# 方法1反向合并撤销某次提交 svn merge -r 200:199 . # 撤销版本200的改动 svn commit -m revert r200 # 方法2把文件恢复到旧版本 svn up -r 100 file # 临时回退某文件 svn merge -r HEAD:100 file # 把文件内容恢复到版本1003. cleanup清理锁定/中断状态★ 实用svn cleanup # 清理工作副本解决locked错误当 SVN 操作中断导致工作副本被锁定提示 working copy locked时用此命令修复。七、冲突处理当 update/merge 出现冲突状态Csvn update # 出现冲突时会生成几个文件 # file.mine 你的版本 # file.rOLD 旧版本 # file.rNEW 服务器新版本 # file 含冲突标记的文件解决步骤# 1. 手动编辑 file解决冲突标记 ( ) # 2. 标记冲突已解决 svn resolve --accept working file # 或 svn resolved file # 3. 提交 svn commit -m resolve conflict冲突时的交互选项update 时会提示选项含义(p) postpone推迟稍后手动解决(mf) mine-full全部用我的版本(tf) theirs-full全部用服务器版本(e) edit手动编辑(s) show all显示所有选项八、分支与标签trunk/branches/tags1. 标准目录结构repo/ ├── trunk/ # 主干主开发线 ├── branches/ # 分支特性开发、bug 修复 └── tags/ # 标签发布版本快照2. 创建分支svn copy https://repo/trunk \ https://repo/branches/feature_x \ -m create feature_x branch3. 创建标签如流片版本svn copy https://repo/trunk \ https://repo/tags/v1.0_tapeout \ -m tag v1.0 tapeout4. 分支合并回主干# 切换到 trunk 工作副本 svn merge https://repo/branches/feature_x svn commit -m merge feature_x to trunk # 合并指定版本范围 svn merge -r 100:150 https://repo/branches/feature_x5. switch切换工作副本到其他分支svn switch https://repo/branches/feature_x svn sw https://repo/trunk # 切回主干九、锁定机制处理二进制文件★ 芯片团队常用二进制文件库、版图、文档无法合并需独占锁定svn lock file -m editing # 锁定文件 svn unlock file # 解锁 svn unlock --force file # 强制解锁解他人的锁 svn status # 带 K 表示自己持有锁 svn info file # 查看锁信息锁状态码含义K我持有锁O他人持有锁T锁被偷被别人 breakB锁失效broken十、其他实用命令1. list列出仓库内容不下载svn list url # 列出目录内容 svn ls url # 简写 svn ls -v url # 详细信息 svn ls -R url # 递归列出2. cat查看仓库中文件内容svn cat url # 查看仓库文件内容 svn cat -r 100 file # 查看某版本的文件内容3. blame / praise逐行查看作者★ 调试找责任人svn blame file # 显示每行由谁、哪个版本修改 svn praise file # 同义 svn annotate file # 同义4. propset / propget属性操作# 设置忽略文件类似 .gitignore svn propset svn:ignore *.log . svn propset svn:ignore -F ignore_list . # 从文件读取忽略列表 svn propget svn:ignore . # 查看忽略属性 svn propedit svn:ignore . # 编辑忽略属性 # 设置可执行属性 svn propset svn:executable ON script.sh5. export导出无版本信息的纯净副本svn export url dir # 导出干净副本不含 .svn svn export -r 100 url dir # 导出指定版本用于发布/打包不含.svn隐藏目录。十一、常用命令速查表命令简写功能svn checkoutco检出svn updateup更新svn commitci提交svn statusst查看状态svn add—添加svn deletedel/rm删除svn revert—撤销改动svn diffdi查看差异svn log—查看历史svn info—版本信息svn listls列出内容svn copycp复制/建分支svn movemv移动/重命名svn merge—合并svn switchsw切换分支svn cleanup—清理锁定svn lock/unlock—加锁/解锁svn blame—逐行作者svn resolve—解决冲突十二、典型工作流程日常开发流程# 1. 早上更新到最新 svn up # 2. 修改代码、添加新文件 svn add new_file.v # 3. 查看自己的改动 svn st svn diff # 4. 提交前再次更新避免冲突 svn up # 5. 解决可能的冲突后提交 svn ci -m add feature xxx二进制文件编辑流程芯片团队svn up svn lock design.gds -m editing layout # 先锁定 # ... 编辑文件 ... svn ci design.gds -m update layout # 提交自动解锁十三、实用技巧与注意事项技巧说明提交前先 update减少冲突养成习惯提交信息要清晰团队协作和追溯的关键小步提交每个逻辑改动单独提交便于回退不提交临时文件用 svn:ignore 忽略 log/编译产物二进制文件加锁防止多人同时改无法合并遇到锁定用 cleanuplocked 错误的万能解法不要手动删 .svn会破坏工作副本删除/移动用 svn 命令不要用系统 rm/mv流片打 tag重要里程碑用 tag 固化版本十四、常见问题排查问题解决方法working copy lockedsvn cleanup文件状态 !丢失svn revert file 恢复冲突 C手动解决后 svn resolve --accept working想忽略某些文件svn propset svn:ignore误提交想撤销svn merge -r N:N-1 . 反向合并不小心 revert 了无法恢复未提交改动已丢失谨慎总结日常最高频 5 条命令svn up # 更新 svn st # 看状态 svn diff # 看改动 svn ci -m ... # 提交 svn add # 加新文件芯片团队特色善用svn lock二进制文件锁定、svn co 子目录部分检出、svn copy ... tags/流片版本固化这正是 SVN 在 IC 行业受青睐的核心能力。