问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

SVN(版本控制系统)是个什么东西?

发布网友 发布时间:2022-04-26 16:24

我来回答

3个回答

懂视网 时间:2022-04-08 05:42

系统环境
# uname -sr
Linux 2.6.32-504.16.2.el6.centos.plus.x86_64
# cat /etc/issue
CentOS release 6.6 (Final)
 
Apache:
 httpd-2.4.12
 
svn:
 subversion-1.8.13
 
MySQL相关: 
 mariadb-10.0.17-linux-x86_64
 mod_auth_mysql-3.0.0
 
其他依赖环境
 pcre-8.37
 serf-1.3.8
 scons-2.3.4
 sqlite-autoconf-3081002


编译安装pcre

 

# cd /opt
# wget -c ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.37.tar.bz2
# tar xf pcre-8.37.tar.bz2
# cd pcre-8.37
# ./configure --prefix=/usr/local/pcre                    
            --enable-unicode-properties       
            --enable-pcre16                   
            --enable-pcre32                   
            --enable-pcregrep-libz            
            --enable-pcregrep-libbz2          
            --enable-pcretest-libreadline     
            --disable-static                  &&
make
 
# make install


编译安装apr

# cd /opt
# wget -c http://mirrors.hust.edu.cn/apache//apr/apr-1.5.2.tar.gz
# tar xf apr-1.5.2.tar.gz
# cd  apr-1.5.2
# ./configure --prefix=//usr/local/apr
# make && make install


编译安装apr-util

# cd /opt
# wget -c http://mirrors.hust.edu.cn/apache//apr/apr-util-1.5.4.tar.gz
# tar xf apr-util-1.5.4.tar.gz
# cd  apr-util-1.5.4
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
# make && make install


编译安装httpd

# cd /opt
# wget -c http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.12.tar.gz
# tar xf httpd-2.4.12.tar.gz
# cd httpd-2.4.12
# ./configure --prefix=/usr/local/apache --with-mpm=event --enable-mods-shared=all --enable-so --enable-most --enable-max --enable-rewrite=shared --enable-speling=shared --enable-deflate=shared --enable-cache=shared --enable-file-cache=shared --enable-proxy=shared --enable-cache --enable-disk-cache --enable-mem-cache --enable-file-cache --enable-proxy-ajp=shared --enable-proxy-balancer=shared --enable-ssl --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-authn-dbd --enable-authn-dbd --enable-authn-dbd --enable-dav-fs --enable-dav-lock
# make 
# make install


二进制源码包安装MairaDB

   详细安装请参考mysql相关博客


安装MySQL认证模块

# cd /opt
# wget -c http://nchc.dl.sourceforge.net/project/modauthmysql/modauthmysql/3.0.0/mod_auth_mysql-3.0.0.tar.gz
# tar xf mod_auth_mysql-3.0.0.tar.gz
# wget -c http://sourceforge.net/p/modauthmysql/patches/13/attachment/mod_auth_mysql_3.0.0_patch_apache2.4.diff
# patch -p0 < mod_auth_mysql_3.0.0_patch_apache2.4.diff
# ln -sv /usr/local/mysql/lib /usr/lib/mysql
# ln -sv /usr/local/mysql/include/mysql /usr/include/mysql
# /usr/local/apache/bin/apxs -c -L/usr/lib/mysql -I/usr/include/mysql -lmysqlclient -lm -lz mod_auth_mysql.c
# /usr/local/apache/bin/apxs -i mod_auth_mysql.la
验证是否mod_auth_mysql.so成功生成
# ls /usr/local/apache/modules/ -l | grep mysql
-rwxr-xr-x 1 root root     294 May 25 00:42 mod_auth_mysql.lo
-rwxr-xr-x 1 root root   93744 May 25 00:42 mod_auth_mysql.o
-rwxr-xr-x 1 root root   66194 May 25 00:42 mod_auth_mysql.so


编译安装svn

编译安装serf
# cd /opt
# wget http://cznic.dl.sourceforge.net/project/scons/scons/2.3.4/scons-2.3.4.tar.gz
# tar xf scons-2.3.4.tar.gz
# cd scons-2.3.4
# python ./setup.py  install
# cd /opt
# wget http://fossies.org/linux/www/serf-1.3.8.tar.gz
# tar xf serf-1.3.8.tar.gz
# cd serf-1.3.8
# scons PREFIX=/usr/local/serf install

