Ubuntu下svn 版本管理客户端工具及常用方法

Ubuntu16.04系统下安装RapidSVN版本控制器及配置diff,editor,merge和exploer工具,在Window下我们使用TortoiseSVN(小乌龟),可以很方便地进行查看、比较、更新、提交、回滚等SVN版本控制操作。

在Linux下我们可以使用RapidSVN。RapidSVN是一款轻量级的免费、开源 SVN 客户端,相比tortoise svn它更加小巧而且占系统资源少运行速度快。

一:安装RapidSVN版本控制器

在Ubuntu 16.04下可以使用安装很容易:

第一种方法:

打开终端输入命令即可,如下:

sudo apt-get install rapidsvn
第二种方法:

在Ubuntu software(软件中心)搜索svn,即可看到RapidSVN软件,点击下载即可,如下图:

二:配置diff,editor,merge和exploer工具
辅助工具:

nautilus:standard explorer
scite :standard editer
kdiff3 :diff tool / merge tool,此工具二者合一。
sudo apt-get install 安装之后,在rapidsvn 的查看view –>首选项–>程序栏下在 Browse 处分别填入以上所安装程序的名称。

保存即可。

RapidSVN 默认配置下并没有配置 diff,editor,merge和exploer工具

打开RapidSVN–>查看–>首选项–>程序,可以看到如下图所示四项未配置

配置方法(红色单词分别填入未配置位置):

Standard Editor : gedit(Ubuntu自带的编译器)

Standard Explorer : nautilus(Ubuntu文件)

其中最后两个配置Diff Tool和Merge Too是文件的比较差异与合并工具,需要安装Meld

安装方法:

sudo apt-get install meld
安装完成后在搜索处输入meld即可以看到安装好的meld,如下图

 

接下来如上面所类似配置即可

Diff Tool : meld

Merge Tool : meld
SVN在Ubuntu下使用方法:

1、首先需要安装SVN。Ubuntu下的SVN安装十分简单,sudo apt-get install subversion,然后根据提示一步一步,就完成了SVN的安装;

2、检出文件(checkout)。

使用命令:svn co http://{svn repository url} /destination

也可以使用: svn co svn://xxx.xxx.xxx/xx,这样会在主文件夹下生成xx文件夹,把svn上的内容都下载到xx文件夹里面。

然后系统会用当前的用户名登录,提示输入密码,如果第一次密码输入错误,会提示你输入用户名;

输入正确后,就可以检出文件了。

3、提交修 改的 文件(commit)。

进入需要更新的目录,输入命令:

svn commit -m path-to-commit,其中path-to-commit可以为空,成功后会提示更新后的版本号。

4、更新文件(update)。

svn update,在要更新的目录运行这个命令就可以了。

5、查看日志(log)。

svn log path

 

6、为Eclipse配置SVN。

http://subclipse.tigris.org/files/documents/906/38385/site-1.2.3.zip,可以从 这个地址下载Eclipse的插件,拷贝到plugins目录中以后,重启Eclipse就可以打开SVN的视图了。

也可以通过官方的 安装页面来进行在线安装:http://subclipse.tigris.org/install.html

 

———————————————————————————————————————————————————————————-

1、 将文件checkout到本地目录

svn checkout path(path 是服务器上的目录)
例如:svn checkout svn: // 192.168 . 1.1 / pro / domain
简写:svn co
2、 往版本库中添加新的文件

svn add file
例如:svn add test.php(添加test.php)
svn add * .php(添加当前目录下所有的php文件)
3、 将改动的文件提交到版本库

svn commit -m “ LogMessage “ [ -N ] [ –no-unlock ] PATH (如果选择了保持锁,就使用–no- unlock开关)
例如:svn commit -m “ add test file for my test “ test.php
简写:svn ci

4、 加锁/解锁

svn lock -m “ LockMessage “ [ –force ] PATH
例如:svn lock -m “ lock test file “ test.php
svn unlock PATH
5、 更新到某个版本

svn update -r m path
例如:
svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)
svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文 件 ,然后清除svn resolved ,最后再提交commit)
简写:svn up
6、 查看文件或者目录状态

1 )svn status path (目录下的文件和子目录的状态,正常状态不显示)
【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】
2 )svn status -v path (显示 文件和子目录状态)
第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。
注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。
简写:svn st
7、 删除文件

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)
8、 查看日志

svn log path
例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化
9、 查看文件详细信息

svn info path
例如:svn info test.php
10、 比较差异

svn diff path(将修改的文件与基础版本比较)
例如:svn diff test.php
svn diff -r m:n path(对版本m和版本n比较差异)
例如:svn diff -r 200:201 test.php
简写:svn di
11、 将两个版本之间的差异合并到当前文件

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

