关于svn

为了以后小组协作方便,今天建立了一个svn repos。
由于Ubuntu机器上svn已经配置好了,所以如何在机器上安装和配置svn不会在这里说明,下面直接进行创建repos的过程。

建立新repos

(该过程参考链接:http://blog.csdn.net/ithomer/article/details/7930492)

  1. ssh登陆到svn服务器:ssh username@222.200.xxx.xxx
  2. 创建新svn项目:sudo svnadmin create [repos_path]
  3. 给repos设置权限:sudo chmod 777 -R [repos_path]
  4. 在客户端验证repos是否建立成功:svn checkout [svn://222.200.xxx.xxx/repos_path]

设置客户端读写权限

(该过程参考链接:http://blog.sina.com.cn/s/blog_4b93170a0100leb2.html)
下面三步都在服务器端的刚建立的repos的conf文件夹下进行。
1.修改svnserve.conf(实际上是把[general]下注释的行的注释给取消)

anon-access = read
auth-access = write
password-db = passwd
authz-db = authz

这里要注意除了要删去“#”外还要将空格也删去,不然会导致svnserve.conf:12: Option expected错误。(解决方案:http://blog.csdn.net/xyz_lmn/article/details/6176483)

2.修改passwd(在文件尾部添加用户名和密码)

liliang = liliang

3.authz(添加读写权限)

[/]             #表示对根目录下所有文件
liliang = rw    #表示读写权限都有

经过这三步,就能够在客户端使用用户名和密码进行checkout和commit了。

客户端的读写操作

其实个人觉得用图形界面操作会比命令行方便得多。
window下可以用乌龟:TortoiseSVN
ubuntu下可以用兔子:rabbitvcs
莫不是出自龟兔赛跑?应该是程序员的冷笑话了 :)

没有界面时候需要用到的部分命令行:

svn checkout    #用于第一次时候将repos拖到本地
svn update      #用于更新到最新的代码版本
svn add         #用于添加文件到更新的列表中
svn commit      #用于提交代码修改

后续遇到的问题

  1. svn log时候显示no date

    解决的连接是:SVN:show log with no date的解决方法
    是权限的问题,在服务器端,svnserve.conf 中,将 anon-access 设置成 none。

  2. 回滚到某个版本

    参考了:Linux 下svn恢复到某一版本
    用的不是revert而应该是merge

  3. File already exists: … 的错误

    参考了:File already exists: filesystem ‘/path/file’, transaction svn常见错误解决方法

  4. 切换用户

    清空~/.subversion/auth目录下的所有文件,之后svn就会提示需要重新登录了。(某种意义上,svn很不适合小白使用。。切换用户名的方式都那么简单粗暴)

  5. 重启服务器端svn服务

    首先登陆到服务器的机器,然后kill掉svn服务:sudo killall svnserve,之后再启动:sudo /etc/init.d/svnserve -d -r [svn_repos_path]

很久没有更新网站,发现多了不少评论和问题,无法一一回复,如果现在仍有问题请再次留言 :) 2016.03.29