svn 惯用

svn 常用

(0)解决冲突  (分析原因)
[root@host150 svntest]# svn ci  -m  " "  a.php 
正在发送       a.php
传输文件数据.svn: 提交失败(细节见下):====>有冲突 服务器版本为10127 ,而本地版本为10126说明刚才有人已经提交过一个版本
svn: Out of date: '/svntest/a.php' in transaction '12127-1'

[root@host150 svntest]# svn log a.php 
------------------------------------
r12126 | wangxj | 2011-02-12 16:12:17 +0800 (六, 12  2月 2011) | 1 line


------------------------------------
r12125 | wangxj | 2011-02-12 16:02:35 +0800 (六, 12  2月 2011) | 1 line

 
------------------------------------
r12124 | wangxj | 2011-02-12 15:59:27 +0800 (六, 12  2月 2011) | 1 line


------------------------------------
#比较本地版本和仓库中的版本有什么区别
[root@host150 svntest]# svn diff  -r HEAD  a.php 
Index: a.php
===================================================================
--- a.php       (修订版 12127)
+++ a.php       (工作拷贝)
@@ -1,2 +1,2 @@
 
-ida..........................dddadad(=====>svn服务器仓库中的版本)
+idaddadad=============ddadad(===>本地最新的版本)
[root@host150 svntest]# 

例子==>(2)
[root@host150 svntest]# svn ci -m  ""  a.php 
正在发送       a.php
传输文件数据.svn: 提交失败(细节见下):
svn: Out of date: '/svntest/a.php' in transaction '12134-1'
[root@host150 svntest]# svn up
Conflict discovered in 'a.php'.
Select: (p) postpone, (df) diff-full, (e) edit,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options: p
C    a.php
更新至修订版 12134。
Summary of conflicts:
  Text conflicts: 1
[root@host150 svntest]# 
[root@host150 svntest]# 
[root@host150 svntest]# 
[root@host150 svntest]# 
[root@host150 svntest]# 
[root@host150 svntest]# svn up
于修订版 12134。
[root@host150 svntest]# 
[root@host150 svntest]# 
[root@host150 svntest]# 
[root@host150 svntest]# svn  st  -v 
             12134    12133 wangxj       .
?                                        a.php.r12134
?                                        a.php.r12126
?                                        a.php.mine
             12134    10884 wangxj       trunk
             12134    10884 wangxj       branches
             12134    12124 wangxj       test.php
C            12134    12133 wangxj       a.php
             12134    12124 wangxj       b.php
             12134    10884 wangxj       tags
[root@host150 svntest]# 
[root@host150 svntest]# svn merge  -r 12133:12134  a.php

[root@host150 svntest]# svn  resolved a.php
“a.php”的已解决的冲突状态
(注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的

相关文件,然后让 PATH 可以再次提交。)
[root@host150 svntest]# svn  ci  -m  " "  a.php 
正在发送       a.php
传输文件数据.
提交后的修订版为 12138。


(1) 导入项目
$ cd ~/project
$ mkdir -p svntest/{trunk,branches,tags}
$ svn import svntest https://localhost/test/svntest --message "Start project"

(2) 导出项目 
svn co  svn://192.168.1.125/newipcentrex/exchange --username wangxj --password wangxj123 .
[root@host150 tmp]# svn  co svn://192.168.1.125/newipcentrex/svntest  svntest
A    svntest/trunk
A    svntest/branches
A    svntest/test.php
A    svntest/a.php
A    svntest/b.php
A    svntest/tags
取出修订版 12128。
[root@host150 tmp]# 
[root@host150 tmp]# 
[root@host150 tmp]# 
[root@host150 tmp]# 
[root@host150 tmp]# cd svntest/
[root@host150 svntest]# svn st -v
             12128    12127 wangxj       .
             12128    10884 wangxj       trunk
             12128    10884 wangxj       branches
             12128    12124 wangxj       test.php
             12128    12127 wangxj       a.php
             12128    12124 wangxj       b.php
             12128    10884 wangxj       tags
[root@host150 svntest]#
 备注:第一列表示BASE, 第二列表示COMMITTED
可以看出checkout一个working-copy后,svn会给这个working-copy分一个新的、统一的BASE版本号(如 12128)。
接下来可以修改pi.cpp代码,然后checkin,你就会发现这个文件的BASE和COMMITTED会同时增加,并且相等。如下
[root@host150 svntest]# svn st -v
             12128    12127 wangxj       .
             12128    10884 wangxj       trunk
             12128    10884 wangxj       branches
             12128    12124 wangxj       test.php
             12133    12133 wangxj       a.php
             12128    12124 wangxj       b.php
             12128    10884 wangxj       tags