# cd /opt
# wget -c http://mirrors.cnnic.cn/apache/subversion/subversion-1.8.13.tar.gz
# tar xf subversion-1.8.13.tar.gz
# cd subversion-1.8.13
# ./configure  --prefix=/usr/local/subversion --with-sqlite=/usr/local/sqlite --with-apr=/usr/local/apr --with-apxs=/usr/
local/apache/bin/apxs‘ --with-apr-util=/usr/local/apr-util --with-openssl --with-zlib --enable-maintainer-mode --withou
t-berkeley-db --enable-shared --enable-static --with-serf=/usr/local/serf
# make
# make install


新建一个测试svn仓库

# mkdir -p /data/svn
# /usr/local/subversion/bin/svnadmin create /data/svn/Repertory


/data/svn创建用户权限控制文件

# vim /data/svn/authz 
 

[groups]
admin = zkg,test,test2,test3
[Repertory:/]
@admin = rw
[test:/]
@admin = rw
[tools:/]
@admin = rw
[hongjiaosuo:/]
@admin = rw


配置认证数据库

mysql> create database svn_auth;
Query OK, 1 row affected (0.00 sec)
mysql> use svn_auth;
Database changed
mysql> grant all privileges on svn.* to svn@‘%‘ identified by ‘svn‘ with grant option;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE users 
    -> (
    ->   user_name CHAR(30) NOT NULL,
    ->   user_passwd CHAR(20) NOT NULL,
    ->   PRIMARY KEY (user_name)    
    -> );
Query OK, 0 rows affected (0.01 sec)
 
mysql> insert into svn_auth.users values(‘test‘,encrypt(‘123456‘));
Query OK, 1 row affected (0.00 sec)
 
mysql> insert into svn_auth.users values(‘test2‘,encrypt(‘123456‘));
Query OK, 1 row affected (0.01 sec)
 
mysql> insert into svn_auth.users values(‘test3‘,encrypt(‘123456‘));
Query OK, 1 row affected (0.00 sec)


整合httpd启用svn模块


ServerRoot "/usr/local/apache"


#Listen 12.34.56.78:80
Listen 8080

#
# Dynamic Shared Object (DSO) Support

# Example:
# LoadModule foo_module modules/mod_foo.so
#
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbd_module modules/mod_authn_dbd.so
LoadModule authn_socache_module modules/mod_authn_socache.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_dbd_module modules/mod_authz_dbd.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_form_module modules/mod_auth_form.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule allowmethods_module modules/mod_allowmethods.so
LoadModule file_cache_module modules/mod_file_cache.so
LoadModule cache_module modules/mod_cache.so
LoadModule cache_disk_module modules/mod_cache_disk.so
LoadModule cache_socache_module modules/mod_cache_socache.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule socache_dbm_module modules/mod_socache_dbm.so
LoadModule socache_memcache_module modules/mod_socache_memcache.so
LoadModule watchdog_module modules/mod_watchdog.so
LoadModule macro_module modules/mod_macro.so
LoadModule dbd_module modules/mod_dbd.so
LoadModule dumpio_module modules/mod_dumpio.so
LoadModule echo_module modules/mod_echo.so
LoadModule buffer_module modules/mod_buffer.so
LoadModule data_module modules/mod_data.so
LoadModule ratelimit_module modules/mod_ratelimit.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule request_module modules/mod_request.so
LoadModule include_module modules/mod_include.so
LoadModule filter_module modules/mod_filter.so
LoadModule reflector_module modules/mod_reflector.so
LoadModule substitute_module modules/mod_substitute.so
LoadModule sed_module modules/mod_sed.so
LoadModule charset_lite_module modules/mod_charset_lite.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule xml2enc_module modules/mod_xml2enc.so
LoadModule proxy_html_module modules/mod_proxy_html.so
LoadModule mime_module modules/mod_mime.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule log_debug_module modules/mod_log_debug.so
LoadModule log_forensic_module modules/mod_log_forensic.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
LoadModule usertrack_module modules/mod_usertrack.so
LoadModule unique_id_module modules/mod_unique_id.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
LoadModule remoteip_module modules/mod_remoteip.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule session_module modules/mod_session.so
LoadModule session_cookie_module modules/mod_session_cookie.so
LoadModule session_dbd_module modules/mod_session_dbd.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule slotmem_plain_module modules/mod_slotmem_plain.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule dialup_module modules/mod_dialup.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule heartbeat_module modules/mod_heartbeat.so
LoadModule heartmonitor_module modules/mod_heartmonitor.so
LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule asis_module modules/mod_asis.so
LoadModule info_module modules/mod_info.so
LoadModule cgid_module modules/mod_cgid.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_lock_module modules/mod_dav_lock.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
LoadModule mysql_auth_module modules/mod_auth_mysql.so


