IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

SVN小记

淡水河边的博客 2010-06-18 13:33:01 累计浏览 3,374 次
本机暂存

    名词解释:

    修订版(revision):可以认为是某个文件在其生命周期内各个保存的快照,每个快照和一个时间区间对应。

    版本库(Repository):存放修订版的数据库

    本地工作拷贝(Local working copy):修订版在本地的副本

    版本的检入?heck in):本地副本提交到服务器的版本库

    检出?heck out):从服务器的版本库中取出修订版成为本地副本

    版本号的来源:有两种策略,基于文件的计数和基于仓库的计数,subversion使用后者

    标签(Tags):为版本加一个名字,便于检出

    分支(Branches):修订版打分支,以后可以平行修改,互不干扰

    合并(Merging):将分支的修订版合并为一个新的修订版

    锁(Locking):为修订版枷锁

    冲突?onflict):并发版本控制时防止修订版混乱的错误机制

    创建版本库

    创建服务器端版本库

    命令行:

    svnadmin create file_path/repo_name

    初始导入(import)

    通过命令行导入:

    svn import -m “init import” http://10.0.0.6/svn/teaching/

    该命令可将当前路径下文件导入到版本库中。

    检出(checkout)

    通过命令行检入:

    svn co http://10.0.0.6/svn/teaching/ mysvntest

    或者:

    svn checkout http://10.0.0.6/svn/teaching/ mysvntest

    最后取出来的新目录名,不给定就会用路径的最后一个目录名(如这里的teaching,这里给了就是mysvntest)

    保持更新(update)

    命令行:

    svn update

    或者

    svn up

    多人合作时:

    更新要经常频繁的做,尽量让问题及早暴露,便于处理。

    提交代码前要更新,否则容易产生版本冲突。

    通过第一步import后的那个目录并没有默认建立svn与远程的关系,需要手动从服务器checkout回服务器的版本到本地, 才算正式建立与远程的关系,才能直接 svn up……

    添加(add)

    命令行:

    svn add file_path

    告知svn服务器,添加目录和/或文件到服务器上,这个操作类似SQL的insert,但是并没有真的操作,直到commit。

    提交改动(commit)

    相当于通用概念:检入(checkin)。

    命令行:

    svn commit

    或者:

    svn ci

    要求:一般要注明修改的原因

    svn ci -m “修改bug #224″

    要求:提交之前要做更新

    svn up

    svn ci -m “修改bug #224″

    还原改动

    对应提交(commit),要有类似回滚(rollback)的操作。

    svn revert

     “还原”已提交的改动

    revert只适合未提交的情况。

    如果已经提交,发现问题,要回退到之前的修订版。

    首先:

    svn up

    让本地工作拷贝更新到最新状态。

    然后:

    svn log your_file_path

    查看文件日志,这时候提交时填写的说明信息就派上用场了。

    再,查看两个修订版之间的不同:

    svn diff -r 旧修订版序号:新修订版序号 your_file_path

    决定用哪个旧的修订版号后,用旧的修订版号文件覆盖新的修订版号文件。

    svn merge -r 新修订版序号:旧修订版序号 your_file_path

    还需要:

    svn commit -m “恢复到某修订版(某修订版作废)”

    拷贝文件和目录

    命令行:

    svn copy path/file_name newpath/new_file_name

    svn commit -m “xxxx”

    或者:

    svn cp path/file_name newpath/new_file_name

    svn commit -m “xxxx”

    svn的copy,是很重要的工具,版本分支和标签等概念都通过它实现。

    重命名目录/文件

    命令行:

    svn move file_name new_file_name

    或者:

    svn mv file_name new_file_name

    处理合并冲突

    svn默认不对文件加锁。

    如果不同人编辑了同一个文件的不同部分,提交时会自动合并。

    如果不同人编辑了同一个文件的同一部分,后提交者会报告合并冲突。

    解决方法(人工仲裁):

    放弃改动;

    坚持你的改动,找到.mine的文件名,恢复为原文件名,然后执行:

    svn resolved file_name

    注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的相关文件,然后让 PATH 可以再次提交。

    删除文件

    将本地工作拷贝删除。

    命令行:

    svn delete file_path

    或者:

    svn del file_path

    版本库创建策略

    单一的版本库保存一个项目。

    单一的版本库保存多个项目。

    多个版本库。

    使用标签和分支

    在svn中标签和分支都源于copy命令。

    3个约定俗成的目录:

    trunk:主干

    branches:分支

    tags:标签

    发布分支:

    svn cp -m “创建用于实现radio标签的分支” https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_1 https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_2

    切换分支:

    svn switch https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_2

    合并分支需要两个步骤:

    合并操作

    svn merge -r 33:HEAD https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_2

    或者:

    svn merge https://easymorse-simpletag.googlecode.com/svn/trunk/simpletag@HEAD https://easymorse-simpletag.googlecode.com/svn/branches/simpletag_select_1@HEAD

    提交。

同分类推荐文章

  1. 科技爱好者周刊(第 401 期):如何赚到10亿美元 (2026-06-26 08:05:38)
  2. 如何做决策 - 从 Go 的一个 issue 说起 (2026-06-26 08:00:00)
  3. Seven Player:Windows上播放115网盘视频的增强工具 (2026-06-09 00:06:47)

查看更多 开发者 文章 →

建议继续学习

  1. 利用find和sed批量替换文件内容 (累计阅读 11,460)
  2. 最近总结的一些技巧(vim,python,svn,fiddler等) (累计阅读 8,203)
  3. SVN Hook造成SVN提交速度慢的问题 (累计阅读 6,281)
  4. GIT和SVN之间的五个基本区别 (累计阅读 5,872)
  5. 让邮件飞一会儿 (累计阅读 5,711)
  6. 从Code Review 谈如何做技术 (累计阅读 5,217)
  7. 关于不得不在python中使用代理访问网络的方法 (累计阅读 5,088)
  8. Git安装使用手记 (累计阅读 5,053)
  9. 为何改用Git (累计阅读 4,980)
  10. 利用tortoiseSVN在两个版本库间merge code (累计阅读 4,953)