标签:美的 有一个 static 显示 mod 手册 pos vim rpm
- Svn(subversion)是近年来崛起的非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个跨平台的开源的版本控制系统。Svn版本管理工具管理着随时间改变的各种数据。这些数据放置在一个中央资料档案库(repository)中,这个档案库很像一个普通的文件服务器或者FTP服务器,但是,与其他服务器不同的是,SVN会备份并记录每个文件每一次的修改更新变动。这样我们就可以把任意一个时间点的档案恢复到想要的某一个旧的版本,当然也可以直接浏览指定文件的更新历史记录。
- 为什么会有svn这样一个项目?
- 官方解释:为了接管CVS的用户基础,确切的说,我们写了一个新的版本控制系统,它和CVS很相似,但是它修正了以前CVS所没有解决的许多问题。问题见SVN官方首页。
- SVN是一个非常通用的软件系统,它常被用来管理程序源码,但是它也可以管理任何类型的文件,如文本,视频,图片等等。
SVN相关站点:
Subversion官网:
http://subversion.tigris.org/
http://subversion.apache.org/
svn客户端:http://toroisesvn.net/
svn中文网站:http://www.iusesvn.com/
中文常见问题解答FAQ:http://subversion.apache.org/faq.zh.html
官方手册:http://svnbook.red-bean.com/ 中英都有
svn版本控制系统是集中式的数据管理,存在一个中央版本库,所有开发人员本地开发所使用的代码都是来自于这个版本库,提交代码也都必须提交到这个中央版本库。
svn版本控制系统工作流程如下:
在中央库上创建或从主干复制一个分支
从中央库check out 下这个分支的代码
增加自己的代码文件,修改现存的代码或删除代码文件
commit(提交)代码,假设有人在刚刚的分支上提交了代码,你就会被提示代码过期,你得先up你的代码后再提交。up代码的时候如果出现冲突,需要解决好冲突后再进行提交。
缺点
当无法连接到中央版本库的环境下,你无法提交代码,将代码加入版本控制;
你无法查看代码的历史版本以及版本的变化过程。提交到版本控制系统中的代码我们都默认通过自测可运行的,如果某个模块的代码比较复杂,不能短时间内实现为可测试的功能,那么你需要等很长的时间才能提交自己的代码,由于代码库集中管理,因此,需要对中央版本库的存储做备份。这点分布式的版本控制系统要好一些。Svn的备份要备份所有代码数据以及所有更改的版本记录。
- 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库。
svn仍是当前企业的主流。git正在发展,也许未来也会成为主流,但现在还不是。如果有精力,能同时掌握更好。
安装,部署,维护,排障。
简单使用,很多公司都是由开发来管理,包括建立新仓库和添加删除账号
对于版本控制系统,运维人员相当于开发商,开发人员是业主,运维搭建的系统为开发人员服务的。
svn服务常见的运行访问方式有3种:
(1)独立服务器访问
访问地址如:svn://svn.yunjisuan.org/sadoc;
(2)借助apache等http服务
访问地址如:http://svn.yunjisuan.com/sadoc;
a,单独安装apache+svn(不要用)
b,CSVN(apache+svn)是一个单独的整合的软件,带web界面管理的SVN软件
(3)本地直接访问(例如:file://application/svndata/sadoc)

在这里,主要介绍第一种方式以及第二种方式中的CSVN web管理方式
SVN客户端可以通过多种方式访问服务器端,例如:本地磁盘访问,或各种各样不同的网络协议访问,但一个版本库地址永远都是一个URL,URL反映了访问方法。

svn存储版本数据有2种方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。
BDB:
伯克利DB(Berkeley DB),版本库可以使用的一种经过充分测试的后台数据库实现,不能在通过网络共享的文件系统上使用,伯克利DB是Subversion 1.2版本以前的缺省版本库格式
FSFS:
一个专用于Subversion版本库的文件系统后端,可以使用网络文件系统(例如 NFS 或 SMBFS)。是1.2版本及其后的缺省版本库格式。
Svn是一种集中式文件版本管理系统。集中式管理的工作流程如下图:

集中式代码管理的核心是SVN服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后进行开发,最后解决冲突,提交。所有的版本信息都放在SVN服务器上。因此如果脱离了服务器,开发者就无法进行提交代码工作。
下面举例说明:
开始新一天的工作:
首先从SVN服务器下载项目组最新代码。
进入自己的分支,进行开发工作,每隔一小时向服务器上自己的分支提交一次代码(很多程序员都有这个习惯。因为有时候自己对代码改来改去,最后又想还原到新一个小时的版本,或者看看前一个小时自己修改了哪些代码,就需要这样做了)。
下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。
优点:
管理方便,逻辑清晰明确,符合一般人思维习惯。
易于管理,集中式svn服务器更能保证数据安全性。
代码一致性非常高。
适合开发人数不多的项目开发。
普及度高,大部分软件配置管理的大学教材都是使用svn和vss。
cat /etc/redhat-release
uname -r
cat /etc/redhat-release

yum -y install subversion
rpm -qa subversion

mkdir -p /application/svndata --->数据存储根目录
mkdir -p /application/svnpasswd --->用户,密码权限目录

创建一个新的Subversion项目yunjisuan,其实,类似yunjisuan这样的项目可以创建多个,每个项目对应不同的代码,这里只是以创建一个项目为例演示:
svnadmin create /application/svndata/yunjisuan
tree /application/svndata/yunjisuan/ --->没有tree则需要yum安装
/application/svndata/yunjisuan/|-- README.txt|-- conf| |-- authz| |-- passwd| `-- svnserve.conf|-- db| |-- current| |-- format| |-- fs-type| |-- fsfs.conf| |-- min-unpacked-rev| |-- rep-cache.db| |-- 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-logs.lock`-- db.lock10 directories, 28 files目录详解conf --->配置文件目录authz --->用户认证db --->数据目录hooks --->钩子脚本目录locks --->代码锁目录
cd /application/svndata/yunjisuan/conf/
ls
cp svnserve.conf{,.bak}
vim svnserve.conf

cat -n /application/svndata/yunjisuan/conf/svnserve.conf.bak | sed -n ‘12p;13p;20p;27p‘
12 # anon-access = read13 # auth-access = write20 # password-db = passwd27 # authz-db = authz
cat -n /application/svndata/yunjisuan/conf/svnserve.conf | sed -n ‘12p;13p;20p;27p‘
12 anon-access = none #禁止匿名访问13 auth-access = write #验证访问可写20 password-db = /application/svnpasswd/passwd #密码文件位置27 authz-db = /application/svnpasswd/authz #验证文件位置
此配置文件里的每条配置代码必须顶格写,不能有空格。
cp /application/svndata/yunjisuan/conf/authz /application/svnpasswd/
cp /application/svndata/yunjisuan/conf/passwd /application/svnpasswd/
ll /application/svnpasswd/

svnserve --help --->svn启动命令帮助
svnserve: warning: cannot set LC_CTYPE localesvnserve: warning: environment variable LANG is ensvnserve: warning: please check that your locale name is correctusage: svnserve [-d | -i | -t | -X] [options]Valid options:-d [--daemon] : daemon mode #守护进程启动(后台)-i [--inetd] : inetd mode-t [--tunnel] : tunnel mode-X [--listen-once] : listen-once mode (useful for debugging)-r [--root] ARG : root of directory to serve #指定根目录-R [--read-only] : force read only, overriding repository config file--config-file ARG : read configuration from file ARG--listen-port ARG : listen port #监听端口默认3690[mode: daemon, listen-once]--listen-host ARG : listen hostname or IP address #监听IP[mode: daemon, listen-once]-T [--threads] : use threads instead of fork [mode: daemon]--foreground : run in foreground (useful for debugging)[mode: daemon]--log-file ARG : svnserve log file--pid-file ARG : write server process ID to file ARG[mode: daemon, listen-once]--tunnel-user ARG : tunnel username (default is current uids name)[mode: tunnel]-h [--help] : display this help--version : show program version information
svnserve -d -r /application/svndata/
netstat -antup | grep 3690

source /etc/sysconfig/i18n --->启用中文字符集
cat /etc/sysconfig/i18n
svnserve -d -r /application/svndata/ --->有中文字符集启动没有警告了

vim /application/svnpasswd/passwd
在/application/svnpasswd/passwd文件末尾追加内容
tail -4 /application/svnpasswd/passwd
yunjisuan = 123123 #设置账号密码benet = 123123 #设置账号密码stu001 = 123 #设置账号密码stu002 = 456 #设置账号密码
注意
1,权限配置文件中出现的用户名必须已在用户配置文件中定义
2,对权限配置文件的修改立即生效,不必重启svn
【groups】=,其中,1个用户组可以包含1个或多个用过户,用户间以逗号分隔。例如:harry\_and\_sally = harry,sally #==>用户组 = 用户1,用户2[<版本库>:/项目/目录] #例如:[repository:/baz/fuz]@<用户组名> = <权限> #例如:@harry\_and\_sally = rw<用户名> = <权限> #例如:harry = rw其中,方框号内部分可以有多种写法:[/],表示根目录及以下,根目录是svnserve启动时指定的,我们指定为/application/svndata,[/]就是表示对全部版本库设置权限。[repos:/],表示对版本库repos设置权限。[repos:/yunjisuan],表示对版本库repos中的yunjisuan项目设置权限。[repos:/yunjisuan/benet],表示对版本库repos中的yunjisuan项目的benet目录设置权限。权限主体可以是用户组,用户或*,用户组在前面加@,*表示全部用户。
权限可以是w,r,wr和空,空表示没有任何权限。
authz中每个参数都要顶格写,开头不能有空格。
对于组,要以@开头,用户不需要@开头。
vim /application/svnpasswd/authz
egrep -v "#|^$" /application/svnpasswd/authz
[aliases][groups]sagroup = stu001,stu002 #新增本行,定义组名[yunjisuan:/] #定义授权的范围yunjisuan = rw #用户单独授权benet = r #用户单独授权@sagroup = r #组用户授权
ps -ef | grep svn | grep -v grep
kill 1062
ps -ef | grep svn | grep -v grep
svnserve -d -r /application/svndata/

推荐:TortoiseSVN-1.9.7.27907-x64-svn-1.9.7
注意:32位系统要用32位软件版本下载链接
链接:https://pan.baidu.com/s/1dKq_JVJN3tFxY_AvMKKTcA
提取码:kn9z
一路yes即可

svn://47.105.37.183/yunjisuan
选择右键菜单里的SVN Checkout,出现下图:

如果连接不通,请检查Linux虚拟机的iptables是否关闭
点击OK后,出现下图:

再次点击OK以后,结束。此时目录里多了一个隐藏的目录,表示此目录已经和svn服务器连通

(1)SVN Checkout:相当于下载,第一次连接svn服务器的时候需要和服务器的对应存储目录进行数据同步,如果服务器的对应目录里有数据文件,那么就会下载到你的本地对应目录里。
(2)SVN Update:更新数据,检查服务器端svn存储目录里是否和本地svn存储目录数据不一致,如果不一致,那么下载改变或新增的部分到本地svn目录里。(不会删除本地目录内容)
(3)SVN Commit:提交数据到svn服务器端存储目录。本地svn存储目录会和服务器端存储目录进行比对校验。会把本地改变的部分和新增的部分同步上传至服务器端。
a.txt(随便新建一个即可)




右键点击本地svn存储目录data,选择TortoiseSVN ===>Repo-browser后出现下图

双击文件可以直接远程打开文件,可以看到里面刚刚被修改后的内容已经更新至服务器端。
会发现,刚刚删除的文件又重新下载回来了。



svn --help
usage: svn <subcommand> [options] [args]Subversion command-line client, version 1.6.11.Type ‘svn help <subcommand>‘ for help on a specific subcommand.Type ‘svn --version‘ to see the program version and RA modulesor ‘svn --version --quiet‘ to see just the version number.Most subcommands take file and/or directory arguments, recursingon the directories. If no arguments are supplied to such acommand, it recurses on the current directory (inclusive) by default.Available subcommands:addblame (praise, annotate, ann)catchangelist (cl)checkout (co) #下载数据cleanupcommit (ci) #提交数据copy (cp)delete (del, remove, rm)diff (di)exporthelp (?, h)importinfolist (ls) #显示服务器端内容locklogmergemergeinfomkdirmove (mv, rename, ren)propdel (pdel, pd)propedit (pedit, pe)propget (pget, pg)proplist (plist, pl)propset (pset, ps)resolveresolvedrevertstatus (stat, st)switch (sw)unlockupdate (up) #更新数据Subversion is a tool for version control.For additional information, see http://subversion.tigris.org/

将文件checkout到本地目录
svn checkout(co) remotepath localpathmkdir yunjisuan
cd yunjisuan/
pwd

svn co svn://192.168.200.69/yunjisuan/ /root/yunjisuan/ --username=benet --password=123123
ll

svn list file:///application/svndata/yunjisuan

pwd
mkdir [a..e]
ll
svn add * --->提交前需要先把要提交的内容做标记A(相当于windows上勾对号)
svn ci -m "message" --->提交时需要同时-m指定一段话作为备注
svn: Commit failed (details follow):svn: Authorization failed #提交失败,账户没有写权限,认证失败
svn co svn://192.168.200.69/yunjisuan/ /root/yunjisuan/ --username=yunjisuan --password=123123
换拥有写入权限的账户checkoutStore password unencrypted (yes/no)? yes --->是否作为目录的新账户和密码
ll

svn add *
svn: warning: W150002: ‘/root/yunjisuan/a‘ is already under version control
svn: warning: W150002: ‘/root/yunjisuan/aaa.txt‘ is already under version control
svn: warning: W150002: ‘/root/yunjisuan/b‘ is already under version control
svn: warning: W150002: ‘/root/yunjisuan/c‘ is already under version control
svn: warning: W150002: ‘/root/yunjisuan/d‘ is already under version control
svn: warning: W150002: ‘/root/yunjisuan/e‘ is already under version control
svn ci -m "message" --->重新提交

svn list file:///application/svndata/yunjisuan/

标签:美的 有一个 static 显示 mod 手册 pos vim rpm
原文地址:https://www.cnblogs.com/666boke/p/10015193.html