<IfModule unixd_module>
#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.  
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User daemon
Group daemon

</IfModule>

# ‘Main‘ server configuration
#
# The directives in this section set up the values used by the ‘main‘
# server, which responds to any requests that aren‘t handled by a
# <VirtualHost> definition.  These values also provide defaults for
# any <VirtualHost> containers you may define later in the file.
#
# All of these directives may appear inside <VirtualHost> containers,
# in which case these default settings will be overridden for the
# virtual host being defined.
#

#
# ServerAdmin: Your address, where problems with the server should be
# e-mailed.  This address appears on some server-generated pages, such
# as error documents.  e.g. admin@your-domain.com
#
ServerAdmin you@example.com

#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn‘t have a registered DNS name, enter its IP address here.
#
#ServerName www.example.com:80

#
# Deny access to the entirety of your server‘s filesystem. You must
# explicitly permit access to web content directories in other
# <Directory> blocks below.
#
<Directory />
 
   Options FollowSymLinks
   AllowOverride none
#   Require all denied
   Require all granted
</Directory>

#
# Note that from this point forward you must specifically allow
# particular features to be enabled - so if something‘s not working as
# you might expect, make sure that you have specifically enabled it
# below.
#

#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
#DocumentRoot "/usr/local/apache/htdocs"
#<Directory "/usr/local/apache/htdocs">
   #
   # Possible values for the Options directive are "None", "All",
   # or any combination of:
   #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
   #
   # Note that "MultiViews" must be named *explicitly* --- "Options All"
   # doesn‘t give it to you.
   #
   # The Options directive is both complicated and important.  Please see
   # http://httpd.apache.org/docs/2.4/mod/core.html#options
   # for more information.
   #
#    Options Indexes FollowSymLinks

   #
   # AllowOverride controls what directives may be placed in .htaccess files.
   # It can be "All", "None", or any combination of the keywords:
   #   AllowOverride FileInfo AuthConfig Limit
   #
#    AllowOverride None

   #
   # Controls who can get stuff from this server.
   #
#    Require all granted
#</Directory>

#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
   DirectoryIndex index.html
</IfModule>

#
# The following lines prevent .htaccess and .htpasswd files from being
# viewed by Web clients.
#
<Files ".ht*">
   Require all denied
</Files>

#
# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
# container, error messages relating to that virtual host will be
# logged here.  If you *do* define an error logfile for a <VirtualHost>
# container, that host‘s errors will be logged there and not here.
#
ErrorLog "logs/error_log"

#
# LogLevel: Control the number of messages logged to the error_log.
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel info

<IfModule log_config_module>
   #
   # The following directives define some format nicknames for use with
   # a CustomLog directive (see below).
   #
   LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
   LogFormat "%h %l %u %t "%r" %>s %b" common

   <IfModule logio_module>
     # You need to enable mod_logio.c to use %I and %O
     LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %I %O" combinedio
   </IfModule>

   #
   # The location and format of the access logfile (Common Logfile Format).
   # If you do not define any access logfiles within a <VirtualHost>
   # container, they will be logged here.  Contrariwise, if you *do*
   # define per-<VirtualHost> access logfiles, transactions will be
   # logged therein and *not* in this file.
   #
   CustomLog "logs/access_log" common

   #
   # If you prefer a logfile with access, agent, and referer information
   # (Combined Logfile Format) you can use the following directive.
   #
   #CustomLog "logs/access_log" combined
</IfModule>

