Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据。 这些数据放置在一个中央资料档案库(repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。
 
SVN 的一些概念
repository(源代码库):源代码统一存放的地方
Checkout(提取):当你手上没有源代码的时候,你需要从repository checkout一份
Commit(提交):当你已经修改了代码,你就需要Commit到repository
Update (更新):当你已经Checkout了一份源代码, Update一下你就可以和Repository上的源代码同步,你手上的代码就会有最新的变更
日常开发过程其实就是这样的(假设你已经Checkout并且已经工作了几天):Update(获得最新的代码) -->作出自己的修改并调试成功 --> Commit(大家就可以看到你的修改了) 。

如果两个程序员同时修改了同一个文件呢, SVN 可以合并这两个程序员的改动,实际上SVN管理源代码是以行为单位的,就是说两个程序员只要不是修改了同一行程序,SVN都会自动合并两种修改。如果是同一行,SVN 会提示文件 Conflict冲突,需要手动确认。

代码检出 checkout
会把 SVN 服务器上的代码下载到我们电脑上,checkout 也可以简写为 co

svn checkout svn://svnbucket.com/xxx/xxx
# 指定存储目录
svn checkout svn://svnbucket.com/xxx/xxx save-dir
# 指定用户名密码。
svn checkout svn://svnbucket.com/xxx/xxx --username xxxx --password xxx

提交代码 commit
此命令可以把我们本地的修改提交到 SVN 服务器,这样其他同事就能更新到我们的代码了。
commit 可以简写为 ci,-m 参数后面跟的是本次提交的描述内容

# 描述是必须的,但是可以填写空字符串,不指定
svn commit -m "提交描述"
# 只提交指定文件或目录
svn commit /path/to/file-or-dir -m "提交指定文件"
# 指定后缀的所有文件
svn commit *.js -m "提交所有 js 文件"

更新代码 update
执行此命令后会把其他人提交的代码从 SVN 服务器更新到我们自己电脑上,update 也可以简写为 up

# 更新到最新
svn update
# 更新到指定版本的代码。特别是最新版本代码有问题时,我们可以用这个命令回到之前的版本
svn update -r xxx
# 仅更新指定文件或者目录
svn up /path/to/file-or-dir

添加文件 add
新建的文件,我们需要用 add 命令把它们加入 SVN 的版本管理,然后我们才可以提交它。
注意:添加后还需要进行提交喔。

# 添加指定文件或目录
svn add /path/to/file-or-dir
# 添加当前目录下所有 php 文件
svn add *.php

删除文件 delete
此命令会从 SVN 移除版本控制,移除后你需要提交一下

svn delete /path/to/file-or-dir
# 删除版本控制,但是本地依旧保留文件
svn delete /path/to/file-or-dir --keep-local

查看日志 log

# 查看当前目录的日志
svn log
# 查看指定文件或目录的提交日志
svn log /path/to/file-or-dir
# 查看日志,并且输出变动的文件列表
svn log -v
# 限定只输出最新的 5 条日志
svn log -l 5

查看变动 diff

# 查看当前工作区的改动
svn diff
# 查看指定文件或目录的改动
svn diff /path/to/file-or-dir
# 本地文件跟指定版本号比较差异
svn diff /path/to/file-or-dir -r xxx
# 指定版本号比较差异
svn diff /path/to/file-or-dir -r 1:2

撤销修改 revert

# 撤销文件的本地修改
svn revert test.php
# 递归撤销目录中的本地修改
svn revert -R /path/to/dir

添加忽略 ignore
SVN 的忽略是通过设置目录的属性 prop 来实现的,添加后会有一个目录属性变动的修改需要提交,记得要提交一下喔,这样其他人也有了这个忽略配置。

# 忽略所有 log 文件。注意最后有个点号,表示在当前目录设置忽略属性。
svn propset svn:ignore "*.log" .
# 递归忽略 global-ignores
svn propset svn:global-ignores "*.log" .
# 从文件读取忽略规则,一行一个规则。
svn propset svn:ignore -F filename.txt .
# 打开编辑器修改忽略属性
svn propedit svn:ignore .
# 查看当前目录的属性配置
svn proplist . -v
# 删除当前目录的忽略设置
svn propdel svn:ignore .

忽略仅对还未添加到版本库的文件生效,已经在版本库里的文件,添加忽略后是不会自动删除的也不会忽略,需要手动 delete 命令删除下才行。
TortoiseSVN 添加忽略会更加简单,也会自动执行删除命令。

查看状态 status
任何时候,你可以用下面的命令查看当前工作目录的 SVN 状态喔,会列出来哪些文件有变动。

svn status
svn status /path/to/file-or-dir

清理 cleanup
这个命令我们经常在 SVN 出现报错时可以执行一下,这样就会清理掉本地的一些缓存

svn cleanup

查看信息 info

svn info

查看文件列表 ls

svn ls
# 指定版本号
svn ls -r 100
查看文件内容
# 查看指定版本的文件内容,不加版本号就是查看最新版本的
svn cat test.py -r 2

查看 blame
显示文件的每一行最后是谁修改的(出了BUG,经常用来查这段代码是谁改的)

svn blame filename.php

地址重定向
如果你的 SVN 地址变了,不需要重新 checkout 代码,只需要这样重定向一下就可以了。

svn switch --relocate 原 SVN 地址 新 SVN 地址

分支操作

# 创建分支,从主干 trunk 创建一个分支保存到 branches/online1.0
svn cp -m "描述内容" http://svnbucket.com/repos/trunk http://svnbucket.com/repos/branches/online1.0
# 合并主干上的最新代码到分支上
cd branches/online1.0
svn merge http://svnbucket.com/repos/trunk
# 分支合并到主干
svn merge --reintegrate http://svnbucket.com/repos/branches/online1.0
# 切换分支
svn switch svn://svnbucket.com/test/branches/online1.0
# 删除分支
svn rm http://svnbucket.com/repos/branches/online1.0

帮助命令

# 查看SVN帮助
svn help
# 查看指定命令的帮助信息
svn help commit

版本控制/文件管理系统SVN命令整理:提交修改更新撤销分支相关推荐

  1. 懒人技能,svn命令行提交新增的文件

    命令行执行svn ci提交的时候,如果是新增的文件,不会被提交. 作为一个懒人,是不能接受手动add这种操作的. 上命令 svn add . --no-ignore --force svn ci -m ...

  2. linux 命令整理(持续更新)

    为什么80%的码农都做不了架构师?>>>    C cat zdd 浏览文件zdd的内容 cat zdd1 zdd2 浏览多个文件的内容 cat -n zdd浏览文件zdd的内容并显 ...

  3. Linux下SVN命令一次性提交多个目录及子目录

    svn st|awk '{print $2}'|xargs svn add. 乍看之下觉得更加精炼,仔细看下就会发现这个脚本没有区分文件状态.所以完善了以下这个脚本: svn st | awk '{i ...

  4. svn 服务器忽略文件夹,SVN忽略不提交文件夹

    层次分析模型(AHP)及其MATLAB实现 今天用将近一天的时间学习了层次分析模型(AHP),主要参考了一份pdf,这个网站,和暨南大学章老师的课件,现写出一些自己总结的要点. 一.层次分析法的基本步 ...

  5. Linux 各种压缩类型文件 解压命令 整理 tar.bz2 tar.gz tgz等等

    *.tar 使用 tar –xvf 解压 *.tar.gz和*.tgz 使用 tar –zxvf 解压 *.gz 使用 gzip -d或者gunzip 解压 *.bz2 使用 bzip2 -d 或者 ...

  6. Git 常用命令整理(持续更新)

    #配置 git config --global user.name "Your Name" git config --global user.email "email@e ...

  7. 【原创--学习整理】BAT和DOS命令整理,持续更新

    1 关于BAT基于的DOS命令的分类 1.1我的分类 我现在作为一个初学者,只能总结现在的粗浅体验,方便分类学习,以后慢慢完善 DOS命令可以分为 内部命令 DOS语法内部的一些特殊符号,如@ 如:: ...

  8. git detached HEAD 修改后如何提交修改到其他分支

    有次工作中git切换分支时,不小心前面加了origin/,但是像往常一样没有注意,直接在新分支上修改代码,等到要提交时给出的提示是git detached HEAD,还说切换分支之前请确保代码不会丢失 ...

  9. 【Linux操作】常用命令整理(持续更新中...)

    目录 目录 一.解压缩 1..tar 2..tar.gz 3..tar.bz2 4.分卷解压缩 二.Linux下载torrent种子 三.查看并杀死进程 查看进程 杀死某进程 杀死全部python进程 ...

  10. matlab之常用命令整理(持续更新中...)

    一些自己工作中遇到的问题. 希望对大家也有帮助. 信号处理 alignsignals 求两个信号的delay, 并且对齐信号 buffer 可以把信号切分成不同segment组成矩阵 dsp.Samp ...

最新文章

  1. java中wait方法使用实例_java中wait、notify和notifyAll的概念用法和例子?
  2. linux信号检查参数相同,linux信号函数
  3. hackme_Login As Admin 0
  4. 【推荐】JS面象对象编程视频教程
  5. Boost:can_require的使用测试程序
  6. JEPaas【按钮隐藏】根据单据状态值决定【添加明细】【删除】按钮的隐藏和显示
  7. 类似mysqlhotcopy备份mysql myisam脚本
  8. c语言 bcd码 16进制字符串 原理,ASCII码、HEX、字符、BCD 等等 基础知识思考
  9. Lesson 2 Create First Qt Program
  10. 2018-08-06
  11. opencv中的Mat图使用CDC显示
  12. 如何使用Syncios Data Recovery直接从 iOS 设备恢复数据?
  13. WebService 分布式事务怎么控制
  14. python是一门胶水语言_python为什么叫胶水语言
  15. 2020.12.28用isprime函数判断m是否为素数
  16. ecshop手机支付宝支付篡改金额BUG
  17. app播放无声音乐实现app后台运行
  18. JAVA计算机毕业设计教育培训机构信息管理系统Mybatis+系统+数据库+调试部署
  19. 数字图像处理实验(五)|图像复原{逆滤波和伪逆滤波、维纳滤波deconvwnr、大气湍流扰动模型、运动模糊处理fspecial}(附matlab实验代码和截图)
  20. AI-多模态-文本->图像-2021:Stable Diffusion【开源】【目前开源模型中最强】

热门文章

  1. centos7刷新dns
  2. 浏览器背后的运行机制
  3. 360浏览器html在哪儿,360浏览器打印页面设置在哪里
  4. CI框架全局登录控制
  5. 直播app源码用php做直播平台开发怎么样?
  6. 爬取cloudmusic歌单
  7. Kubernetes(K8s)学习笔记(一)
  8. GEE学习笔记3:Landsat8 植被指数计算
  9. Spring Cloud Eureka Server 源码解析(七)处理客户端增量下载请求、读写锁问题
  10. matlab 崎岖 视频的起始时间,怎么样给视频打马赛克 视频中打马赛克 视频某个时间段开始局部加马赛克 设置起始时间...