[root@host150 svntest]#
 接下来在此目录下执行update动作,你就会发现所有文件的BASE都进行了升级,但是COMMITTED没有改变,如下
ost150 svntest]# svn up
于修订版 12133。
[root@host150 svntest]# svn st -v
             12133    12133 wangxj       .
             12133    10884 wangxj       trunk
             12133    10884 wangxj       branches
             12133    12124 wangxj       test.php
             12133    12133 wangxj       a.php
             12133    12124 wangxj       b.php
             12133    10884 wangxj       tags
[root@host150 svntest]# 





(3)查看日志 ============>比较差异
#比较上一次提交的版本和当前提交的版本有什么区别
svn  diff  --revision PREV:COMMITTED  users_controller.php    
svn di -r  PREV:COMMITTED  users_controller.php  
#比较本地文件和版本库中的文件的最新改动
[root@host150 app]# svn diff  --revision  HEAD  controllers/clientrates_controller.php 

例子:
#显示这个文件的所有修改记录,及其版本号的变化
[root@host150 svntest]# svn  log a.php 
------------------------------------
r12127 | wangxj | 2011-02-12 16:26:50 +0800 (六, 12  2月 2011) | 1 line

 
------------------------------------
r12126 | wangxj | 2011-02-12 16:12:17 +0800 (六, 12  2月 2011) | 1 line


------------------------------------
r12125 | wangxj | 2011-02-12 16:02:35 +0800 (六, 12  2月 2011) | 1 line

 
------------------------------------
r12124 | wangxj | 2011-02-12 15:59:27 +0800 (六, 12  2月 2011) | 1 line


------------------------------------比较12126和12127两个版本之间的差异
[root@host150 svntest]# svn  diff a.php 
[root@host150 svntest]# svn  diff  -r 12126:12127   a.php 
Index: a.php
===================================================================
--- a.php       (修订版 12126)
+++ a.php       (修订版 12127)
@@ -1,2 +1,2 @@
 
-idadddadad(===>代表12126版本)
+ida..........................dddadad(====>12127版本)
[root@host150 svntest]# 



(4) 显示log
#显示最后1次修改的LOG
$ svn log --revision HEAD
#显示所有修改的LOG
[root@host150 app]# svn  log --revision  BASE:HEAD 


(5)更新版本
#更新到前面一个版本
[root@host150 controllers]# svn update  --revision   PREV clientrates_controller.php
#更新到1.10的版本
[root@host150 cdrreports]# svn  update --revision {2011-01-10}

将版本库中的文件test.php还原到版本200
svn update -r 200 test.php

(6)(显示文件和子目录状态)
[root@host150 svntest]# svn  st -v 
             12125    12125 wangxj       .
             12125    10884 wangxj       trunk
             12125    10884 wangxj       branches
             12125    12124 wangxj       test.php
             12126    12126 wangxj       a.php
             12125    12124 wangxj       b.php
             12125    10884 wangxj       tags
第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。
【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】

(7)添加文件
#svn add *.php(添加当前目录下所有的php文件)
#注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。

(8)删除文件
[root@host150 models]# svn del jurisdiction_prefix.php
[root@host150 models]# svn ci -m " "

svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”

(2)
svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”

(9)查看文件详细信息

[root@host150 svntest]# svn  info a.php 
路径:a.php
文件名:a.php
地址(URL):svn://192.168.1.125/newipcentrex/svntest/a.php
Repository Root: svn://192.168.1.125/newipcentrex
档案库 UUID:c004b24f-da91-4a55-83d2-5bfd46da7693
修订版:12125
节点种类:文件
调度:正常
最后修改的作者:wangxj
最后修改的修订版:12125
最后修改的时间: 2011-02-12 16:02:35 +0800 (六, 12  2月 2011)
文本最后更新: 2011-02-12 16:19:31 +0800 (六, 12  2月 2011)
校验和:32247a4a24368c64ea5d56cabcb5c8d7

(10) 加锁/解锁

[root@host150 svntest]# svn lock -m  " "  a.php 
“a.php”被用户“wangxj”锁定。
[root@host150 svntest]# 
[root@host150 svntest]# 
[root@host150 svntest]# svn unlock  a.php 
“a.php”被解除锁定。
[root@host150 svntest]# 


6.合并冲突
svn merge -r 200:205 test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)