<IfModule alias_module>
   #
   # Redirect: Allows you to tell clients about documents that used to
   # exist in your server‘s namespace, but do not anymore. The client
   # will make a new request for the document at its new location.
   # Example:
   # Redirect permanent /foo http://www.example.com/bar

   #
   # Alias: Maps web paths into filesystem paths and is used to
   # access content that does not live under the DocumentRoot.
   # Example:
   # Alias /webpath /full/filesystem/path
   #
   # If you include a trailing / on /webpath then the server will
   # require it to be present in the URL.  You will also likely
   # need to provide a <Directory> section to allow access to
   # the filesystem path.

   #
   # ScriptAlias: This controls which directories contain server scripts.
   # ScriptAliases are essentially the same as Aliases, except that
   # documents in the target directory are treated as applications and
   # run by the server when requested rather than as documents sent to the
   # client.  The same rules about trailing "/" apply to ScriptAlias
   # directives as to Alias.
   #
   ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"

</IfModule>

<IfModule cgid_module>
   #
   # ScriptSock: On threaded servers, designate the path to the UNIX
   # socket used to communicate with the CGI daemon of mod_cgid.
   #
   #Scriptsock cgisock
</IfModule>

#
# "/usr/local/apache/cgi-bin" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
<Directory "/usr/local/apache/cgi-bin">
   AllowOverride None
   Options None
   Require all granted
</Directory>

<IfModule mime_module>
   #
   # TypesConfig points to the file containing the list of mappings from
   # filename extension to MIME-type.
   #
   TypesConfig conf/mime.types

   #
   # AddType allows you to add to or override the MIME configuration
   # file specified in TypesConfig for specific file types.
   #
   #AddType application/x-gzip .tgz
   #
   # AddEncoding allows you to have certain browsers uncompress
   # information on the fly. Note: Not all browsers support this.
   #
   #AddEncoding x-compress .Z
   #AddEncoding x-gzip .gz .tgz
   #
   # If the AddEncoding directives above are commented-out, then you
   # probably should define those extensions to indicate media types:
   #
   AddType application/x-compress .Z
   AddType application/x-gzip .gz .tgz

   #
   # AddHandler allows you to map certain file extensions to "handlers":
   # actions unrelated to filetype. These can be either built into the server
   # or added with the Action directive (see below)
   #
   # To use CGI scripts outside of ScriptAliased directories:
   # (You will also need to add "ExecCGI" to the "Options" directive.)
   #
   #AddHandler cgi-script .cgi

   # For type maps (negotiated resources):
   #AddHandler type-map var

   #
   # Filters allow you to process content before it is sent to the client.
   #
   # To parse .shtml files for server-side includes (SSI):
   # (You will also need to add "Includes" to the "Options" directive.)
   #
   #AddType text/html .shtml
   #AddOutputFilter INCLUDES .shtml
</IfModule>

#
# The mod_mime_magic module allows the server to use various hints from the
# contents of the file itself to determine its type.  The MIMEMagicFile
# directive tells the module where the hint definitions are located.
#
#MIMEMagicFile conf/magic

#
# Customizable error responses come in three flavors:
# 1) plain text 2) local redirects 3) external redirects
#
# Some examples:
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
#

#
# MaxRanges: Maximum number of Ranges in a request before
# returning the entire resource, or one of the special
# values ‘default‘, ‘none‘ or ‘unlimited‘.
# Default setting is to accept 200 Ranges.
#MaxRanges unlimited

#
# EnableMMAP and EnableSendfile: On systems that support it,
# memory-mapping or the sendfile syscall may be used to deliver
# files.  This usually improves server performance, but must
# be turned off when serving from networked-mounted
# filesystems or if support for these functions is otherwise
# broken on your system.
# Defaults: EnableMMAP On, EnableSendfile Off
#
#EnableMMAP off
#EnableSendfile on

# Supplemental configuration
#
# The configuration files in the conf/extra/ directory can be
# included to add extra features or to modify the default configuration of
# the server, or you may simply copy their contents here and change as
# necessary.

# Server-pool management (MPM specific)
#Include conf/extra/httpd-mpm.conf

# Multi-language error messages
#Include conf/extra/httpd-multilang-errordoc.conf

# Fancy directory listings
#Include conf/extra/httpd-autoindex.conf

# Language settings
#Include conf/extra/httpd-languages.conf

