subversion_command

subversion_command subversion官方文档中文版:http://svndoc.iusesvn.com/svnbook/1.4/ ####subversion使用url来识别版本库中的版本化资源:

  1. url:svn checkout http://svn.example.com:9394/repos`

  2. file:svn checkout file:///path/to/repos 或者 svn checkout file:///localhost/path/to/repos

    windows平台下:svn checkout file:///x:/path/to/repos x代表盘符 使用的是普通的斜线

    svn checkout “file:///x|/path/to/repos”

    subversion会根据需要自动编码url,和web一样,会自从处理空格、特殊字符等,这是最好将url用引号`

####.svn文件

  1. 任何一个在subversion版本控制下的副本(checkout)都有一个.svn文件,该文件会保存被修改或其他任何操作过的原始记录和修改日期,我们commit和update均是通过该文件来比对处理的
  2. 在刚checkout下来时.svn会记录当前文件的修订版本和本地copy的最后更新时间戳

####版本号:

  1. subversion的每次操作均是一个原子事务,每次操作均会建立一个版本号(针对整个文件树,而不是某个文件)
  2. 原理上工作副本中的版本号应该是一致的,但是当操作某个文件并commit之后,该文件的版本号会提升,而版本控制的文件树版本号并没有变化。只有当你update之后,subverion会根据变更历史提供一个全新的版本号来表示你更新到了最新文件(即使该文件并没有任何变化)

####工作副本的操作状态:

  1. 未修改且是当前的:本地没有修改,版本库也没有其他人的提交,则commit和update均不会又任何效果
  2. 本地已修改但未提交:commit成功,update无操作
  3. 本地无操作,但版本库版本已变更:commit无操作,update会更新版本
  4. 本地文件和版本库均有修改:commit会失败,需要先update然后在合并之后commit

####常用命令:

  1. svn add foo: 将预定文件、目录添加到版本库,下次提交,foo会被作为版本库的一个子对象,如果foo是目录,则该目录下所有文件均会被提交,如果只想添加foo本身,使用—non-recursive(-N)`
  2. svn delete foo:预定将文件、目录foo删除,如果foo是文件,则直接删除,如果是目录,则会在提交后在版本库和本地库删除
  3. svn copy foo bar:建立一个bar作为foo的copy,会自动记录copy历史,在提交时,会将bar添加到版本库
  4. svn move foo bar:svn copy foo bar ; svn delete foo
  5. svn mkdir blort:mkdir blort ; svn add blort

####svn status:

svn status状态符:A = add C == conflicts(冲突) D == delete M == modifications(变更)

svn status /stuff/fish.xml:只显示当前文件的状态

svn status -v :显示所有文件的状态,包括未修改过的。显示列为:状态符,版本号,最后修改的版本号,修改人

svn status -u:和版本库进行比对,显示文件变更状态,如果出现 * 则表示该文件需要先被update

####svn diff:

svn diff:不带参数,会比较本地工作副本和.svn中原始文件,会精确找出所有的修改。一般使用svn diff > 1.txt,将变更内容打印到文本文件,然后进行代码review

svn diff -r 版本号 test.xml:会比对本地test.xml和版本库中该版本号

svn diff -r 版本号1:版本号2:会比对这个版本的区别(均为当前版本库内容)

svn diff -c 版本号 test.xml:比对test.xml中对应版本内容和上一版本内容的差别

svn diff --summarize -r 277463:277637 显示这2个版本的区别,只显示文件名

####svn revert: svn revert test.xml:直接和本地.svn源文件比对,回退到源文件,不经过版本库回退,删除和添加均可

####svn update: 状态符:U == update G == 合并 C == conflicts

冲突文件状态符:filename:mine:更新前的文件,没有冲突标志,只包含你变更的内容;filename.rOLDREV:更新操作之前的base版本,没有版本库更新也不包含本地库操作;filename.rNEWREV:版本库中的head版本

文件冲突后会出现上述3个文件,手动解决冲突后,svn resolved test.xml,会删除上述3个文件

####检查历史: svn log -r 版本号 -v 显示版本号提交的内容

svn log test.xml:显示test.xml的修改日志

####svn cat && svn list 浏览版本库 svn cat -r 版本号 test.xml:查看该文件当前版本号的信息(貌似一般不用,无意义)

svn list:查看当前目录下文件

svn list -v:查看文件的详细信息(包括版本号、修改人等)

####版本回退: svn update -r 版本号:将整个工作copy回退到设定的版本

svn checkout -r 版本号:效果同上

####解锁: svn cleanup:查找所有的遗留日志,删除进程中的锁

svn status 中L标记表示该文件被锁住,需要使用上述命令解锁

####修订版本: HEAD:版本库中最新的版本

BASE:工作copy中一个条目的修订版本号,如果本地有修改,则base就是未修改的版本

COMMITTED:项目最近修改的修订版本,与base相同或更早

PREV:一个项目最后修改版本之前的那个版本,技术上认为是COMMITTED-1

svn diff -r PREV:COMMITTED foo.c //shows the last change committed to foo.c
svn log -r HEAD  //shows log message for the latest repository commit
svn diff -r HEAD //compares your working copy (with all of its local changes) to the latest version of that tree in the repository
svn diff -r BASE:HEAD foo.c //`compares the unmodified version of foo.c with the latest version of foo.c in the repository
svn log -r BASE:HEAD //shows all commit logs for the current versioned directory since you last updated
svn update -r PREV foo.c //rewinds the last change on foo.c, decreasing foo.c's working revision
svn diff -r BASE:14 foo.c //compares the unmodified version of foo.c with the way foo.c looked in revision 14

####svn merge: svn merge -c 版本号 test.xml 和 svn diff -c 版本号 test.xml 类似,区别是后者只打印文件的区别,前者会将该区别作为本地的一个修改存放到本地副本中

svn merge -r 版本1:版本2 url 目标地址(复合合并):将url的版本1和版本2的区别合并到目标地址,一般目标地址的url和url不是同一个分支(这个最常用,将你的分支的2个版本的区别合并到另一个分支上,这样就不会比对另一个分支的其他文件区别

svn merge -r 303:302 -c -303 url || svn merge -c -303 url:取消303这个分支的提交(本人没有测试过)

svn merge url1 url2 目标地址 //将url1和url2的区别同步到目标地址上
svn merge -r 版本号1:版本号2 url 目标地址 //将url的版本号1和版本号2的区别同步到目标地址上
svn merge -r 版本号1:版本号2 url //将url的版本号1和版本号2的区别同步到当前目录

转载于:https://my.oschina.net/qcAtKmTCeCA/blog/1491456

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值