svn使用


svn libneon的问题

ubuntu安装的svn要使用https时,默认使用的libneon-gnutls有点兼容性问题。所以导致的错误是:
SSL handshake failed: SSL 错误:在证书中检测到违规的密钥用法。
解决办法:
http://www.yeap.de/blog2.0/archives/260-Subversion-Certificate-Problems-with-Ubuntu-Precise-Pangolin.html


自己编译,真的不容易啊

cd openssl
由于是64bit系统,所以需要添加fPIC
./config -fPIC
但是cropt目录不好添加fPIC,难道生成的.a难道也需要fPIC吗?,所以无奈,只能先安装系统的openssl
apt-get install openssl-dev openssl


cd subversion
./configure –with-ssl=openssl –with-neon=./neon –with-openssl=/usr
出现warnning无用理会直接make


分支管理

一般svn版本库目录建议创建trunk、branches和tags三个目录。
trunk主干版本要时刻保持干净,即随时可以基于这个版本进行修改并将应用部署上线。
branches是分支目录,存放并行开发的项目代码,因为分支是主干的廉价拷贝,所以你可以放心建立很多分支版本。
不过Subversion不支持跨版本库的拷贝,当使用svn copy时你只能在同一个版本库内操作。
tags目录存放trunk某个的快照。


  1. svn copy 创建分支


svn copy -m "1.7.2 - theme" svn://localhost/www/trunk svn://localhost/www/branches/branch1.7.2-theme
svn co svn://localhost/www/branches/branch1.7.2-theme
注意,如果想更换其他用户,可以使用:
svn –username john –password pass


2) 开发了一段实现,要先把trunk版本merge过来


#branch1.7.2-theme是分支目录,注意不可以进到分支子目录
cd branch1.7.2-theme
#前面的12972是开分支之前trunk的版本号,后面的12991是merge时trunk的版本号
svn merge -r 12972:12991 svn://localhost/www/trunk
解决冲突后,提交


svn ci -m 'svn merge -r 12972:12991 svn://localhost/www/trunk'
3) 从分支merge到trunk。上线测试完毕,你很幸运,一切都如预期正常,这时就要将分支回归trunk,将trunk更新到最新。


#先从trunk checkout一份新鲜的代码,然后cd到该版本目录下
svn co svn://localhost/www/trunk
cd trunk
#12973是分支开始的版本号,13006是分支结束的版本号
svn merge -r 12973:13006 svn://localhost/www/branches/branch1.7.2-theme

svn-commit.tmp

看看 svn help commit, 发现有 -F 可以用, 平常都只有用 -m ‘message’ 而已.
-m: 在于只有一行打完, 可以快速 commit 用.


ex: svn ci -m 'log message'
-F: 会把档案内容读进来, 然后直接 commit, 想当然就用 -F 直接取 svn-commit.tmp 来 commit.


ex: svn ci -F svn-commit.tmp
PS: commit 完后, 还是要手动 rm svn-commit.tmp


删除文件

svn delete path -m “delete test fle“
例如:
svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”
或者直接


svn delete test.php
svn ci -m ‘delete test file‘
推荐使用这种简写:svn (del, remove, rm)


merge

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


代码回滚

撤销一个已提交的版本,修改有误,不应该提交,需要回滚到上一个版本
执行命令
$svn merge -r 20:19 $URL
检查工作拷贝结果
$svn status
提交拷贝结果
=$svn ci -m “undo change commited in r20”=


cat

svn cat -r 2 filename 显示文件指定版本内容


status -u

与版本库最新版本比较,*提示文件需要更新


ignore

添加ignore
svn propedit svn:ignore calc


被svn坑了,原来默认是忽略.o,.a,.so之类的。
svn add –no-ignore .


查看某次提交忽略的文件:svn status –no-ignore xxxroot
设置忽略文件列表svn pe svn:ignore xxxx
设置全局忽略文件列表
编辑~/.subversion/config文件,修改此文件中的global-ignores,
例如,想让subversion忽略vim的交换文件文件,可以这样设置:
global-ignores = *.o *.swp


root用户的配置是 /etc/subversion/config


svn st –no-ignore 查看所有
遇到的问题,添加的时候
svn add –no-ignore *


add * –force

并没有把剩余的添加上,只能通过一个一个目录来添加,不知道为什么?
解决:
通常情况下,命令svn add *会忽略所有已经在版本控制之下的目录,
有时候,你会希望添加所有工作拷贝的未版本化文件,包括那些隐藏在深处的文件,可以使用svn add的–force递归到版本化的目录下:
$ svn add * --force


svn服务器IP修改后,本地怎么跟新svn同步,svn relocate 操作

svn switch –relocate URL1 URL2


svn -v log

查看每次提交修改的文件列表。
svn -v log
svn -v -r 35 log dir/




参考资料

FAQ