版本控制svn

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 后面是仓库位置 <自己创建的备份文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值