svn help
svn help ci
——————————————————————————

以上是常用命令,下面写几个不经常用的

——————————————————————————

13、 版本库下的文件和目录列表

svn list path
显示path目录下的所有属于版本库的文件和目录
简写:svn ls
14、 创建纳入版本控制下的新目录

svn mkdir : 创建纳入版本控制下的新目录。
用法: 1、mkdir PATH…
2、mkdir URL…
创建版本控制的目录。
1、每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增
调度,以待下一次的提交。
2、每个以URL指定的目录,都会透过立即提交于仓库中创建。
在这两个情况下,所有的中间目录都必须事先存在。
15、 恢复本地修改

svn revert : 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert:
用法: revert PATH…
注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复
被删除的目录
16、 代码库URL变更

svn switch (sw): 更新工作副本至不同的URL。
用法: 1、switch URL [PATH]
2、switch –relocate FROM TO [PATH…]
1、更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将
服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的
方法。
2、改写工作副本的URL元数据,以反映单纯的 URL上的改变。当仓库的根URL变动
(比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用
这个命令更新工作副本与仓库的对应关系。

17、 解决冲突

svn resolved: 移除工作副本的目录或文件的“冲突”状态。
用法: resolved PATH…
注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的
相关文件,然后让 PATH 可以再次提交。
18、 输出指定文件或URL的内容。

svn cat 目标[@版本]…如果指定了版本,将从指定的版本开始查找。
svn cat -r PREV filename > filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)

 

1、卸载SVN
查看自己是否安装了svn

svn
上图显示已安装,可用以下命令进行卸载

sudo apt-get remove –purge subversion
(–purge 选项表示彻底删除改软件和相关文件)
2、安装SVN
安装前先更新一下

sudo apt-get update
接下来安装
sudo apt-get install subversion

3、创建SVN版本库
创建home下的svn文件夹

sudo mkdir /home/svn
创建svn下的repository文件夹
sudo mkdir /home/svn/repository
更改repository的权限(第一次搭建没有赋予权限,客户端访问服务器被拒绝)
sudo chmod -R 777 /home/svn/repository
创建版本库
sudo svnadmin create /home/svn/repository
完成后会在repository文件夹下生成以下文件
然后对db进行权限设置

sudo chmod -R 777 db
设置访问权限:需要对conf文件夹下的文件进行修改
①修改配置文件conf/svnserve.conf

sudo vim /home/svn/repository/conf/svnserve.conf

#匿名用户可读
anon-access = read(可改成none,即不可读)
#权限用户可写
auth-access = write
#密码文件为passwd
password-db = passwd
#权限文件为authz
authz-db = authz

(去掉前面的#,并且顶格,不然可能会报错)

②添加访问用户conf/passwd

sudo vim /home/svn/repository/conf/passwd

③设置用户权限conf/authz

sudo vim /home/svn/repository/conf/authz

admin = smwang //用户smwang属于admin权限组
@admin = rw //admin权限组的权限是读和写
* = rw 所有的组都具有读权限和写权限
4、测试SVN服务器
①启动服务器

svnserve -d -r /home/svn
(-d:表示在后台运行 ,-r:指定服务器的根目录)
用如下命令查看svnserve是否已经运行

ps aux | grep svnserve

(表示服务器已经在后台运行了,这个时候我没就可通过svn://服务器ip/repository从svn客户端访问服务器了)

②停止服务器

如果需要关闭服务器,可以用下面的命令

killall svnserve
5、从eclipse访问服务器
①安装svn

打开Eclipse –> Help –> Eclipse Marketplace –> 在Find中输入subclipse搜索 –> 找到subclipse点击install

②连接svn服务器

Windows–>Show View–>Other–>双击SVN资源库,调处SVN资源库视图

右键空白处–>新建–>资源库位置,输入服务器svn地址

③提交project

右键自己的project–>team–>Share Project–>选择类型为svn

使用已有资源库

然后finish–>右键project–>提交

④从服务器下载project到本地

点击svn资源库视图底下的目录可看到项目

右键想下载的project–>检出为

⑤从服务器更新代码

右键project–>team–>与资源库同步

⑥还原项目至与下载时的一样

右键project–>team–>还原

 

创建prj1库
svnadmin create prj1

修改配置文件
svnserve.conf:
[general]
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz

passwd
[users]
tom = tom
authz:
[groups]
project_1 = tom

[prj1:/]
@project_1 = rw

访问
svn://192.168.1.105/prj1
则会出现认证失败

原因是:
svn://192.168.1.105/prj1 访问时找不到tom对应的库,就是因为[prj1:/]不是一个有效的库路径
把[prj1:/]改为[/]既可以了,[/]代表根目录下所有的资源,如果要限定资源,可以加上子目录即可。