svn使用手册

一.常用命令
1、检出
svn  co/checkout  http://路径(目录或文件的全路径) [本地目录全路径]  --username 用户名 --password 密码


注意:username 与 password前是两个短线,不是一个,认证过可不加。本地目录非必填,默认当前目录。
eg:svn co http://test/trunk


2. 查看信息
svn info [文件路径]


没有指定文件返回当前svn仓库的信息,比如路径,分支地址,svn服务器地址等等。指定了文件,会返回这个文件的详细信息。
eg:在我的测试目录下,执行svn info 会返回:


Path: .
Working Copy Root Path: D:\project\xxx
URL: https://xxx/trunk
Relative URL: ^/xxx/trunk
Repository Root: https://svn.text.com
Repository UUID: f1e22b3a-c8a0-4bf3-8542-66ea2b9421c2
Revision: 1154742
Node Kind: directory
Schedule: normal
Last Changed Author: test
Last Changed Rev: 1154630
Last Changed Date: 2016-10-17 13:17:37 +0800 (周一, 17 十月 2016) 



3. 查看状态
svn st/status
返回当前目录下的文件的状态,例如?表示未添加,A表示已添加,M表示有修改


eg:在我的测试目录下,执行svn info 会返回:
?       xxx\test.iml
M       xxx\src\main\java\com\xxx\test.java


4、更新文件
svn update/up


5、添加新文件 
svn add 文件路径

eg:
svn add xxx\src\main\java\com\xxx\test.java



6、提交
svn commit/ci -m "备注信息" 

注意: 必须带上-m参数,参数可以为空,但是必须写上-m
eg:
svn commit -m "提交test" 



7、删除文件
svn delete svn://路径(目录或文件的全路径) -m "备注信息"

eg:
svn delete xxx\src\main\java\com\xxx\test.java -m "删除test.java"



8、加锁/解锁 
svn lock -m "备注信息" [--force] 文件路径 
svn unlock 文件路径
eg:
svn lock -m "test lock" xxx\src\main\java\com\xxx\test.java
svn unlock xxx\src\main\java\com\xxx\test.java


9、比较差异 
svn diff 文件路径 
svn diff -r version_m:version_n 文件路径
eg:
svn diff test.java :当前与修改之前比较
svn diff -r 111:222 test.java  :对版本号111 和 版本号222 比较差异


10、查看文件变更日志
svn log 文件路径
eg:
svn log test.java :显示这个文件的所有修改记录,以及对应的版本号

11、查看版本库下的文件和目录列表 
svn list/ls svn://路径(目录或文件的全路径)
eg:
svn ls svn://xxx/test : 显示svn://xxx/test目录下的所有属于版本库的文件和目录 


12、创建新目录
svn mkdir -m "新增目录备注文本" http://目录全路径
eg:
svn mkdir -m "dir test" svn://localhost/test/newdir 
注意:添加完子目录后,必须要回到根目录更新一下,否则会提示"提交失败”


13、丢弃在本地的修改 

svn revert [--recursive] 文件路径
注意: 这个命令会解除冲突的状况,不会连接svn服务器,不会恢复被删除的目录。
eg:
svn revert foo.c :丢弃对一个文件的修改
svn revert --recursive :恢复一整个目录的文件,. 为当前目录 


14、标记冲突已经解决 
svn resolved [本地目录全路径]
eg:
如果你在更新时发生了冲突,你的工作拷贝会产生三个新的文件:
$ ls
foo.c
foo.c.mine
foo.c.r30
foo.c.r31
解决了foo.c的冲突,运行svn resolved,会删除这三个冲突标记文件,解决冲突。


15、不checkout而查看输出特定文件或URL的内容 

svn cat http://文件全路径
eg:
svn cat http://xxx/test.txt


16、导出(导出一个干净的不带.svn文件夹的目录树)

svn export 
注意;与checkout不同的是没有.svn文件夹。导出的文件脱离SVN版本控制,修改后无进行Update和Commit操作。


16、导出(导出一个干净的不带.svn文件夹的目录树)
svn export 
注意;与checkout不同的是没有.svn文件夹。导出的文件脱离SVN版本控制,修改后无进行Update和Commit操作。

17、导入(本地目录导入到版本库)
svn import -m "import" test http://svn.red-bean.com/repos/branches/test
注意;与export相反,将本地目录导入到版本库。与add不同的是直接更新到远程版本库。无需commit.
原先的目录树并没有纳入版本控制,为了开始工作,你还是要运行svn checkout得到一个干净的目录树工作拷贝。



二.分支创建

1、新建一个分支


svn copy/cp branchA branchB  -m "new branch" 

从branchA拷贝出一个新分支branchB,正常情况下,branchA都是trunk。生成tag,也是这个命令,只需要把路径修改就可以了。



2、切换分支
svn switch/sw http://目录全路径 [本地目录全路径]
eg:
svn switch http://xxx/test/123 
注意:本地目录全路径可以不填,默认当前目录。


三.分支合并

1.在分支执行,得到分支从trunk checkout出来的最早的版本号。如下面是1089035

$ svn log -v --stop-on-copy 

------------------------------------------------------------------------
r1089035 | user | 2002-11-03 15:27:56 -0600 (Thu, 07 Nov 2002) | 2 lines



2.可以使用--dry-run 参数模拟合并,预览是否有冲突。
svn merge --dry-run -r 1089035:HEAD https://branch/xxx

3.合并,HEAD是最新的版本号。下面的命令代表把分支的所有版本的改变合并到trunk.
svn merge -r 1089035:HEAD https://branch/xxx


四.冲突解决


1.解决文件冲突


(1)、svn update后,1.txt文件出现冲突,选择base版本,即1.txt.rOld作为最后提交的版本
$ svn resolve –accept base


(2).手工修改1.txt文件,然后将当前拷贝即1.txt作为最后提交的版本
$ svn resolve –accept working 1.txt


(3).使用1.txt.rNew作为最后提交的版本
$ svn resolve –accept theirs-full 1.txt


(4).使用1.txt.mine作为最后提交的版本 
$ svn resolve –accept mine-full 1.txt


2.解决树冲突


(1).什么是SVN树冲突?
  SVN树冲突不是常说的冲突。常说的冲突,是指不同的人同时改了某个文件的同一处内容,于是在合并时产生冲突。而树冲突是指,
对文件或目录本身的名称、位置进行了改变,或进行了文件或目录本身的添加、删除操作,而这些操作在合并(包括更新操作)时带来了冲突。
可参考SVN自带的帮助文档,第2章"Basic Usage”的"Dealing with Structural Conflicts”一节。

(2).如何避免树冲突?

      分支一定要从所在SVN项目的主干上拉出来,不要从其他位置特别是其他项目拉出来。即便本SVN项目主干上还"啥都没有”,也一定要从这里拉分支。
      请不要在删除一个文件或目录后,又再次添加。特别是像ver、mapping之类的文件和目录。这类操作造成的树冲突特别具有迷惑性。
     尽量不要更改文件和目录的名字,除非你确定小伙伴们最近不会碰它(修改名字或内容)。
     尽量不要在不同的分支上同时增加相同名称的文件或目录。

(2).树冲突快速解决方法。
   确定在你解决树冲突期间,主线不会有新的变化。
   基于主线,创建新的分支,命名为(比如)branch1_new。并把它checkout到本地。
   将出问题的分支上的内容export到新分支上。具体命令为:
       svn export --force
    如果有需要删除的文件(主干上有,分支上确实想删除的),用svn rm命令删除。

你可能感兴趣的:(开发工具,其他)