# User home directories
#Include conf/extra/httpd-userdir.conf

# Real-time info on requests and configuration
#Include conf/extra/httpd-info.conf

# Virtual hosts
#Include conf/extra/httpd-vhosts.conf

# Local access to the Apache HTTP Server Manual
#Include conf/extra/httpd-manual.conf

# Distributed authoring and versioning (WebDAV)
#Include conf/extra/httpd-dav.conf

# Various default settings
#Include conf/extra/httpd-default.conf


Include conf/extra/httpd-svn.conf

# Configure mod_proxy_html to understand HTML4/XHTML1
<IfModule proxy_html_module>
Include conf/extra/proxy-html.conf
</IfModule>

# Secure (SSL/TLS) connections
#Include conf/extra/httpd-ssl.conf
#
# Note: The following must must be present to support
#       starting without SSL on platforms with no /dev/random equivalent
#       but a statically compiled-in mod_ssl.
#
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
#
# uncomment out the below to deal with user agents that deliberately
# violate open standards by misusing DNT (DNT *must* be a specific
# end-user choice)
#
#<IfModule setenvif_module>
#BrowserMatch "MSIE 10.0;" bad_DNT
#</IfModule>
#<IfModule headers_module>
#RequestHeader unset DNT env=bad_DNT
#</IfModule>


重启httpd

/usr/local/apache/bin/httpd -k restart 


测试

技术分享


技术分享

本文出自 “Linux之旅” 博客,请务必保留此出处http://openlinuxfly.blog.51cto.com/7120723/1671273

基于apache整合svn服务器,基于mysql对用户认证

标签:apache   构建svn版本库   基于mysql认证   

热心网友 时间:2022-04-08 02:50

一个版本控制软件,可以上传、下载自己的代码,同时SVN记载着修改、删除等记录,可以下载任何时候的上传代码。追问是不是说,像QQ更新了,就跟这东西有关?

追答不是,它只是一个企业用的版本控制软件

热心网友 时间:2022-04-08 04:08

基本介绍
SVN全名Subversion,即版本控制系统。
软件介绍
运行方式
svn服务器有2种运行方式:独立服务器和借助apache。2种方式各有利弊,用户自行选择。
存储数据
svn存储版本数据也有2种方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。
详见subversion。
集中式版本管理系统
Svn是一种集中式文件版本管理系统。

