工作中遇到的svn 命令总结----不断更新

2011-11-09 更新
---------------------------------------------------------------------------------------------
1) 将修改后的文件提交到版本库
命令:
svn commit 文件名 -m "注释内容"
简写:svn ci 文件名 -m "注释内容"

比如,将修改后的android2.3/packages/apps/DeskClock/res/layout-land/desk_clock.xml提交到版本库:

a)  在android2.3/packages/apps/DeskClock/res/layout-land/下使用:
svn ci -m packages/apps/DeskClock/res/layout-land/desk_clock.xml  "修改了desk_clock.xml文件中的时钟第20行"

b)  cd到packages/apps/DeskClock/res/layout-land/,再svn ci -m "修改了desk_clock.xml文件中的时钟第20行" 


2) 将新增加的文件“预定添加到版本库”
命令:svn add 文件名/目录

作用:
将新的文件预定添加到版本库中(实际上并没有真正地添加到版本库中),前提是,版本库中没有这个文件,这个文件必须是新的。svn add之后,还必须使用svn ci 才能真正的提交到版本库中去。

例1:将新增加的android2.3/packages/apps/DeskClock/res/layout-land/desk.xml添加到版本库中去:
a) 在android2.3/packages/apps/DeskClock/res/下使用:
svn add android2.3/packages/apps/DeskClock/res/layout-land/desk.xml
b) cd到packages/apps/DeskClock/res/layout-land/
svn add desk.xml


例2:
假如有一个目录:rep1/rep2/rep3/a.xml,这个目录和子目录都是新创建的,现在要想把这个目录和子目录以及子目录中的所有文件都添加到版本库中去,怎么办?
方法:cd到rep1目录的父目录中,然后svn add rep1,这个命令会递归地把rep1以及子目录和子目录中的所有文件都“预定提交到版本库”中,然后再svn ci rep1 -m "注释内容”,这样就可以递归地把rep1以及子目录和所有文件真正地提交到服务器中。

3) 将版本库同步到当前项目中,或者说将当前版本更新到版本库中某个版本
命令:svn up -r x test
表示将版本库中的某个文件test或者源代码同步到版本x

例子:
假如版本库中有一个版本27,我想把当前项目同步到版本27,则可以使用:
svn up -r 27

注意:
a. 使用svn up表示从服务器上同步文件,默认情况下同步到最新版本;
b. 要区分up和ci的区别,up是把当前项目更新到版本库中的某个版本,而ci是把当前文件或者某个目录更新到版本库中,如果有新文件,则必须先使用add再ci;
c. svn up只会把更新服务器上新的文件,而不改变本地已经修改的尚未提交到服务器上的文件。

---------------------------------------------------------------------------------------------
2012.4-13 更新svn ci 和 svn add
---------------------------------------------------------------------------------------------
 如果要提交这个dir1目录以及该目录下包含的所有添加的文件,那么使用: svn add dir1
然后使用svn ci -m "注释内容"
即可将新增加的目录和该目录中的所有文件都提交到版本库中了。

注意:这种方式会导致一个问题:假如编译内核后,这个目录dir1下面会生成一些.o文件和其他一些目标文件,而这些目标文件是不能提交到服务器的,这种情况下有两种解决方法:
一:直接把这些生成的.o文件和不需要的文件删除掉,然后再svn add dir1。这种方法的缺点就是需要重新编译。
二:不删除生成的.o文件和其他文件,先使用svn add --depth=empty dir1 将这个目录添加,而并不添加目录下面的其他文件,然后再svn ci dir1提交这个空目录,最后再以这种方式:svn add ./dir1/fie_a 添加该目录下的其他指定的文件,然后再svn ci ./dir1/fie_a 就可以了,这避免了勿提交不需要的文件。这种方法的缺点就是对于提交较多文件时不方便。

---------------------------------------------------------------------------------------------
2012.5.10 更新
---------------------------------------------------------------------------------------------
查看修改的所有的log记录:svn log
查看某个具体版本号的所有修改的记录: svn log -v  -r n
注:n是某个版本号
例子:
假如要查看320这个版本号的修改记录,就用:svn log -v -r 320


---------------------------------------------------------------------------------------------
2012.6.6 更新
---------------------------------------------------------------------------------------------
要比较两个版本有什么差异,或者说想知道某个版本和之前的版本相比到底修改了哪些内容,用diff命令即可:

