linux下,svn使用教程

来源:互联网 发布:淘宝红色外套 编辑:程序博客网 时间:2024/05/29 03:22

windows下的svn使用 

习惯之后,再使用linux下的svn很不适应。但其实仅需要几十分钟即可掌握。 

linux下的svn基本设置 
1,最简单的办法就是 svn help 

2,svn环境查看及切换 
svn info (path) 
svn switch https://svn.xx.baidu.com/xx/xx/project_BRANCH 

3,删除自己名下别人的svn账号 
先用自己的账号登陆系统,再执行下面命令 
rm -rf ~/.subversion/auth/svn.* 
(也即清除某账号的svn信息) 

4,导出干净代码 
svn export svn://192.168.1.211/ic3on ic3onex 



svn常用命令 
一、新建工程阶段:从svn服务器检出代码 
svn checkout/co SVNServerUrl .  //注,点(.)表示当前路径 
svn co Url -r 5555  //检出指定历史版本 

二、项目协作:更新别人提交的代码 
svn up 


三、向svn服务器提交自己的代码 
修改之前,先查看 
svn st/stat        其中:M被修改,C冲突,A预加到,K被锁定,G合并 
svn log (path)    很有用,可以看到某一个文件的更新历史及更新原因。 
svn revert         取消所有的本地编辑 

1,对于新增的文件 
svn add file 
svn add *.php(添加当前目录下所有的php文件) 

svn commit -m "at least five characters" failname.php 

2,对于修改的文件 
svn commit -m "add test file for my test" test.php 
-m表示message 

3,对于想删除的文件 
第一步:svn delete 【简写:svn (del, remove, rm)】 
第二步:svn ci -m 'message' 

4,清除 
svn clean 

四、关于冲突的解决 
svn diff --help 
具体比较一个文件不同版本间变化,可以用下面的命令: 
svn diff -r newversion:oldversion  path 
例如,svn diff -r 1327:1326 mcsd_svc.php 

分支管理及与主干的关系 
从主干创建分支后,在分支开发代码一段时间后,打一个标签,然后结项,然后将该分支代码提交到主干。需要注意的是在分支代码打标签后,就不应该再提交新的代码到该分支,否则主干上是没有这些新代码的。 

开发时应该向分支提交代码,而不是主干。 
https://xx/trunk/oms                  是主干 
https://xx/tags/oms/oms_1-0-0-0_PD_BL 是开发时的基线分支1.0.0 
https://xx/tags/oms/oms_1-0-2-0_PD_BL 是开发时的基线分支1.0.2 
首先,比较分支1.0.0和主干,看到1.0.0基线上的修改是否已经全部同步到主干上。 
其次,(如果确认主干和1.0.0完全一样,即主干可以被覆盖),则将1.0.2基线的代码合并到主干上。 
再次,以主干为准,为1.0.2打标签(本质是自己为自己打标签),以此作为新基线,并不再更新1.0.2分支的代码。 
最后,创建1.0.3分支,并将新修改代码提交到1.0.3上,而1.0.3分支是以1.0.2为基线的。 

具体操作参考:http://zccst.iteye.com/blog/1430823 

其他 
1,加锁/解锁 
svn lock -m "lock test file" test.php 
unlock 

常见错误说明及解决办法 

错误提示 错误原因 解决方法 
The change log need some words(not null) 提交时没有添加log message 提交时加上log message即可 
The log message is a pathname (was -F intended?); use '--force-log' to override log message 与路径名称相同 修改log message 
Error file xxx in not allowed in root directory! working copy的根目录下不允许有名为xxx的文件(只能是正整数版本目录) 删除该文件或者移到到版本目录下 
directory xxx/ is not allowed in root directory! Only positive integer dirs are allowed! 
working copy的根目录下不允许有名为xxx的目录(只能是正整数版本目录) 删除该目录或者移到版本目录下 
Too many versions!(less than 10 is permited) 版本目录多于10个,最多不超过10个 删除刚刚创建的版本目录即可。 
Too many files: XXX (less than 2000 is allowed). XXX目录下文件的数量超过2000 删除XXX目录下的文件,使其总数降至2000以下 
dir APPNAME/dir(size:xxxx) is too large less than xxx 该应用下代码(不包括.svn目录)总大小超过100M,或某个版本总大小超过50M 删除不必要的代码再尝试提交 
File XXX is too large!(less than 4M) 单个文件大小超过4M 删除重试 
类似Repository UUID '305daf1b-94be-48ee-a4b9-f4bcd36320de' doesn't match expected UUID '44e2f7a2-1b69-4710-974a-b6edef0fdc12' 服务器端仓库被删除重建,客户端对原仓库进行操作导致。 重新checkout出一份代码即可 

