一、SVN介绍
1.什么是SVN(Subversion)?
Svn(subversion)是近年来崛起的非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个跨平台的开源的版本控制系统。Svn版本管理工具管理着随时间改变的各种数据。这些数据放置在一个中央资料档案库(repository)中,这个档案库很像一个普通的文件服务器或者FTP服务器,但是,与其他服务器不同的是,SVN会备份并记录每个文件每一次的修改更新变动。这样我们就可以把任意一个时间点的档案恢复到想要的某一个旧的版本,当然也可以直接浏览指定文件的更新历史记录。
2.svn与git的区别
svn集中式版本控制系统
svn版本控制系统是集中式的数据管理,存在一个中央版本库,所有开发人员本地开发所使用的代码都是来自于这个版本库,提交代码也都必须提交到这个中央版本库。
svn版本控制系统工作流程如下:
在中央库上创建或从主干复制一个分支
从中央库check out 下这个分支的代码
增加自己的代码文件,修改现存的代码或删除代码文件
commit代码,假设有人在刚刚的分支上提交了代码,你就会被提示代码过期,你得先up你的代码后再提交。up代码的时候如果出现冲突,需要解决好冲突后再进行提交。
缺点:
当无法连接到中央版本库的环境下,你无法提交代码,将代码加入版本控制; 你无法查看代码的历史版本以及版本的变化过程。提交到版本控制系统中的代码我们都默认通过自测可运行的,如果某个模块的代码比较复杂,不能短时间内实现为可测试的功能,那么你需要等很长的时间才能提交自己的代码,由于代码库集中管理,因此,需要对中央版本库的存储做备份。这点分布式的版本控制系统要好一些。Svn的备份要备份所有代码数据以及所有更改的版本记录。
git分布式的版本控制
git是由Linus开发的,所以很自然的git和Linux文件系统结合的比较紧密,以至于在windows上你必须使用cygwin才能使其完美的工作。
那git凭啥叫做分布式的版本控制系统呢?还是从其工作模式讲起。
git中没有了中央版本库的说法了,但是为了开发小组的代码共享,我们通常还是会搭建一个远程的git仓库。
但是和svn不同的是,开发者本地也包含了一个完整的git仓库,从某种程度上说本地的仓库和远程的仓库在身份上是等价的,没有主从之分。
如果你的项目是闭源项目,或者你习惯于以往的集中式的管理模式的话,那么在git下你也可以像svn那样的工作,只是流程中可能会增加一些步骤。
你本地创建一个git库,并将其add到远程git库中。
你在本地添加或者删除文件,然后commit,当然commit操作都是提交到本地的git库中了。(嗯,其实是提交到git目录下的objects目录中去了)
将本地git库的分支push到远程git库的分支,如果这个时候远程git库中已经有别人push过,那么远程git库将不允许你push,这时候你需要先pull,然后如果有冲突,处理好冲突,commit到本地git库后,再push到远程git库。
从上面的描述我们可以看到,我们每个开发人员的本地都会有一个git库,我们可以随时进行commit而不需要联网,可以随时查看历史版本,当某一个功能点开发完了之后我们可以将commit后的内容push到远程git库了,如果远程git库的版本在你上次clone或者pull之后变化了,那么你需要进行pull并处理冲突,提交之后,再push到远程git库。
二、CENTOS7下搭建SVN服务器
1.yum安装svnserve
- [root@haopythonsvn ~]# yum -y install subversion
安装完成后,可查看svn安装位置
- [root@haopythonsvn ~]# rpm -ql subversion
- /etc/subversion
- /etc/sysconfig/svnserve
- /run/svnserve
- /usr/bin/svn
- /usr/bin/svnadmin
- /usr/bin/svndumpfilter
- /usr/bin/svnlook
- /usr/bin/svnrdump
- /usr/bin/svnserve
- /usr/bin/svnsync
- /usr/bin/svnversion
- /usr/lib/systemd/system/svnserve.service
- /usr/lib/tmpfiles.d/svnserve.conf
- …
2.创建版本库目录
选择在var路径下创建版本库,当前处理根目录
- [root@haopythonsvn ~]# pwd
- /root
- [root@haopythonsvn ~]# mkdir /var/svnrepos
- [root@haopythonsvn ~]#
3.创建svn版本库
在上面建立的/var/svnrepos基础上,创建版本库并进入目录
- [root@haopythonsvn /]# svnadmin create /var/svnrepos/haopython2019
- [root@haopythonsvn /]# cd /var/svnrepos/haopython2019/
- [root@haopythonsvn haopython2019]#
进入目录后,可以看见如下信息
- [root@haopythonsvn haopython2019]# ls -ll
- 总用量 8
- drwxr-xr-x 2 root root 54 4月 4 15:30 conf
- drwxr-sr-x 6 root root 233 4月 4 15:30 db
- -r--r--r-- 1 root root 2 4月 4 15:30 format
- drwxr-xr-x 2 root root 231 4月 4 15:30 hooks
- drwxr-xr-x 2 root root 41 4月 4 15:30 locks
- -rw-r--r-- 1 root root 229 4月 4 15:30 README.txt
4.配置修改
进入已经创建的版本库目录,进入conf
- [root@haopythonsvn conf]# pwd
- /var/svnrepos/haopython2019/conf
- [root@haopythonsvn conf]# ls -ll
- 总用量 12
- -rw-r--r-- 1 root root 1080 4月 4 15:30 authz
- -rw-r--r-- 1 root root 309 4月 4 15:30 passwd
- -rw-r--r-- 1 root root 3090 4月 4 15:30 svnserve.conf
- [root@haopythonsvn conf]#
其中:
authz:负责账号权限的管理,控制账号是否读写权限
passwd:负责账号和密码的用户名单管理
svnserve.conf:svn服务器配置文件
1)编辑authz文件
在编辑之前先进行备份,下面两个文件也一样做好备份工作。
- ### This file is an example authorization file for svnserve.
- ### Its format is identical to that of mod_authz_svn authorization
- ### files.
- ### As shown below each section defines authorizations for the path and
- ### (optional) repository specified by the section name.
- ### The authorizations follow. An authorization line can refer to:
- ### - a single user,
- ### - a group of users defined in a special [groups] section,
- ### - an alias defined in a special [aliases] section,
- ### - all authenticated users, using the '$authenticated' token,
- ### - only anonymous users, using the '$anonymous' token,
- ### - anyone, using the '*' wildcard.
- ###
- ### A match can be inverted by prefixing the rule with '~'. Rules can
- ### grant read ('r') access, read-write ('rw') access, or no access
- ### ('').
- [aliases]
- # joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average
- [groups]
- # harry_and_sally = harry,sally
- # harry_sally_and_joe = harry,sally,&joe
- # [/foo/bar]
- # harry = rw
- # &joe = r
- # * =
- # [repository:/baz/fuz]
- # @harry_and_sally = rw
- # * = r
- [/]
- moon = rw
上面[/]表示根目录,即/var/svnrepos
moon = rw表示moon用户对根目录具有读写权限。
2)编辑passwd文件
- ### This file is an example password file for svnserve.
- ### Its format is similar to that of svnserve.conf. As shown in the
- ### example below it contains one section labelled [users].
- ### The name and password for each user follow, one account per line.
- [users]
- # harry = harryssecret
- # sally = sallyssecret
- moon = rong123456
其中:
用户名:moon
认证密码:rong123456
3)编辑svnserve.conf文件
- [general]
- anon-access = none
- auth-access = write
- password-db = passwd
- authz-db = authz
- realm = /var/svnrepos
- [root@haopythonsvn conf]#
anon-access = none:表示禁止匿名用户访问。
auth-access = write:表示授权用户拥有读写权限。
password-db = passswd:指定用户名口令文件,即 passwd 文件。
authz-db = authz:指定权限配置文件,即 authz 文件。
realm = /var/svnrepos:指定认证域,即 /var/svnrepos 目录。
5.防火墙上开启3690端口
- [root@haopythonsvn /]# firewall-cmd --permanent --add-port=3690/tcp
- success
- [root@haopythonsvn /]# firewall-cmd --reload
- success
- [root@haopythonsvn /]# firewall-cmd --permanent --list-all
- public
- target: default
- icmp-block-inversion: no
- interfaces:
- sources:
- services: dhcpv6-client ftp ssh
- ports: 3690/tcp
- protocols:
- masquerade: no
- forward-ports:
- sourceports:
- icmp-blocks:
- rich rules:
- [root@haopythonsvn /]#
6.启动svn服务器
- [root@haopythonsvn /]# svnserve -d -r /var/svnrepos
- [root@haopythonsvn /]# ps -ef | grep 'svnrepos'
- root 1431 1 0 16:07 ? 00:00:00 svnserve -d -r /var/svnrepos
- root 1433 844 0 16:08 pts/0 00:00:00 grep --color=auto svnrepos
三.搭建SVN客户端
1.windows客户端
这里推荐使用TortoiseSVN-1.11.1.28492-x64-svn-1.11.1
下载地址
http://subversion.apache.org/packages.html
安装完成后,输入下列地址访问
svn://192.168.150.96:3690/haopython2019
弹出用户名:moon
密码:rong123456
2.LIINUX客户端安装
- [root@node02 ~]# yum install -y subversion
- [root@svnclient ~]# svn help
- 用法: svn <subcommand> [options] [args]
- Subversion 命令行客户端,版本 1.7.14。
- 使用“svn help <subcommand>” 显示子命令的帮助信息。
- 使用“svn --version”查看程序的版本号和版本库访问模块,或者
- 使用“svn --version --quiet”只查看程序的版本号。
- 大多数的子命令可接受文件或目录参数,对目录进行递归处理。
- 如果没有指定参数,默认对当前目录(包含当前目录)递归处理。
- 可用的子命令:
- add
- blame (praise, annotate, ann)
- cat
- changelist (cl)
- checkout (co)
- cleanup
- commit (ci)
- copycopy (cp)
- delete (del, remove, rm)
- diff (di)
- export
- help (?, h)
- import
- info
- list (ls)
- lock
- log
- merge
- mergeinfo
- mkdir
- move (mv, rename, ren)
- patch
- propdel (pdel, pd)
- propedit (pedit, pe)
- propget (pget, pg)
- proplist (plist, pl)
- propset (pset, ps)
- relocate
- resolve
- resolved
- revert
- status (stat, st)
- switch (sw)
- unlock
- update (up)
- upgrade
- Subversion 是版本控制工具。
- 欲取得详细资料,请参阅 http://subversion.apache.org/
- [root@svnclient ~]#
- [root@svnclient ~]# svn list svn://192.168.150.96/haopython2019
- 认证领域: <svn://192.168.150.96:3690> /var/svnrepos
- “root”的密码:
- 认证领域: <svn://192.168.150.96:3690> /var/svnrepos
- 用户名: moon
- “moon”的密码:
- -----------------------------------------------------------------------
- 注意! 你的密码,对于认证域:
- <svn://192.168.150.96:3690> /var/svnrepos
- 只能明文保存在磁盘上! 如果可能的话,请考虑配置你的系统,让 Subversion
- 可以保存加密后的密码。请参阅文档以获得详细信息。
- 你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,
- 来避免再次出现此警告。
- -----------------------------------------------------------------------
- 保存未加密的密码(yes/no)?y
- 自动取款机项目1功能代码/
- [root@svnclient ~]#
- [root@svnclient ~]# svn co svn://192.168.150.96:3690/haopython2019
- A haopython2019/自动取款机项目1功能代码
- A haopython2019/自动取款机项目1功能代码/main.py
- A haopython2019/自动取款机项目1功能代码/package
- A haopython2019/自动取款机项目1功能代码/package/person.py
- A haopython2019/自动取款机项目1功能代码/package/card.py
- A haopython2019/自动取款机项目1功能代码/package/view.py
- A haopython2019/自动取款机项目1功能代码/package/operation.py
- 取出版本 1。
- [root@svnclient ~]#