web1 搭服务
svn(Subversion)版本控制系统 (核心版本库)
作用:允许你数据恢复到早期版本,检查数据被修改历史,允许和别人协作文档,共享仓库(任何人共享上传下载,可以放rpm包)系统,拷贝修改合并。
1,装包subversion软件
[root@web1 ~]# yum -y install subversion
[root@web1 ~]# rpm -q subversion
2,创建版本库
mkdir /var/svn
svadmin create /var/svn/project 【创建版本库】(它会在东西载project下面)
[root@web1 ~]# ls /var/svn/project/
里面有conf/ db/ format hooks/ locks/ README.txt
用du -sh project 可以看project目录文件大小
3,导入东西到上面那个空仓库 ,cd到目标导入(随便导,做测试)
cd /usr/lib/systend/system(启动配服务的配置文件)
svn import 空格.空格 file:///var/svn/project/ -m "xxx" (导入是本机的上导入的。所以位置是本机上的)(-m后面写的是改写原因)
导入project成功后可以通过du -sh看大小来判断是否有导入
以上仓库以准备好,准备改写配置文件 后启动服务
4,改版本库配置文件cd进入配置文件下可以看到三个配置文件,依次从右到左修改
[]cd /var/svn/project/conf/
authz passwd svnserver.conf
4.1,vim /var/svn/project/conf/svnserve.conf
:19 (行,去掉注释#和前面空格,改写第一个anon-access = none)
anon-access = none
//19行,匿名无任何权限
auth-access = write
//20行,有效账户可写
//27行,密码文件(激活)
34行去掉注释#
4.2,vim /var/svn/project/conf/passwd (团队用户数量)
[users] users下添加用户和密码,按照模版
harry = pass 不能有空格
//用户名和密码
tom = pass
//用户名和密码
4.3,vim /var/svn/project/conf/authz 改用户读写权限 (某个页面只有某某能看)
如: [/test] [ ]方括号代表目录
zhangsan = rw 表示zhangsan能对这个test目录能读能写
*************************************
[/] //定义ACL访问控制 规则
harry = rw //用户对项目根路径可读可写
tom = rw
* = r //其他人只读
5,以上配置文件该完,准备启动服务
svnserver -d -r /var/svn/project -d放后台 -r指定路径 (之前建的仓库是啥路径就写啥)
ss -nutulp | grep project 看看启动没有, 可以杀它进程关闭服务 killall
。。。。。。。。。。客户端测试.web2。。。。。。。
首先装包 yum -y install subversion
1)将服务器上的代码下载到本地 ,进入tmp下(什么目录都可以,建议资料少点的) 建立一个本地副本
[root@web2 ~]# cd /tmp
[root@web2 ~]# svn --username harry --password pass checkout svn://192.168.2.100/ code
checkout剪出下载 可以缩写co 需要用户名和密码才能执行这条命令,因为配置文件该过读写回车后会自动剪刀出数据下来,/tmp下会出现一个code(刚刚命令创建的)
***修改数据后想上传会版本库里 (修改的是你剪出的数据其中一项的等)
首先要进入你建立的库[root@web2 ~]# cd /tmp/code
[root@web2 code]# ls 查看有那些就剪下来的文件
[root@web2 code]# vim user.slice //挑选任意文件修改其内容
[root@web2 code]# svn ci -m "modify user" //(co剪出下载,ci上传 ) 将本地修改的数据同步到服务器
****如果误删除可以还原
svn update /将服务器上新的数据同步到本地
*****[root@web2 code]# svn info svn://192.168.2.100 //查看版本仓库基本信息
*****[root@web2 code]# svn log svn://192.168.2.100 //查看版本仓库的日志
****在code下建立新文件需要将文件加入版本控制才能 提交成功
[root@web2 code]# echo "test" > test.sh //本地新建一个文件
[root@web2 code]# svn ci -m "new file" //提交失败,该文件不被svn管理
[root@web2 code]# svn add test.sh //将文件或目录加入版本控制
[root@web2 code]# svn ci -m "new file" //再次提交,成功
*****创建东西 不支持命令行的格式,要在前面加 svn,删除也是一样的道理,要加 svn 比如
[root@web2 code]# svn mkdir subdir //创建子目录
[root@web2 code]# svn rm timers.target //使用svn删除文件
[root@web2 code]# svn ci -m "xxx" //提交一次代码
*****查看那些文件被人修改过测试root@web2 code]# vim umount.target //任意修改本地的一个文件
[root@web2 code]# svn diff //查看所有文件的差异 (可以开两个窗口对比)
[root@web2 code]# svn diff umount.target //仅查看某一个文件的差异
[root@web2 code]# svn cat svn://192.168.2.100/reboot.target //查看服务器文件的内容
*****基本操作
[root@web2 code]# sed -i 'd' tmp.mount //删除文件所有内容,但未提交
[root@web2 code]# svn revert tmp.mount //还原tmp.mount文件
[root@web2 code]# rm -rf *.target //任意删除若干文件
[root@web2 code]# svn update //还原
[root@web2 code]# sed -i '1a #test###' tuned.service//修改本地副本中的代码文件
[root@web2 code]# svn ci -m "xxx"//提交代码
[root@web2 code]# svn merge -r7:2 tuned.service //将文件从版本7还原到版本2
2案例2:使用Subversion协同工作
2) harry和tom修改不同的文件,两个人都需要 svn update,升级最新版本。列如:
[root@web1 mycode]# sed -i "3a ###harry modify#####" tmp.mount
[root@web2 mycode]# sed -i "3a ###tom modify#####" umount.target
[root@web2 mycode]# svn update
[root@web1 mycode]# svn update
3)harry和tom修改相同文件的不同行
如果A先上传到版本库,那么B 要先基与A的版本上进行修改,不然就算修改后也是无法提交的!!
所以B 需要先更新升级(svn update)(A的版本和你的版本合并,并不会覆盖)才能进行更
4) harry和tom修改相同文件的相同行
[root@web1 mycode]# sed -i '1c [UNIT]' tuned.service
[root@web2 mycode]# sed -i '1c [unit]' tuned.service
[root@web2 mycode]# svn update 输入命令后会出现冲突,需要解决(因为ie版本库已经无法判断合并了)
Conflict discovered in 'tuned.service'.
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options:p //选择先标记p,随后解决
那只能手动去大家都要改的文件里查看操作了
[root@web2 mycode]# ls
tuned.service tuned.service.mine tuned.service.r10 tuned.service.r9 可以看到改过版本有那些了
那怎么解决呢? 把多余的全删掉(除了差异版本和自己改写的版本)。留下来的就是最终版本!!!
[root@web2 mycode]# rm -rf tuned.service.r10 tuned.service.r9
把自己的版本移动到差异版本(传达一个我是对的信息)root@web2 mycode]# mv tuned.service.mine tuned.service
最后就可以提交了,就是属于你的版本了# svn ci -m "modified" //解决冲突
使用dump指令备份版本库数据(万一服务器挂掉了。。。所以每一段时间备份一下)
[root@web1 ~]# svnadmin dump /var/svn/project > project.bak //备份
命令+dump 后面是仓库位置 > 自己创建的备份文件(回车即开始备份)
从备份里还原
大于号变小于号,用load
svnadmin load /var/svn/project2 < project.bak
命令+load 后面是仓库位置 <自己创建的备份文件