add vers xxx faild 文件部署失败 

2.更改svn地址目录

svn switch --relocate http://oldUrl http://newUrl

svn switchhttp://newUrl

3.删除某svn目录

svn delete http://theDeleteingUrl -m'a'

4.svn ci命令错误

svn commit
svn: Commit failed (details follow):
svn: Could not use external editor to fetch log message; consider setting the $SVN_EDITOR environment variable or using the --message (-m) or --file (-F) options
svn: None of the environment variables SVN_EDITOR, VISUAL or EDITOR are set, and no 'editor-cmd' run-time configuration option was found
 
svn: 提交失败(细节如下): 
svn: 无法使用外部编辑器获得日志信息;考虑设置环境变量 $SVN_EDITOR,或者使用 --message (-m) 或 --file (-F) 选项
svn: 没有设置 SVN_EDITOR,VISUAL 或 EDITOR 环境变量,运行时的配置参数中也没有 “editor-cmd” 选项
 
 
解决方法:
 设置SVN_EDITOR环境变量:
       SVN_EDITOR环境变量是制定一个日志编辑器,设置其值为任一一个编辑器即可(vi vim gedit notepad 等)。
      ex: export  SVN_EDITOR=vi
5.删除文件夹下的.svn文件
find . -type d -name ".svn" | xargs rm -rf
6.查看某版本到当前版本的修改
svn diff -r902864:HEAD > diff
svn diff http://trunk http://branches |vim -


svn分支相关操作

一、创建分支 
1,创建一个分支 
svn copy svn://xx.com/repo/trunk svn://xx.com/repo/branches/TRY-something -m 'make branches TRY-something' 

2,把工作目录转到分支 
svn switch svn://xx.com/repo/branches/TRY-something 

当然,也可以再转到主干svn switch svn://xx.com/repo/trunk 



二、合并一个分支到主干 
1, 查找到分支版本 
方法一:cd branch 
svn log --stop-on-copy 
最后一个r11340就是创建分支时的reversion 

方法二:cd trunk 
命令:svn -q --stop-on-copy 分支URL,这条命令会查询出自创建分支以后分支上的所有修改,最下面的那个版本号就是我们要找的版本号. 
示例:svn log -q --stop-on-copy svn://192.168.1.177/tags/beta_2009_12_24 

2, 合并到主干 
命令:svn -r 分支版本号:HEAD 分支的URL 
解释:HEAD为当前主干上的最新版本 
示例: 
cd trunk 
svn merge -r 12:HEAD svn://192.168.1.177/tags/beta_2009_12_24 


解决冲突: 
使用svn st | grep ^C 查找合并时的冲突文件,手工解决冲突 
使用svn resolved filename 告知svn冲突已解决 
使用svn commit -m "" 提示合并后的版本 


svn: Aborting commit: '/path/resources/noc' remains in conflict 
$ svn revert resources/noc 
Reverted 'resources/noc' 


三、两个分支合并 

两个分支合并可以拆分为一下两步: 

第一步: 

197从旧主干引出, 
186打完tag,表示是新主干 

合并最新代码的意思是:将新主干与旧主干比对,并添加到197中。这样197既有自己的新增的代码,也同时有最新线上的代码。 
cd 197_Branch 
svn merge https://xxx.com/tags/project/project_Old_BL https://xxx.com/tags/project/project_New_BL 
svn ci -m 'merge 186 trunk' 


第二步: 

但是后来,其他人又向186提了代码,所以还需要将186分支(即打了tag后的186,打了tag前的186已是主干)合并至197中。 
合并办法:找出186分支,比对与新主干之间的差别,并添加到197中。这样197就有最新的全部代码了。 
cd 197_Branch 
svn merge https://xxx.com/tags/project/project_New_BL https:/xxx.com/project/branches/project/186_Branch 
svn ci -m 'merge 186 branch' 

四、发布 

给当前主干打个标签,并且这个标签不再改动了,但是实际上标签和分支是一个意思,你可以在标签上继续做改动,但这不推荐。 
svn copy svn://xx.com/repo/trunk svn://xx.com/repo/tags/RB-1.0

转载自:http://zccst.iteye.com/blog/1173518

              http://zccst.iteye.com/blog/1430823

原创粉丝点击