重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Subversion 是一个受欢迎的开源的版本控制工具。他在互联网免费提供并且开源。大多数 GNU/Linux 发行版系统自带,所以它很有可能已经安装在你的系统上了。可以使用下面命令检查是否安装了。
专注于为中小企业提供成都网站设计、成都网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业香洲免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千多家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
[jerry@CentOS ~]$ svn --version
如果 Subversion 客户端没有安装,命令将报告错误,否则它将出现安装的软件版本
[jerry@CentOS ~]$ svn --version
-bash: svn: command not found
如果你使用基于 RPM 的 GNU/Linux,可以使用 yum 命令进行安装,安装成功之后,执行 svn --version 命令。
[jerry@CentOS ~]$ su -
Password:
[root@CentOS ~]# yum install subversion
[jerry@CentOS ~]$ svn --version
svn, version 1.6.11 (r934486)
compiled Jun 23 2012, 00:44:03
如果你使用基于 Debian 的 GNU/Linux,使用 apt 命令进行安装。
[jerry@Ubuntu]$ sudo apt-get update
[sudo] password for jerry:
[jerry@Ubuntu]$ sudo apt-get install subversion
[jerry@Ubuntu]$ svn --version
svn, version 1.7.5 (r1336830)
compiled Jun 21 2013, 22:11:49
Apache 安装
我们已经看到如何将 SVN 客户端安装到 GNU/Linux 上,让我们看看如何创建一个新的版本库让使用者们访问。
我们必须必须在服务器上安装 Apache httpd 模块和 svnadmin 工具。subversion 从 /etc/httpd/conf.d/subversion.conf 读取配置文件, subversion.conf 看起来像这个样子
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
Location /svn
DAV svn
SVNParentPath /var/www/svn
AuthType Basic
AuthName "Authorization Realm"
AuthUserFile /etc/svn-users
Require valid-user
/Location
让我们创建 Subversion 用户,授权他们访问版本库,htpasswd 命令用于创建和更新用来保存用户名和密码的纯文本文件给 HTTP 用户提供基本身份认证。-c 选项创建一个密码文件,如果密码文件已经存在了,它将会被覆盖。这就是为什么 -c 只在第一次使用。-m 选项用于设置是否启用 MD5 加密密码。
用户安装
让我们创建 tom
[root@CentOS ~]# htpasswd -cm /etc/svn-users tom
New password:
Re-type new password:
Adding password for user tom
让我们创建 jerry
[root@CentOS ~]# htpasswd -m /etc/svn-users jerry
New password:
Re-type new password:
Adding password for user jerry
[root@CentOS ~]#
创建一个 Subversion 父目录保存所有的工作,(/etc/httpd/conf.d/subversion.conf)。
[root@CentOS ~]# mkdir /var/www/svn
[root@CentOS ~]# cd /var/www/svn/
版本库安装
创建一个名为 project_repo 的版本库。svnadmin 命令用于创建一个新的版本库和一些其他目录保存数据。
[root@CentOS svn]# svnadmin create project_repo
[root@CentOS svn]# ls -l project_repo
total 24
drwxr-xr-x. 2 root root 4096 Aug 4 22:30 conf
drwxr-sr-x. 6 root root 4096 Aug 4 22:30 db
-r--r--r--. 1 root root 2 Aug 4 22:30 format
drwxr-xr-x. 2 root root 4096 Aug 4 22:30 hooks
drwxr-xr-x. 2 root root 4096 Aug 4 22:30 locks
-rw-r--r--. 1 root root 229 Aug 4 22:30 README.txt
让我们更改版本库的用户和组所有权。
[root@CentOS svn]# chown -R apache.apache project_repo/
检查是否启用SELinux或没有使用SELinux状态工具
[root@CentOS svn]# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
如果SELinux启用了,我们必须更改安全的上下文。
[root@CentOS svn]# chcon -R -t httpd_sys_content_t /var/www/svn/project_repo/
如果允许通过 HTTP 进行提交,执行下面命令。
[root@CentOS svn]# chcon -R -t httpd_sys_rw_content_t /var/www/svn/project_repo/
更改这些配置后,我们重启 Apache 服务器。
[root@CentOS svn]# service httpd restart
Stopping httpd: [FAILED]
Starting httpd: httpd: apr_sockaddr_info_get() failed for CentOS
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
[ OK ]
[root@CentOS svn]# service httpd status
httpd (pid 1372) is running...
[root@CentOS svn]#
我们已经成功配置好了 Apache 服务器,现在我们将配置版本库,使用默认的授权文件给可信的用户访问,添加下列几行到 roject_repo/conf/svnserve.conf 文件。
anon-access = none
authz-db = authz
照惯例,每个 SVN 项目都有主干,标签,分支在项目的 root 目录。
主干是主要开发和经常被开发者们查看的目录。
分支目录用于追求不同的开发方向。
让我们在项目版本库底下创建主干,标签,分支结构。
[root@CentOS svn]# mkdir /tmp/svn-template
[root@CentOS svn]# mkdir /tmp/svn-template/trunk
[root@CentOS svn]# mkdir /tmp/svn-template/branches
[root@CentOS svn]# mkdir /tmp/svn-template/tags
现在从 /tmp/svn-template 导入这些文件目录。
[root@CentOS svn]# svn import -m 'Create trunk, branches, tags directory structure' /tmp/svn-template/
Adding /tmp/svn-template/trunk
Adding /tmp/svn-template/branches
Adding /tmp/svn-template/tags
Committed revision 1.
[root@CentOS svn]#
完成了!我们已经成功创建版本库并允许 Tom 和 Jerry 访问,从现在开始他们可以所有版本库支持的操作了。
对互联网公司而言,SVN的重要性不言而喻。本文选用CollabNet Subversion Edge作为SVN服务端和控制台,以TortoiseSVN作为客户端部署SVN系统。CollabNet Subversion Edge控制台功能十分强大,便于维护管理,且能采用LDAP认证方式,适合部署了内部域控的组织。而TortoiseSVN客户端的功能和性能有口皆碑,无需赘述。
点击“OK”,在跳出的登陆框里输入用户名“admin”及其密码,按回车键登录。
可以发现成功登录版本库。
输入版本库url和检出目录,点击“OK”,在弹出的认证框里输入域账号及其密码,点击“OK”,开始检出版本库。
检出成功。
可以发现目标版本库被成功检出到目标文件夹里。
可以看到一些LDAP用户登陆过系统管理后台,点击角色列表,可以看到系统已经定义好的角色:
点击角色名可以将该角色授予用户:
![]DFNIM.png]( )
TortoiseSVN是windows下一个非常优秀的SVN客户端工具,通过它我们可以可视化的管理我们的版本库。不过由于它只是一个客户端,所以它不能对版本库进行权限管理。
安装时按默认步骤安装即可,无需详述。
TortoiseSVN不是一个独立的窗口程序,而是集成在windows右键菜单中,使用起来比较方便。以下简要说明TortoiseSVN的每个菜单项如何使用。
点击SVN Checkout,弹出检出提示框,在URL of repository输入框中输入目标版本库地址,在Checkout directory输入框中输入本地工作拷贝的路径,点击确定,即可检出服务器上的版本库。
如果版本库在本地已有工作拷贝,则取得最新版本只是执行SVN Update即可,点击SVN Update,系统弹出更新提示框,点击确定,则把服务器上的最新版本更新下来。
把自己工作拷贝所做的修改提交到版本库中,这样别人在获取最新版本(Update)的时候就可以看到你的修改了。
显示当前文件(夹)的所有修改历史。SVN支持文件以及文件夹独立的版本追溯。
查看当前版本库,这是TortoiseSVN查看版本库的入口,通过这个菜单项,我们就可以进入配置库的资源管理器,然后就可以对配置库的文件夹进行各种管理,相当于我们打开我的电脑进行文件管理一样。
点击Check for Modifications,弹出一个列出所有待更新的文件及文件夹的状态的窗口。
查看文件的版本分支结构,可以点击Revision Graph,系统以图形化形式显示版本分支。
从版本库中获取某一个历史版本。这个功能主要是方便查看历史版本用,而不是回滚版本。注意:获取下来之后,对这个文件不建议进行任何操作。
如果你做了修改,那么当你提交的时候SVN会提示你,当前版本已失效(即不是最新版本),无法提交,需要先update一下。这样你所做的修改也就白费了。
如果你对工作拷贝做了一些修改,但是你又不想要了,那么你可以使用这个选项把所做的修改撤销。
如果当前工作拷贝有任何问题的话,可以使用这个选项进行修正。例如,有些文件原来是版本控制的,但是你没有通过tortoiseSVN就直接删除了,但是tortoiseSVN还是保留着原来的信息(每个文件夹下都有一个.svn的隐藏文件夹,存放着当前文件夹下所有文件夹的版本信息)所以这就会产生一些冲突。可以使用cleanup来清理一下。
如果你不想别人修改某个文件的话,那么你就可以把这个文件进行加锁,这样可以保证只有你对这个文件有修改权。除非你释放了锁,否则别人不可能提交任何修改到配置库中。
Branch是分支的意思。例如当在设计一个东西的时候,不同的人有不同的实现,但是没有经过实践检验,谁也不想直接覆盖掉其他人的设计,所以可以引出不同的分支。将来如果需要,可以将这些分支进行合并。
tag是打标签的意思。通常当项目开发到一定程度,已经可以稳定运行的时候,可以对其打上一个标签,作为稳定版。将来可以方便的找到某个特定的版本(当然我们也可以使用版本号来查找,但是数字毕竟不方便)。
SVN对于分支和标签都是采用类似Linux下硬链接的方式(同一个文件可以存在两个地方,删除一个不会影响另一个,所做修改会影响另一个),来管理文件的,而不是简单的复制一份文件的拷贝,所以不会有浪费存储空间的问题存在。
文件创建分支后,你可以选择在主干工作,还是在分支工作,这时候你可以通过Switch来切换。
主干和分支的版本进行合并,在源和目的各输入文件的路径,版本号,点击确定。系统即对文件进行合并,如果存在冲突,请参考冲突解决。
把整个工作拷贝导出到本地目录下,导出的文件将不带svn文件标志,文件及文件夹没有绿色的”√”符号标志。这个功能是方便我们部署用。
当我们需要发布一个稳定版本时,就可以使用这个功能将整个工程导出到某个文件夹,新的文件夹将不会包含任何版本信息了。
当服务器上的文件库目录已经改变,我们可以把工作拷贝重新定位,在To URL输入框中输入新的地址。
当我们版本库发生转移的时候就需要用到这个功能了。例如原先的版本库是建在U盘上的,现在转移到(复制整个配置库文件夹)开发服务器上,使用https代替文件系统的访问。因此就需要将原来的工作拷贝的目标版本库重新定位到开发服务器上。
选择要提交到服务器的目录,右键选择TortoiseSVN-Import,系统弹出导入提示框,在URL of repository输入框中输入服务器仓库地址,在Import Message输入框中输入导入日志信息,点击确定,则文件导入到服务器仓库中。
如果有多个文件及文件夹要提交到服务器,我们可以先把这些要提交的文件加入到提交列表中,要执行提交操作,点击执行提交(SVN Commit),即可把所有文件一次性提交到服务器上。
创建/发布补丁。如果管理员不想让任何人都随便提交修改,而是都要经过审核才能做出修改,那么其他人就可以通过创建补丁的方式,把修改信息(补丁文件)发送给管理员,管理员审核通过之后就可以使用apply patch提交这次修改了。
大多数项目会有一些文件(夹)不需要版本控制,如编译产生的*.obj, *.lst,等。这时候可以把这些文件加入忽略列表。
腾讯云SVN使用限制:系统限制
1、单个文件的大小不能超过800 MByte,否则会影响服务质量。
2、单个应用的CDN SVN库的文件总容量上限为6GB,文件总个数上限为50W。
3、CDN SVN库的一个目录下面所包含的文件个数上限为5万。
4、一次提交的文件/目录更改数不能超过5万个,文件总大小不能超过6G。如果文件数过多,请分开多次提交。(更改数是指对文件或目录做的增删改操作的次数)。
腾讯云SVN使用限制:文件及目录命名限制
1、目录和文件名的开头只能使用字母、数字;
2、目录及文件的命名都不支持中文名,仅支持字母、数字、下划线、"." ;
3、文件名和目录名不要包含空格,空格会被过滤;
4、目录名长度不能超过4096字节,文件名长度不能超过255字节(一个英文字符占1个字节,一个中文占2个字节)。
腾讯云SVN使用限制:安全限制
1、腾讯云平台的SVN server进行了安全加固,可严格控制用户访问边界,防止代码泄漏等安全事件。
2、腾讯云平台的SVN server具有防攻击的能力,有效防御访问攻击以及恶意上载垃圾数据等行为。
3、腾讯云平台SVN采用统一的云服务帐号进行登录,云服务帐号体系可以有效保证帐号安全。