1.linux搭建svn服务:192.168.14.128
1)svn的yum安装和创建版本库
[root@bogon ~]# yum -y install subversion
[root@bogon ~]# mkdir -p /application/svn #创建一个svn的安装目录(数据/密码/认证文件都放在一起了)
[root@bogon ~]# svnserve -d -r /application/svn/ #指定安装目录启动
[root@bogon ~]# ps -ef |grep svn
root 1489 1 0 20:08 ? 00:00:00 svnserve -d -r /application/svn/
root 1491 1420 0 20:08 pts/0 00:00:00 grep svn
[root@bogon ~]# svnadmin create /application/svn/banbenku
[root@bogon ~]# ls /application/svn/
banbenku
[root@bogon ~]# ls /application/svn/banbenku/
conf db format hooks locks README.txt
[root@bogon ~]# ls /application/svn/banbenku/conf/
authz passwd svnserve.conf
2)调整svn配置文件及权限文件(配置要允许访问的用户和所需的密码文件,并设置用户应该拥有的什么读写权限)
注意:不需要专门创建系统用户,和系统用户无关,只要在相关文件中设置用户名和密码即可。
[root@bogon conf]# vim /application/svn/banbenku/conf/svnserve.conf
[general]
anon-access = none #不要匿名访问(修改)
auth-access = write #访问时可写(修改)
password-db = passwd #用户名和密码存放文件(默认,在和conf同级目录,也可配置到其他绝对目录)
authz-db = authz #用户权限的设置文件(默认,在和conf同级目录,也可配置到其他绝对目录)
[root@bogon ~]# chmod 700 /application/svn/banbenku/conf/passwd #密码是明文的,所以权限给的是700
[root@bogon ~]# chmod 700 /application/svn/banbenku/conf/authz #密码是明文的,所以权限给的是700
[root@bogon ~]# vim /application/svn/banbenku/conf/passwd #配置要允许访问的用户和所需的密码
[users]
# harry = harryssecret
# sally = sallyssecret
shi1 = shi111
shi2 = shi222
[root@bogon ~]# vim /application/svn/banbenku/conf/authz #配置用户应该拥有的什么读写权限
...............#最下面添加如下内容,注意,后面不能写注释,否则配置有问题
yonghu_group = shi1,shi2 #定义一个组
[banbenku:/] #此外也可以根据情况设置用户对svn服务器的哪些目录访问,/…
shi1 = rw #给用户授权,这里面的用户,必须是上面passwd文件中存在的
shi2 = r #给用户授权,这里面的用户,必须是上面passwd文件中存在的
@yonghu_group = r #给组授权
3)重启svn服务
[root@bogon ~]# pkill svnserve
[root@bogon ~]# svnserve -d -r /application/svn/ #指定安装目录启动
[root@bogon ~]# ps -ef |grep svn
root 1519 1 0 20:26 ? 00:00:00 svnserve -d -r /application/svn/
root 1521 1420 0 20:26 pts/0 00:00:00 grep svn
注意1:
1)SVN服务器端不是简单将上传的文件一个一个存放起来的,SVN服务器版本库有两种格式:一种为FSFS,一种为BDB.
文件上传到SVN版本库后,上传文件不再以文件原来格式存储,而是被svn以它自定义的格式压缩成版本库数据,存放在版本库。
2)SVN在服务器端的存储方式和客户端是不一样的,所以在服务器端是看不到源文件的,也就是说你不可能在服务器端存放该版本库的文件夹下找到你上传的某个文件。
3)svn是基于关系数据库的(BerkleyDB)或一系列二进制文件(FS_FS)。一方面这解决了许多问题(如:并行读写共享文件)以及添加许多新功能,然而另一方面,数据存储由此变得不透明,不能像ftp,samaba,nfs等能看到实体文件了。
例如:从客户端登录svn时候,能查看到如下内容:(如:虚拟化(kvm和hyper-v)(cent6.6和red6.5)),但是用xshell登录到服务器上,却找不到对应的目录和文件。
注意2:
1)一般使用svnadmin create ...创建了版本库后,版本库目录下会有的一些目录如下:
[root@bogon ~]# ls /application/svn/banbenku/
conf db format hooks locks README.txt
2)启动svn服务所带常见都参数如下:(也可用svnserve –-help查看更多选项)
svnserve -d //守护进程模式
svnserve -r 参数 //指定svn存储根目录
svnserve --pid-file 参数 //PID进程号
svnserve --listen-host 参数 //让指定的机器IP或主机名使用svn服务
3)svnadmin create /application/svndata/banbenku //这是svn的版本库,不能用mkdir
4)版本库目录格式:
[<版本库名称>:/项目/目录]
@<用户组名> = <权限> //@是组名的开头
<用户名> = <权限>
2.在windows客户端访问linux虚拟机中的svn服务器
1)网上下载并安装svn客户端软件:
软件名:TortoiseSVN_1.9.3.27038_x64.1454137426(时期不同会有不同的版本)
双击安装软件,如下图:
点击next,如下图:
点击next,如下图:
指定安装到哪个目录,(一般保持到c盘吧,保持到别的盘不成功)点击next,如下图:
点击install,如下图:
点击finished,即可安装完成。
2)windows上作为客户端来访问linux的svn服务器:(登录svn服务器中进行上传和下载)
注意;此处是演示上传和下载文件,也可以版本库为基础上传和下载各类不同类分支(上传和下载整个文件夹或文件夹中文件)
A)登录svn服务器中上传文件和文件夹:
a)登录svn服务器:
在随便一个盘中输入svn服务器的IP地址(linux虚拟机中的ip地址:192.168.14.128),可登录访问svn服务器。
访问格式:svn://svn服务器IP地址/版本库名称/分支(各分类文件夹名)
svn://192.168.14.128/banbenku
回车后,如下:
输入用户名和密码(shi1,shi111,也可用另一个用户名和密码登录,此处是该用户,且如果选上可以保存用户名和密码,此后再访问svn时候就不用输入用户名和密码了)。因为此时svn服务器上什么都没有,所以点击ok访问为空,如下图:
b)登录svn服务器候上传文件和文件夹到svn服务器上:
上传文件:将下面E盘中的测试文件”面向对象相关总结.docx”上传到svn服务器)
输入地址:登录svn服务器(用户名和密码根据保存情况选择输入或不输),如下图:
在上面图的右边空白处右击——选择add file——再根据提示,找到相应的盘中要上传的测试文件,如下图:
选中要上传文件——点击打开,如下图:
输入上传服务器时的提示信息(随便),点击ok,即可上传成功,如下图:
上传文件夹:将下面E盘中的测试文件夹”虚拟化(kvm和hyper-v)(cent6.6和red6.5)”上传到svn服务器)
输入地址:登录svn服务器(用户名和密码根据保存情况选择输入或不输),如下图:
在上面图的右边空白处右击——选择add folder——再根据提示,找到相应的盘中要上传的文件夹,如下图:
点击选择文件夹,如下:
输入上传提示信息,点击ok,上传完成后,如下:
可以双击进入打开文件夹看看内容,如下面随便进了一个文件夹,如下:
B)登录svn服务器中下载文件:(如:把上面上传到服务器上的文件和文件夹下载到本地D盘的jieshou目录中)
a)建立接收下载文件的目录(D盘中的jieshou目录)
先在D盘中创建jieshou目录,如下图:此时该jieshou目录还和svn服务器无联系,如果下载成功候两者之间会发生联系。如果两者之间有联系了,当svn服务器上有新的文件时候,就可以通过右击jieshou目录——update更新,使得本地数据和svn服务器同步(相当于下载服务器上文件到本地)。也可以把本地新的内容放到jieshou目录中,然后右击jieshou目录——commit,这样能够把本地新文件内容提交到svn服务器上(相当于把本地文件上传到svn服务器)。
b)登录svn服务器
输入svn地址,登录svn服务器(用户名和密码根据保存情况选择输入或不输),如下图:
c)下载svn服务器上的文件和文件夹
下载文件:在上面的右边空白处右击——选择Checkout单机,如下图:
输入svn服务器的地址——选择要存放下载文件的地址目录(此处为D盘的jieshou目录)——单机chose items选择要下载的文件(用户名和密码根据保存情况选择输入或不输),如下图:
选择要下载的文件,点击ok,如下图:
再点击ok即可下载成功:
下载文件成功后,点击ok关闭即可。
到D:/jieshou目录中查看下载的文件:
下载文件夹到D:/jieshou2目录:返回最初登录svn状态,如下:
空白处右击——checkout,如下:
选择接收目录是D:/jieshou2目录,点击choose items,如下:
选择要下载的文件夹,点击ok,如下:
再点击ok,如下:
下载完成后,点击ok关闭即可。
到D:/jieshou2目录中查看下载的内容:
随便进了一个文件夹看看,如下:
3)windows上作为客户端来访问linux的svn服务器:(在客户端本地进行上传、下载和更新)
注意;此处是演示上传和下载文件,也可以版本库为基础上传和下载各类不同类分支(上传和下载整个文件夹或文件夹中文件测试过,和这个过程一样,此处没有单独再截图文件夹的上传和下载)
在windows客户端本地下载svn服务器文件:
a)在D盘建立一个要接收下载文件的目录jieshou3,如下图:(此时jieshou3和svn服务器还没有联系)
在jieshou3目录上右击——选择SVN Checkout,(用户名和密码根据保存情况选择输入或不输)如下图:
输入svn服务器的地址——选择要存放下载文件的目录jieshou3——点击choose items选择要下载的文件,如下图
选中要下载的文件——点击ok,如下图:
再点击ok,如下:
下载完成后,点击ok关闭即可。
到d:盘的jieshou3中查看,如下:
在windows客户端本地将本地文件上传到svn服务器:
a)在D盘目录中建立本地测试文件,并拖到jieshou3目录(只要是和svn服务器有联系的目录就可(此处之前和svn产生联系的jieshou和jieshou2目录也可),此处以jieshou3目录上传文件为例子),此时jieshou3目录中文件如下图:
再返回到jieshou3目录,如下图:
在jieshou3目录上右击——选择SVN Commit(提交),如下图:
选择要上传的文件,输入上传提交时候的提示信息,点击ok,即可上传成功,如下图:
上传完毕,再点击ok即可。
登录svn服务器查看,上传上来的文件,如下:
在windows客户端本地更新svn服务器中文件:
提示:(起初本地创建的目录,不能和svn服务器联系,所以要想让本地文件和svn服务器联系,需要右击本地文件目录——选择SVN Check out,从svn服务器上下载一次,才能和svn服务器发生联系,而一旦发生联系后。如果此后svn服务器上增加了新的内容,要想再使本地文件能同步svn服务器上的新内容(同步svn服务器数据)时,就不需要右击——选择SVN Check out了,而是只需要右击该文件目录——选择SVN Update,即可更新内容和svn服务器内容一致)。
此时,本地D盘中已经和svn服务器产生联系的目录jieshou中内容如下图:(旧内容)
而svn服务器上现在的内容如下图:(新内容)
在windows客户端本地的D盘jieshou目录中右击——选择SVN Update,如下图:
到d:/jieshou目录查看:
3.linux客户端:(192.168.14.129)访问svn服务器(查看、下载、上传、更新、删除文件、导入和删除文件库)
[root@localhost ~]# yum -y install svn //安装svn命令,并可用svn --help查看相关命令选项
A linux客户端查看svn服务器上数据:
格式:(svn ls svn://svn服务器IP/版本库名称 --username=用户名 --password=密码)
若选择输入yes可以保存密码,以后登陆svn服务器就不用输密码了,且也不用加--username=shi1 --password=shi111选项。
[root@localhost ~]# svn ls svn://192.168.14.128/banbenku --username=shi1 --password=shi111
bendi1.txt
bendi2.txt
新建文件夹/
虚拟化(kvm和hyper-v)(cent6.6和red6.5)/
面向对象相关总结.docx
#注意:若选择输入yes可以保存密码,以后登陆svn服务器就不用输密码了,且也不用加--username=shi1 --password=shi111选项了,即:直接:svn ls svn://192.168.14.128/banbenku即可
B linux客户端下载svn服务器上数据:
格式:(svn co svn://svn服务器IP/版本库名称 /本地目录 --username=用户名 --password=密码)
注意:不管svn服务器上有没有东西,要想上传或者下载服务器上的文件,首先要与svn服务器取得联系。可以在本地创建一个目录,从svn服务器中同步下载一次数据,这样才能与svn服务器取得联系,取得联系之后就可以想下载就下载,想上传就上传了。如果不先取得联系,那么刚创建的与svn服务器没有联系的本地目录,就无法将本地文件到svn服务器上.
[root@localhost ~]# mkdir /svntest
[root@localhost ~]# svn co svn://192.168.14.128/banbenku /svntest/ --username=shi1 --password=shi111
#注意:若选择输入yes可以保存密码,以后登陆svn服务器就不用输密码了,且也不用加--username=shi1 --password=shi111选项。
[root@localhost ~]# ls /svntest/
bendi1.txt bendi2.txt 新建文件夹 虚拟化(kvm和hyper-v)(cent6.6和red6.5) 面向对象相关总结.docx
#从svn服务器中同步下载一次数据,先与svn服务器取得联系
#注意:上面的下载命令也可如下分步进行:
1)先cd /svntest,
2)然后执行:svn co svn://192.168.14.128/banbenku --username=shi1 --password=shi111
C linux客户端上传本地文件到svn服务器:
1)cd到与svn服务器建立连接的目录并建立要上传的文件: cd /建立连接的目录,建立要上传的文件(或先弄好文件放到该目录)
2)添加本地文件: svn add 本地文件1 本地文件2 …… #把本地文件加入与svn服务器
3)提交本地文件: svn ci -m “提交时的提示信息” #提交本地文件到svn服务器
[root@localhost ~]# cd /svntest #进入与svn建立联系的目录
[root@localhost svntest]# touch {a..d}.txt #建立要上传的文件
[root@localhost svntest]# ls
a.txt bendi1.txt bendi2.txt b.txt c.txt d.txt 新建文件夹 虚拟化(kvm和hyper-v)(cent6.6和red6.5) 面向对象相关总结.docx
[root@localhost svntest]# svn add a.txt b.txt c.txt d.txt #把本地文件加入与svn服务器
[root@localhost svntest]# svn ci -m "shangchuang tijiao shuju" #提交本地文件到svn服务器
(根据下载时候密码是否保存情况,选择是否输入用户名的密码,一般建立联系时候,保存过密码了,上传时候就不用输用户名和密码了,如果没有保存,那就需要输)
此时再查看svn服务器上就有上传的文件了,如下:(根据下载时候密码是否保存情况,选择是否输入用户名的密码)
[root@localhost svntest]# svn ls svn://192.168.14.128/banbenku --username=shi1 --password=shi111
a.txt
b.txt
bendi1.txt
bendi2.txt
c.txt
d.txt
新建文件夹/
虚拟化(kvm和hyper-v)(cent6.6和red6.5)/
面向对象相关总结.docx
#注意上面,如果第一次就已经输入yes,保存了svn用户名和密码,下面的都可以不用输用户名和密码,也不用加选项:--username=shi1 --password=shi111。
D linux客户端从svn服务器上同步更新新的数据:(本地目录事先需要和svn服务器建立联系才能更新)
格式:(svn up svn://svn服务器IP/版本库名称 /本地已经和svn建立关系的目录 --username=用户名 --password=密码)
或: cd /本地已经和svn建立关系的目录 && svn up (一般已经保存过密码,不需再输密码,且后面也不能跟别的)
1)和svn建立关系的目录:/svntest内容如下:
[root@localhost ~]# ls /svntest
a.txt bendi1.txt bendi2.txt b.txt c.txt d.txt 新建文件夹 虚拟化(kvm和hyper-v)(cent6.6和red6.5) 面向对象相关总结.docx
2)svn服务器上内容如下:
[root@localhost ~]# svn ls svn://192.168.14.128/banbenku --username=shi1 --password=shi111
a.txt
b.txt
bendi1.txt
bendi2.txt
c.txt
d.txt
新建文件夹/
虚拟化(kvm和hyper-v)(cent6.6和red6.5)/
面向对象相关总结.docx
此时客户端本地目录:/svntest和svn服务器内容是一致的。
3)删除svn服务器端的a.txt b.txt c.txt d.txt(为了方便,在windows下删除),删除后如下:
[root@localhost ~]# svn ls svn://192.168.14.128/banbenku --username=shi1 --password=shi111
bendi1.txt
bendi2.txt
新建文件夹/
虚拟化(kvm和hyper-v)(cent6.6和red6.5)/
面向对象相关总结.docx
4)此时svn客户端本地目录还是原来的(和svn服务器已经不一致),如下:
[root@localhost ~]# ls /svntest
a.txt bendi1.txt bendi2.txt b.txt c.txt d.txt 新建文件夹 虚拟化(kvm和hyper-v)(cent6.6和red6.5) 面向对象相关总结.docx
5)本地客户端目录/svntest更新,使得数据和svn服务器内容同步
[root@localhost ~]# svn up svn://192.168.14.128/banbenku /svntest --username=shi1 --password=shi111
6)最终查看到本地目录/svntest目录已经更新,和svn服务器内容一致了
[root@localhost ~]# ls /svntest
bendi1.txt bendi2.txt 新建文件夹 虚拟化(kvm和hyper-v)(cent6.6和red6.5) 面向对象相关总结.docx
#注意:更新也可分步骤进行:
1)cd /svntest
2)svn up 即可 #不需要加后面的内容,如果加则更新不了,另外因已经保存过密码,svn up时候也不需要密码
#注意上面,如果第一次就已经输入yes,保存了svn用户名和密码,下面的都可以不用输用户名和密码,也不用加选项:--username=shi1 --password=shi111。
E 在linux客户端,将svn服务器上的文件和文件夹删除:
格式:(svn delete svn://svn服务器IP/版本库名称/要删除的文件名或文件夹 --username=用户名 --password=密码 –m "说明信息")
#注:若文件夹名是英文,可直接删除,若文件夹是中文,可能一下删不了,需要做一下处理才行(用的也不多,具体再研究)
[root@localhost ~]# svn ls svn://192.168.14.128/banbenku --username=shi1 --password=shi111
bendi1.txt
bendi2.txt
新建文件夹/
虚拟化(kvm和hyper-v)(cent6.6和red6.5)/
面向对象相关总结.docx
[root@localhost ~]# svn delete svn://192.168.14.128/banbenku/bendi1.txt --username=shi1 --password=shi111 -m "del file1"
[root@localhost ~]# svn delete svn://192.168.14.128/banbenku/bendi2.txt --username=shi1 --password=shi111 -m "del file2"
[root@localhost ~]# svn ls svn://192.168.14.128/banbenku --username=shi1 --password=shi111
新建文件夹/
虚拟化(kvm和hyper-v)(cent6.6和red6.5)/
面向对象相关总结.docx
#注意上面,如果第一次就已经输入yes,保存了svn用户名和密码,下面的都可以不用输用户名和密码,也不用加选项:--username=shi1 --password=shi111。