简介
Subversion(SVN) 是一个开源的版本控制系統,也就是说 Subversion 管理着随时间改变的数据。这些数据放置在一个中央资料档案库(repository) 中。这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样你就可以把档案恢复到旧的版本,或是浏览文件的变动历史。
SVN 的一些概念
Checkout(提取):当你手上没有源代码的时候,你需要从repository checkout一份
Commit(提交):当你已经修改了代码,你就需要Commit到repository
Update (更新):当你已经Checkout了一份源代码,Update一下你就可以和Repository 上的源代码同步,你手上的代码就会有最新的变更
日常开发过程其实就是这样的(假设你已经Checkout并且已经工作了几天):Update(获得最新的代码) —>作出自己的修改并调试成功 —> Commit(大家就可以看到你的修改了) 。
如果两个程序员同时修改了同一个文件呢,SVN可以合并这两个程序员的改动,实际上SVN管理源代码是以行为单位的,就是说两个程序员只要不是修改了同一行程序,SVN都会自动合并两种修改。
如果是同一行,SVN会提示文件Confict,冲突,需要手动确认。
subversion目录说明:
db目录:就是所有版本控制的数据存放文件。
hooks目录:放置hook脚本文件的目录。
locks目录:用来放置subversion见艰苦锁定数据的目录,用来追踪存取文件库的客户端。
format文件:是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号。
conf目录:是这个仓库的配置文件(仓库的用户访问账号、权限等)。
进入conf目录(该svn版本库配置文件)cd conf/
passwd 是帐号密码文件
svnserve.conf SVN服务配置文件
#添加svn账号,并且禁止登陆 useradd-M-s/sbin/nologinsvn
[root@localhost~]#yuminstallsubversion-y Loadedplugins:fastestmirror base|3.6kB00:00 extras|3.4kB00:00 updates|3.4kB00:00 Loadingmirrorspeedsfromcachedhostfile *base:mirrors.163.com *extras:mirrors.163.com *updates:mirrors.163.com ResolvingDependencies -->Runningtransactioncheck --->Packagesubversion.x86_640:1.7.14-10.el7willbeinstalled -->ProcessingDependency:subversion-libs(x86-64)=1.7.14-10.el7forpackage:subversion-1.7.14-10.el7.x86_64 -->ProcessingDependency:libsvn_wc-1.so.0()(64bit)forpackage:subversion-1.7.14-10.el7.x86_64 -->ProcessingDependency:libsvn_subr-1.so.0()(64bit)forpackage:subversion-1.7.14-10.el7.x86_64 -->ProcessingDependency:libsvn_repos-1.so.0()(64bit)forpackage:subversion-1.7.14-10.el7.x86_64 -->ProcessingDependency:libsvn_ra_svn-1.so.0()(64bit)forpackage:subversion-1.7.14-10.el7.x86_64 -->ProcessingDependency:libsvn_ra_neon-1.so.0()(64bit)forpackage:subversion-1.7.14-10.el7.x86_64 -->ProcessingDependency:libsvn_ra_local-1.so.0()(64bit)forpackage:subversion-1.7.14-10.el7.x86_64 -->ProcessingDependency:libsvn_ra-1.so.0()(64bit)forpackage:subversion-1.7.14-10.el7.x86_64 -->ProcessingDependency:libsvn_fs_util-1.so.0()(64bit)forpackage:subversion-1.7.14-10.el7.x86_64 -->ProcessingDependency:libsvn_fs_fs-1.so.0()(64bit)forpackage:subversion-1.7.14-10.el7.x86_64 -->ProcessingDependency:libsvn_fs_base-1.so.0()(64bit)forpackage:subversion-1.7.14-10.el7.x86_64 -->ProcessingDependency:libsvn_fs-1.so.0()(64bit)forpackage:subversion-1.7.14-10.el7.x86_64 -->ProcessingDependency:libsvn_diff-1.so.0()(64bit)forpackage:subversion-1.7.14-10.el7.x86_64 -->ProcessingDependency:libsvn_delta-1.so.0()(64bit)forpackage:subversion-1.7.14-10.el7.x86_64 -->ProcessingDependency:libsvn_client-1.so.0()(64bit)forpackage:subversion-1.7.14-10.el7.x86_64 -->ProcessingDependency:libneon.so.27()(64bit)forpackage:subversion-1.7.14-10.el7.x86_64 -->ProcessingDependency:libaprutil-1.so.0()(64bit)forpackage:subversion-1.7.14-10.el7.x86_64 -->ProcessingDependency:libapr-1.so.0()(64bit)forpackage:subversion-1.7.14-10.el7.x86_64 -->Runningtransactioncheck --->Packageapr.x86_640:1.4.8-3.el7willbeinstalled --->Packageapr-util.x86_640:1.5.2-6.el7willbeinstalled --->Packageneon.x86_640:0.30.0-3.el7willbeinstalled -->ProcessingDependency:libpakchois.so.0()(64bit)forpackage:neon-0.30.0-3.el7.x86_64 --->Packagesubversion-libs.x86_640:1.7.14-10.el7willbeinstalled -->Runningtransactioncheck --->Packagepakchois.x86_640:0.4-10.el7willbeinstalled -->FinishedDependencyResolution DependenciesResolved ================================================================================ PackageArchVersionRepositorySize ================================================================================ Installing: subversionx86_641.7.14-10.el7base1.0M Installingfordependencies: aprx86_641.4.8-3.el7base103k apr-utilx86_641.5.2-6.el7base92k neonx86_640.30.0-3.el7base165k pakchoisx86_640.4-10.el7base14k subversion-libsx86_641.7.14-10.el7base921k TransactionSummary ================================================================================ Install1Package(+5Dependentpackages) Totaldownloadsize:2.3M Installedsize:8.1M Downloadingpackages: (1/6):apr-util-1.5.2-6.el7.x86_64.rpm|92kB00:00 (2/6):neon-0.30.0-3.el7.x86_64.rpm|165kB00:00 (3/6):pakchois-0.4-10.el7.x86_64.rpm|14kB00:00 (4/6):subversion-1.7.14-10.el7.x86_64.rpm|1.0MB00:00 (5/6):subversion-libs-1.7.14-10.el7.x86_64.rpm|921kB00:00 (6/6):apr-1.4.8-3.el7.x86_64.rpm|103kB00:01 -------------------------------------------------------------------------------- Total1.8MB/s|2.3MB00:01 Runningtransactioncheck Runningtransactiontest Transactiontestsucceeded Runningtransaction Installing:apr-1.4.8-3.el7.x86_641/6 Installing:apr-util-1.5.2-6.el7.x86_642/6 Installing:pakchois-0.4-10.el7.x86_643/6 Installing:neon-0.30.0-3.el7.x86_644/6 Installing:subversion-libs-1.7.14-10.el7.x86_645/6 Installing:subversion-1.7.14-10.el7.x86_646/6 Verifying:neon-0.30.0-3.el7.x86_641/6 Verifying:apr-1.4.8-3.el7.x86_642/6 Verifying:subversion-1.7.14-10.el7.x86_643/6 Verifying:apr-util-1.5.2-6.el7.x86_644/6 Verifying:pakchois-0.4-10.el7.x86_645/6 Verifying:subversion-libs-1.7.14-10.el7.x86_646/6 Installed: subversion.x86_640:1.7.14-10.el7 DependencyInstalled: apr.x86_640:1.4.8-3.el7apr-util.x86_640:1.5.2-6.el7 neon.x86_640:0.30.0-3.el7pakchois.x86_640:0.4-10.el7 subversion-libs.x86_640:1.7.14-10.el7 Complete! [root@localhost~]#svnserve-h usage:svnserve[-d|-i|-t|-X][options] Validoptions: -d[--daemon]:daemonmode -i[--inetd]:inetdmode -t[--tunnel]:tunnelmode -X[--listen-once]:listen-oncemode(usefulfordebugging) -r[--root]ARG:rootofdirectorytoserve -R[--read-only]:forcereadonly,overridingrepositoryconfigfile --config-fileARG:readconfigurationfromfileARG --listen-portARG:listenport [mode:daemon,listen-once] --listen-hostARG:listenhostnameorIPaddress [mode:daemon,listen-once] -6[--prefer-ipv6]:preferIPv6whenresolvingthelistenhostname [IPv4ispreferredbydefault.UsingIPv4andIPv6 atthesametimeisnotsupportedindaemonmode. Useinetdmodeortunnelmodeifyouneedthis.] -c[--compression]ARG:compressionleveltousefornetworktransmissions [0..nocompression,5..default,9..maximumcompression] -M[--memory-cache-size]ARG:sizeoftheextrain-memorycacheinMBusedto minimizeredundantoperations. Defaultis128forthreadedand16fornon- threadedmode. [usedforFSFSrepositoriesonly] --cache-txdeltasARG:enableordisablecachingofdeltasbetweenolder revisions. Defaultisno. [usedforFSFSrepositoriesonly] --cache-fulltextsARG:enableordisablecachingoffilecontents Defaultisyes. [usedforFSFSrepositoriesonly] -T[--threads]:usethreadsinsteadoffork[mode:daemon] --foreground:runinforeground(usefulfordebugging) [mode:daemon] --log-fileARG:svnservelogfile --pid-fileARG:writeserverprocessIDtofileARG [mode:daemon,listen-once] --tunnel-userARG:tunnelusername(defaultiscurrentuid'sname) [mode:tunnel] -h[--help]:displaythishelp --version:showprogramversioninformation -q[--quiet]:noprogress(onlyerrors)tostderr [root@localhost~]#svnserve--version svnserve,version1.7.14(r1542130) compiledNov202015,19:25:09 Copyright(C)2013TheApacheSoftwareFoundation. Thissoftwareconsistsofcontributionsmadebymanypeople;seetheNOTICE fileformoreinformation. Subversionisopensourcesoftware,seehttp://subversion.apache.org/ Thefollowingrepositoryback-end(FS)modulesareavailable: *fs_base:ModuleforworkingwithaBerkeleyDBrepository. *fs_fs:Moduleforworkingwithaplainfile(FSFS)repository. CyrusSASLauthenticationisavailable. [root@localhost~]#whichsvn /usr/bin/svn [root@localhost~]#mkdir/var/svn [root@localhost~]#cd/var/svn/ #创建版本库 [root@localhostsvn]#svnadmincreate/var/svn/svnrepos [root@localhostsvn]# [root@localhostsvn]#ls svnrepos [root@localhostsvn]#cdsvnrepos/ [root@localhostsvnrepos]#ls confdbformathookslocksREADME.txt [root@localhostsvnrepos]#catREADME.txt ThisisaSubversionrepository;usethe'svnadmin'tooltoexamine it.Donotadd,delete,ormodifyfileshereunlessyouknowhow toavoidcorruptingtherepository. Visithttp://subversion.apache.org/formoreinformation. [root@localhostsvnrepos]#cdconf/ [root@localhostconf]#ls authzpasswdsvnserve.conf [root@localhostconf]#vimpasswd ###Thisfileisanexamplepasswordfileforsvnserve. ###Itsformatissimilartothatofsvnserve.conf.Asshowninthe ###examplebelowitcontainsonesectionlabelled[users]. ###Thenameandpasswordforeachuserfollow,oneaccountperline. [users] #harry=harryssecret #sally=sallyssecret #添加admin用户 admin=123456 [root@localhostconf]#vimauthz ###Thisfileisanexampleauthorizationfileforsvnserve. ###Itsformatisidenticaltothatofmod_authz_svnauthorization ###files. ###Asshownbeloweachsectiondefinesauthorizationsforthepathand ###(optional)repositoryspecifiedbythesectionname. ###Theauthorizationsfollow.Anauthorizationlinecanreferto: ###-asingleuser,###-agroupofusersdefinedinaspecial[groups]section,###-analiasdefinedinaspecial[aliases]section,###-allauthenticatedusers,usingthe'$authenticated'token,###-onlyanonymoususers,usingthe'$anonymous'token,###-anyone,usingthe'*'wildcard. ### ###Amatchcanbeinvertedbyprefixingtherulewith'~'.Rulescan ###grantread('r')access,read-write('rw')access,ornoaccess ###(''). [aliases] #joe=/C=XZ/ST=Dessert/L=SnakeCity/O=SnakeOil,Ltd./OU=ResearchInstitute/CN=JoeAverage [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 # #添加新建的用户admin,并授予rw权限 [/] admin=rw [root@localhostconf]#catsvnserve.conf ###Thisfilecontrolstheconfigurationofthesvnservedaemon,ifyou ###useittoallowaccesstothisrepository.(Ifyouonlyallow ###accessthroughhttp:and/orfile:URLs,thenthisfileis ###irrelevant.) ###Visithttp://subversion.apache.org/formoreinformation. [general] ###Theanon-accessandauth-accessoptionscontrolaccesstothe ###repositoryforunauthenticated(a.k.a.anonymous)usersand ###authenticatedusers,respectively. ###Validvaluesare"write","read",and"none". ###Settingthevalueto"none"prohibitsbothreadingandwriting; ###"read"allowsread-onlyaccess,and"write"allowscomplete ###read/writeaccesstotherepository. ###Thesamplesettingsbelowarethedefaultsandspecifythatanonymous ###usershaveread-onlyaccesstotherepository,whileauthenticated ###usershavereadandwriteaccesstotherepository. #匿名用户可读 #anon-access=read anon-access=none #auth-access=write ###Thepassword-dboptioncontrolsthelocationofthepassword ###databasefile.Unlessyouspecifyapathstartingwitha/,###thefile'slocationisrelativetothedirectorycontaining ###thisconfigurationfile. ###IfSASLisenabled(seebelow),thisfilewillNOTbeused. ###Uncommentthelinebelowtousethedefaultpasswordfile. #使用哪个文件作为账号文件 password-db=passwd ###Theauthz-dboptioncontrolsthelocationoftheauthorization ###rulesforpath-basedaccesscontrol.Unlessyouspecifyapath ###startingwitha/,thefile'slocationisrelativetothethe ###directorycontainingthisfile.Ifyoudon'tspecifyan ###authz-db,nopath-basedaccesscontrolisdone. ###Uncommentthelinebelowtousethedefaultauthorizationfile. #使用哪个文件作为权限文件 authz-db=authz ###Thisoptionspecifiestheauthenticationrealmoftherepository. ###Iftworepositorieshavethesameauthenticationrealm,theyshould ###havethesamepassworddatabase,andviceversa.Thedefaultrealm ###isrepository'suuid. #认证空间名,版本库所在目录 realm=/var/svn/svnrepos ###Theforce-username-caSEOptioncausessvnservetocase-normalize ###usernamesbeforecomparingthemagainsttheauthorizationrulesinthe ###authz-dbfileconfiguredabove.Validvaluesare"upper"(toupper- ###casetheusernames),"lower"(tolowercasetheusernames),and ###"none"(tocompareusernamesas-iswithoutcaseconversion,which ###isthedefaultbehavior). #force-username-case=none [sasl] ###ThisoptionspecifieswhetheryouwanttousetheCyrusSASL ###libraryforauthentication.Defaultisfalse. ###ThissectionwillbeignoredifsvnserveisnotbuiltwithCyrus ###SASLsupport;tocheck,run'svnserve--version'andlookforaline ###reading'CyrusSASLauthenticationisavailable.' #use-sasl=true ###TheSEOptionsspecifythedesiredstrengthofthesecuritylayer ###thatyouwantSASLtoprovide.0meansnoencryption,1means ###integrity-checkingonly,valueslargerthan1arecorrelated ###totheeffectivekeylengthforencryption(e.g.128means128-bit ###encryption).Thevaluesbelowarethedefaults. #min-encryption=0 #max-encryption=256 #启动svn [root@localhostconf]#svnserve-d-r/var/svn/svnrepos/ [root@localhostconf]#ps-ef|grepsvn root91141016:06?00:00:00svnserve-d-r/var/svn/svnrepos/ root91168214016:06pts/000:00:00grep--color=autosvn [root@localhostconf]#netstat-ntlp ActiveInternetconnections(onlyservers) ProtoRecv-QSend-QLocalAddressForeignAddressStatePID/Programname tcp000.0.0.0:36900.0.0.0:*LISTEN9114/svnserve tcp000.0.0.0:220.0.0.0:*LISTEN1049/sshd tcp00127.0.0.1:250.0.0.0:*LISTEN1282/master tcp600:::3306:::*LISTEN26795/MysqLd tcp600:::8080:::*LISTEN4538/java tcp600:::22:::*LISTEN1049/sshd tcp600::1:25:::*LISTEN1282/master [root@localhostconf]#cd.. [root@localhostsvnrepos]#ls confdbformathookslocksREADME.txt [root@localhostsvnrepos]#tree . ├──conf │├──authz │├──passwd │└──svnserve.conf ├──db │├──current │├──format │├──fsfs.conf │├──fs-type │├──min-unpacked-rev │├──revprops ││└──0 ││└──0 │├──revs ││└──0 ││└──0 │├──transactions │├──txn-current │├──txn-current-lock │├──txn-protorevs │├──uuid │└──write-lock ├──format ├──hooks │├──post-commit.tmpl │├──post-lock.tmpl │├──post-revprop-change.tmpl │├──post-unlock.tmpl │├──pre-commit.tmpl │├──pre-lock.tmpl │├──pre-revprop-change.tmpl │├──pre-unlock.tmpl │└──start-commit.tmpl ├──locks │├──db.lock │└──db-logs.lock └──README.txt 10directories,27files #停止SVN命令 killallsvnserve
#svn开机启动 cat/lib/systemd/system/svnserve.service [Unit] Description=Subversionprotocoldaemon After=syslog.targetnetwork.target [Service] Type=forking EnvironmentFile=/etc/sysconfig/svnserve ExecStart=/usr/bin/svnserve--daemon--pid-file=/run/svnserve/svnserve.pid$OPTIONS [Install] WantedBy=multi-user.target
#找到svn的service环境配置文件/etc/sysconfig/svnserve编辑配置文件 #将OPTIONS="-r/var/svn"改为svn版本库存放的目录 cat/etc/sysconfig/svnserve #OPTIONSisusedtopasscommand-lineargumentstosvnserve. # #Specifytherepositorylocationin-rparameter: OPTIONS="-r/var/svn/svnrepos" #设置开机启动 systemctlenablesvnserve.service systemctlstartsvnserve.service systemctlrestartsvnserve.service #ps-aux|grep'svn'
--------------------------------------------------------
客户端连接
windowstortoisesvn 下载
https://tortoisesvn.net/downloads.html
参考:https://yq.aliyun.com/articles/83737
原文链接:https://www.f2er.com/centos/377519.html