集中式管理的工作流程如下图:
集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交。所有的版本信息都放在服务器上。如果脱离了服务器,开发者基本上是不可以工作。下面举例说明:
开始新一天的工作:
1:从服务器下载项目组最新代码。
2:进入自己的分支,进行工作,每隔一个小时向服务器自己的分支提交一次代码(很多人都有这个习惯。因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了那些代码,就需要这样做了)。
3:下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。
这就是经典的svn工作流程,从流程上看,有不少缺点,但也有优点。
缺点:
1、 服务器压力太大,数据库容量暴增。
2、 如果不能连接到服务器上,基本上不可以工作,看上面第二步,如果服务器不能连接上,就不能提交,还原,对比等等。
3、不适合开源开发(开发人数非常非常多,但是Google app engine就是用svn的)。但是一般集中式管理的有非常明确的权限管理机制(例如分支访问*),可以实现分层管理,从而很好的解决开发人数众多的问题。
优点:
1、 管理方便,逻辑明确,符合一般人思维习惯。
2、 易于管理,集中式服务器更能保证安全性。
3、 代码一致性非常高。
4、 适合开发人数不多的项目开发。
5、大部分软件配置管理的大学教材都是使用svn和vss。
安全领域的SVN
SVN站在更高层次上对现在的安全产品,从系统和控制的角度进行了"有机"和"无隙"的整合。
SVN是一个安全虚拟网络系统,它将系统整体的信息安全功能均衡合理地分布在不同的子系统中,
使各子系统的功能得到最大限度的发挥,子系统之间互相补充,系统整体性能大于各子系统功能之和,用均衡互补的原则解决了"木桶原理"的问题。
SVN能在跨接Internet, Intranet, Extranet间的网络所有端点实现全面的安全,而且还能提供基于企业策略的信息管理机制以充分有效地利用有限的带宽。SVN可以满足各种企业VPN的要求,通过为公司内部网络、远程和移动用户、分支机构和合作伙伴提供基于Internet的安全连接。所以,我们可以将SVN看成是VPN、防火墙、基于企业策略的信息管理软件集成在一起的Internet安全的综合解决方案。在这样一个网络系统中,所有互联网服务器端和客户端都是安全的,并有一个信息管理机制以不断地通过这个外部网络环境动态地分析及满足客户的特定带宽需求。SVN提供了目前基于网络实现的eBusiness 应用的安全服务,它包含:
对多种应用进行全面的安全认证;
支持多种认证及PKI;
功能强大并对用户透明的通讯加密;
面向用户的集中安全策略管理;
统一跨接Internet、Intranet、Extranet的通讯。
体系结构
带有防火墙的VPN网关,它是一个将防火墙和VPN技术紧密结合的网关产品;
SVN安全远程客户端软件包,一个功能强大的VPN客户端软件,支持台式机用户、远程用户和移动用户,具有集中化管理的个人防火墙功能和VPN用户的安全认证功能;
SVN证书管理模块,一个用于SVN的完整PKI解决方案,它将完善的CA和LDAP目录服务器技术集成在一起;
SVN硬件加密卡,可以通过硬件技术实现功能强大的各种算法以提高VPN的速度和性能;
SVN智能带宽管理模块,一个基于企业策略的带宽管理解决方案,可以智能地管理有限的带宽资源,以确保用于企业重要应用的VPN性能可靠;
SVN冗余管理模块,通过冗余网关集群和防火墙VPN内的SVN冗余模块,对执行重要任务的VPN和防火墙应用在出现故障时实现无缝切换。
自动地址转换模块,一个自动管理IP地址和命名的解决方案,通过提供IP地址服务的跟踪和集中化管理,确保可靠地控制地址分配和提高TCP/IP管理效率;
SVN安全服务器软件包,专门保护单个应用服务器安全的VPN网关软件,它可以保护进行敏感操作的服务器免受攻击和未授权的访问,使客户端建立与服务器间的安全认证和支持交换加密数据的连接;
SVN安全客户端软件包,它将基于状态检测的防火墙和基于IPSec的VPN客户端软件集成在客户端机器上,通过提供集中管理的个人防火墙和对所有企业VPN用户的安全认证,增强客户端机器的安全性。它与 SVN安全远程客户端软件功能相比,增强了客户端的安全功能,如访问控制和安全初始化控制等。
发展历史
早在2000年,CollabNet, Inc.就开始召集开发人员开发CVS的替代品。CollabNet 提供一套名为SourceCast协同工作套件,其中的一部分组件是版本控制。虽然SourceCast使用CVS作为其最初的版本控制系统,但是CVS的种种*从一开始就处处可见,最后CollabNet明白必须要找到一个更好的解决方案。不幸的是,至少在免费license中,因为没有更好的选择,CVS已经广泛成为了开源世界中事实上的标准。所以CollabNet决定开发一个新的版本控制系统,保留CVS的基本特性但去除CVS的bug和不好的特性。
在2000年2月,他们联系《使用CVS开发开源项目》(Open Source Development with CVS)(Coriolis, 1999)的作者Karl Fogel,并征求了他是否愿意在这个新的项目中担任一个角色。巧合的是,当时Karl已经和他的朋友Jim Blandy讨论了一个关于新的版本控制系统的设计。在1995年,这两人就成立了Cyclic Software,一个提供CVS的商业支持的软件公司。虽然他们经营商业服务,但是仍然在每天都在工作中使用CVS。使用CVS的挫折感使得Jim认真思考更好的方法来管理数据,不但确定名字为“Subversion”,而且完成了Subversion档案库的基础设计。
当CollabNet的电话到来时,Karl立即答应了加入项目中,而且Jim让他的雇主RedHat Software同意让他在这个项目中不定期工作。CollabNet雇用了Karl和Ben Collins-Sussman,并在5月开始了详细设计工作。在得到了来自CollabNet的Brian Behlendorf、Jason Robbins和Greg Stein(当时是一名活跃在WebDAV/DeltaV规范过程的自由程序员)很多创意的帮助下,Subversion很快地引起了一个活跃开发者社区的注意。它找出并欢迎很多同样在CVS上受到挫折的社员能来为这个项目做点什么。
Subversion 最初的设计Team定下了几个简单的目标。 它必须在功能上可取代 CVS,也就是说, 所有 CVS 可做到的事, 它都要能够作到。 在修正最明显的瑕疵的同时, 还要保留相同的开发模式。 还有, Subversion 应该要和 CVS 很相像, 任何 CVS 使用者只要花费少许的力气, 就可以很快地上手。
经过十四个月的编码后, Subversion 于2001年8月31日开始实现 “自行管理”。 也就是说, 开发人员不再使用 CVS 来管理 Subversion 的代码, 而以 Subversion 自己来管理。
优缺分析
所有的文档都显示SVN可以取代CVS,同时SVN的问题和缺点都被隐藏了。不幸的是,我们并不认为SVN是CVS的替代品,尽管很多缺陷都被修改了。更有甚者,它甚至让人重回VSS。CVS和SVN的比较类似于比较C++和Java。很明显CVS和SVN都远比SourceSafe强大的多,如同C++和Java比Basic强大的多。CVS代表了几乎代码控制系统的所有功能项,尽管有时他的实现并不很方便。SVN修正并添加了一些CVS并不拥有功能。例如,创建标志和分支bious,你在编辑文件时其他人不会有任何通知。SVN并不是CVS的替代品,只是个不同的系统,类似于CVS。它有些特有的功能,足以作为采用它的理由。这些功能使他更适合于开发环境,例如对PowerBuilder。下面你可以找到两者的相对优势、劣势。
1 存储类型格式
CVS是个基于RCS文件的版本控制系统。每个CVS文件都不过是普通的文件,加上一些额外信息。这些文件会简单的重复本地文件的树结构。因此,不必担心有什么数据损失,如果必要的话可以手工修改RCS文件。
SVN是基于关系数据库的(BerkleyDB)或一系列二进制文件的(FS_FS)。一方面这解决了许多问题 (例如,并行读写共享文件)以及添加了许多新功能(例如运行时的事务特性。)。然而另一方面,数据存储由此变得不透明。
2 速度
CVS比较慢。
整体而言,由于架构实现的不同, SVN的确比CVS快很多。在网络上它只传输很少的信息并支持更多的离线模式的功能。但这也是有代价的。速度的代价就是巨大的存储(完全备份所有的工作文件)。
3 标志&分支
SVN把采用标志和分支而抛弃了其他三件东西,实际上这意味着他们把这个概念替换为在档案库内部复制文件或目录以便保存日志。这样一来,无论标志创建还是分支创建都只是仓库内部的文件复制了。对分支而言:现在分支不过是在仓库内部的一个单独的目录而已了,不像早期还有些什么交错。对标志而言:已经不能对代码加标志了。在某种程度上说,SVN全文件编号补足了这个缺陷,SVN里整个仓库都有版本号,但不是针对单个文件。
4 元数据
CVS只允许存储文件。 
SVN允许一个文件有任意多的可命名属性,功能十分完全。
5 文件类型
CVS最初是为文本文件存储而设计的。因此其他文件类型(二进制,统一码)文件的支持几乎没有,如需要的话则要有其他信息,并且客户端服务器端都要调整。
SVN会关心所有的文件类型,不需要你来手工操作。
6 回滚
CVS允许任意的回滚,在任意一个已递交的版本上,尽管这要花些时间(所有的文件都要分别处理)。 
SVN不允许递交后回滚。建议把版本库里好的状态版本加到末尾,覆盖掉损坏的版本。而损坏的版本无论如何也是会存在数据库里的。(SVN的滚回操作实际上是merge操作)
7 事务
CVS中的“零或一”事务原则根本没有实现。如果检入几个文件的话(加到服务器上),很有可能部分文件完成了,而另几个没有。作为一个潜规则,手工纠正这些并且对余下的文件 (而不是所有文件)一一重复检入。这样这些文件将在两阶段中被检入。SVN的确支持“零或一”事务原则,这是SVN的一大优势。
软件相关
SVN-Vss与Svn的对比
1. 支持重命名,这对 Java 开发来说非常重要。
为了得到更好的代码,开发中需要经常进行重构,重构就经常涉及到文件的重构名,而重命名中 VSS中是不被支持的。
2. 开发的时候不一定要锁定。
一方面导致重构不方便,另一方面,不能离线开发,使用 SVN就不同,可以带回家继续开发,回来后,提交就行了。
3. 多平台。
可以支持多个平台下的操作
4. 更好的客户端支持。
Eclipse 中的 VSS Plugin 不如它的 SVN Plugin 好用。一个在 Windows 下用的 SVN 客户端 TortoiseSVN 也比VSS 的客户端好用(VSS 只有微软提供的一个 GUI 客户端)。
5. 更好地与外围工具集成。
各种各样的外围工具(主要是服务器端),满足多种需要。如果有需要,也可以自己写插件或管理脚本,开放的架构,允许我们这样做。
6. 方便。
一个例子:部署应用的时候,以前的做法是找出一个项目中修改过的文件,更新到服务器上去,现在可以在服务器上执行 svn export 命令,把代码库中的最新版本导出,完成部署(也可以替换回老版本)。
7. 速度与稳定性看起来都不错。
学习它的管理、它的工作方式,是值得的。而 VSS是一个已经被逐渐抛弃的软件。如果时间不是多得没处用,那么就把时间花在最值得花的东西上面。
SVN远程修改密码
由于SVN没有自己的远程管理工具,只能上服务器上用命令行操作,故操作起来比较复杂。为此,svn俱乐部开发出svn管家对svn进行远程管理,svn管家目前推出了windows版本和linux版本,部署很方便,不用安装额外的环境如mysql、PHP或JAVA。svn管家不仅可以方便的远程修改用户密码,更可以对svn进行远程管理,极大地方便了SVN的用户。
其他
从启动这个项目到现在,虽然CollabNet提供了大部分的资金(它付出几位全职 Subversion 开发人员的薪水), 但这还是个开源项目, 由一组松散透明的规则所约定。 CollabNet 拥有代码的版权完全符合 Debian Free Software Guidelines。 换句话说, 每个人都可以随意地免费下载、修改、以及重新发布 Subversion; 完全不需要经过 CollabNet, 或是任何人的允许。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
用六个成语各造一段话 关于把握机会的名言名句 关于把握住机会的名言名句(把握机会,成就未来) 关于把握机会的名言名句(把握机会的励志句子) 关于机会的名言名句篇一 包括“机遇”的名言名句(一) BPM中国普及之路还有多远? 哪个公司可以做OA系统 目前业内有很多人认为OA现在某些应用或者说功能在向BPM领域延生,请问... ting的三个声调组词 版本控制软件的总结 大家都用什么软件来做文档的版本管理呢? Vivo手机怎么藏 游戏? vivoy7s屏幕如何隐藏游戏? VIVO如何把游戏藏起来? vivos6如何将游戏隐藏? 如何做麻辣排骨串 红烧麻辣排骨的做法如何?谁能帮帮我? 泰迪熊是哪个国家的品牌? 辣子排骨的家常做法 给泰迪熊取名字 排骨别再清炖红烧,大厨教你简单好吃做法,麻辣干香又下饭 世界上最好的泰迪熊是什么牌子的? 有没有和《泰迪熊》这个电影上的泰迪... 泰迪熊究竟是怎么样的? 泰迪熊的故事?? 给红色泰迪熊起个好听洋气的名字 真实的泰迪熊是什么样? 泰迪熊的特点 美的洗衣机MB80-8000QCS的过滤器在哪里?怎么拆? 图片中的字带拼音,手机打出来的,哪个输入法 版本控制是什么 版本控制的系统特征 读作是什么意思呢? 读作是什么意思? “读作”和“写作”的区别? 鸡蛋手抓饼的做法,火腿鸡蛋手抓饼怎么做好 鸡蛋手抓饼怎么做 数学中的“写作”、“记作”和“读作”是什么意思? 怎么做鸡蛋手抓饼 “读作”是大写还是小写? 现成手抓饼的做法 “读作”是语文字吗? 读作意思是什么意思? 读作怎么读? 41.47读作什么? 90020003020读作:什么? 想自己包粽子怎么做啊?? &#39;演讲,像女人的裙子,越短越好&#39;这话谁讲的 林语堂有句话说 演讲要像裙子一样,越短越好 原话是怎么说的啊 什么样的演讲稿才算是好的?