svn diff -r m:n path

例如:svn diff -r 200:201  x.c (对x.c这个文件的版本200和版本201比较差异)

然后终端会出现修改的记录,减号表示旧版本中的,加号表示新版本中要添加的内容,@@符号后面第一个是修改后的行数。


---------------------------------------------------------------------------------------------
2012.8.28 更新
---------------------------------------------------------------------------------------------
svn up (svn update) 状态缩写含义:  

A:add,新增 
C:conflict,冲突 
D:delete,删除 
M:modify,本地已经修改 
G:modify and merGed,本地文件修改并且和服务器的进行合并 
U:update,从服务器更新 
R:replace,从服务器替换 
I:ignored,忽略


---------------------------------------------------------------------------------------------
2013.06.19 更新
---------------------------------------------------------------------------------------------

在windows下遇到svn ci失败的bug,如下:

Command: Commit  
Error: Commit failed (details follow):  
Error: Working copy  
Error:  '\\172.16.1.18\backup\zhulf\MXDongle\amlogic8726_0427\uboot\customer\board\configs'  
Error:  locked  
Error: sqlite: attempt to write a readonly database  
Error: sqlite: attempt to write a readonly database  
Completed!:   

遇到这个问题,是因为文件被别人权限锁住了,必须自己获得锁才可以提交。
先在windows下单独把这个文件所在的目录checkout下来,然后右键选择这个要提交的文件,选择 TortoiseSVN -> Check for modifications,系统会弹出一个对话框,对话框中会显示这个要提交的文件,再右键单击这个文件,选择get locked,然后会弹出一个对话框,勾选左下角的rend 对话框,再单击确认按钮,然后在第一次弹出的对话框中会看到这个文件获得锁了,锁的权限是自己的名字了,这表明自己可以提交该文件。然后第一次出现这个对话框中右键单击该文件,选择committe即可提交到服务器上。

---------------------------------------------------------------------------------------------
2013.07.05 更新
---------------------------------------------------------------------------------------------
取消所有本地编辑,就用svn revert files/directory

比如我修改了一个本地文件,还没有提交,现在发现这个修改不正确,不想修改了,就可以使用svn revert 取消修改即可


---------------------------------------------------------------------------------------------
2013.08.10 更新
---------------------------------------------------------------------------------------------
把本地数据导入到svn 服务器:svn import

比如说:先在本地下载了android4.2源码,然后必须先导入到svn服务器,才能在svn 服务器上svn co到本地进行操作。意思就是说,你要想使用svn操作源码,必须先把源码放到svn 服务器上,而这个动作就是svn import。

svn import    -m   "New the source base"      test/      svn://192.168.1.9/sis685base/sis691qg           --no-ignore 

-m 表示添加一个注释,注释内容是双引号里面的内容
test就是本地源码目录,需要导入到svn服务器上的svn://192.168.1.9/sis685base/sis691qg 目录中
svn://192.168.1.9/sis685base/sis691qg 就是svn服务器上源码的位置
--no-ignore 表示不忽略任何文件,全部import到svn服务器上去

敲入这个命令后,终端回显:
Adding XXX...
表示先添加到缓存中,最后添加成功时会显示诸如:
Committed revision 1. 的提示

---------------------------------------------------------------------------------------------
2013.08.21 更新
---------------------------------------------------------------------------------------------
如何查看当前已更新的版本?

svn info

比如:

svn info
Path: .
Working Copy Root Path: /disk4/android4.2

Revision: 167
Node Kind: directory
Schedule: normal
Last Changed Author: xiaozhu
Last Changed Rev: 167
Last Changed Date: 2013-08-17 18:14:03 +0800 (Sat, 17 Aug 2013)

可以看到,当前已经更新到167版本


---------------------------------------------------------------------------------------------
2013.11.7 更新
---------------------------------------------------------------------------------------------
svn up出现冲突,如何解决?
原因是本地修改了某个文件,没有提交服务器上已经有人提交了这个修改。两个文件一样导致冲突
把本地文件先svn revert,而后svn up

或者手动把冲突的文件先备份起来,把本地恢复到最新,而后对比冲突的文件,找出差异,最后修改再提交。

注:如转载本文请注明出处。
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值