1.什么是SVN
版本控制,可以记录每一次文件和目录的修改情况,这样就可以借此将数据恢复到以前的版本,并且可以查看数据的更改细节。
svn是Subversion简称,自由开原的版本控制系统,在svn管理下文件和目录可以超越时空。apache软件基金会的开原项目。
svn,每次提交都会生成一个版本号。
多级管理系统:超级管理员,目录管理员,普通用户。
一致的数据操作:用一个二进制差异算法描述文件的变化。记录了差异信息。
简单容易操作:对中文支持号,操作简单,使用没有难度。—说是图形化界面。
2.搭建svn服务器
服务端:subversion和visualSVN Server(svn+apache,傻瓜式的安装)
客户端:tortoisesvn
学习思路:
checkout出仓库代码,就要 添加文件 , 修改文件(还涉及创建分支,合并分支,冲突(多人操作或合并时候),版本回滚) ,删除文件
步骤一:安装Subversion服务器(web1)
1)YUM安装subversion软件
yum -y install subversion
2)创建版本库
mkdir /var/svn/
svnadmin create /var/svn/project
3)本地导入初始化数据
cd /usr/lib/systemd/system/
svn import . file:///var/svn/project/ -m “Init Data”
4)修改配置文件,创建账户与密码
所有配置文件,要求顶头写,开头不要有空格。
vim /var/svn/project/conf/svnserve.conf
[general]
……
anon-access = none
//19行,匿名无任何权限
auth-access = write
//20行,有效账户可写
password-db = passwd
//27行,密码文件
authz-db = authz
//34行,ACL访问控制列表文件
vim /var/svn/project/conf/passwd
… …
[users]
harry = 123456
//用户名和密码
tom = 123456
//用户名和密码
vim /var/svn/project/conf/authz
[/] //定义ACL访问控制
harry = rw //用户对项目根路径可读可写
tom = rw
5)启动服务
svnserve -d -r /var/svn/project
netstat -nutlp |grep svnserve
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 4043/svnserve
步骤二:客户端使用(web2)
cd /tmp
svn –username harry –password 123456 co svn://192.168.2.100/ code
//建立本地副本,从服务器192.168.2.100上co下载代码到本地code目录
//用户名harry,密码123456
Store password unencrypted (yes/no)? yes //提示是否保存密码
添加文件
echo “test” > test.sh //本地新建一个文件
svn mkdir subdir //创建子目录—————————-
svn add test.sh //将文件或目录加入版本控制
svn ci -m “new file” //再次提交,成功
修改文件
cd /tmp/code
ls
vim user.slice //挑选任意文件修改其内容
svn ci -m “modify user” //将本地修改的数据同步到服务器
svn update //将服务器上新的数据同步到本地
svn info svn://192.168.2.100 //查看版本仓库基本信息
svn log svn://192.168.2.100 //查看版本仓库的日志
删除文件
svn rm timers.target //使用svn删除文件
svn ci -m “xxx” //提交一次代码
查看文件差异
vim umount.target //任意修改本地的一个文件
svn diff umount.target //仅查看某一个文件的差异
svn diff //查看所有文件的差异
svn cat svn://192.168.2.100/reboot.target //查看服务器文件的内容
版本回滚
sed -i ‘d’ tmp.mount //删除文件所有内容,但未提交
svn revert tmp.mount //还原tmp.mount文件
rm -rf *.target //任意删除若干文件
svn update //还原
sed -i ‘1a #test###’ tuned.service //修改本地副本中的代码文件
svn ci -m “xxx” //提交代码
svn merge -r7:2 tuned.service //将文件从版本7还原到版本2
冲突(多人协同工作):
harry和tom修改相同文件的不同行 //提示失败后,先更新update再提交即可
harry和tom修改相同文件的相同行 //出现冲突,需要解决—–>>选择先标记p,随后解决
3)harry和tom修改相同文件的不同行
  1. [root@srv5 ~]# cd harry
  2. [root@web1 mycode]# sed -i “3a ###tom modify#####” user.slice
  3. [root@web1 mycode]# svn ci -m “modified”
  4. [root@web2 mycode]# sed -i “6a ###harry modify#####” user.slice
  5. [root@web2 mycode]# svn ci -m “modified”        //提交失败
  6. Sending svnserve
  7. Transmitting file data .svn: Commit failed (details follow):
  8. svn: File ‘/user.slice’ is out of date(过期)
  9. [root@web2 mycode]# svn update                    //提示失败后,先更新再提交即可
  10. [root@web2 mycode]# svn ci -m “modified”        //提交成功
  11. Sending user.slice
  12. Transmitting file data .
4) harry和tom修改相同文件的相同行
  1. [root@web1 mycode]# sed -i ‘1c [UNIT]’ tuned.service
  2. [root@web1 mycode]# svn ci -m “modified”
  3. [root@web2 mycode]# sed -i ‘1c [unit]’ tuned.service
  4. [root@web2 mycode]# svn ci -m “modified”
  5. Sending tuned.service
  6. Transmitting file data .svn: Commit failed (details follow):
  7. svn: File ‘/tuned.service’ is out of date(过期)
  8. [root@web2 mycode]# svn update                    //出现冲突,需要解决
  9. Conflict(冲突) discovered in ‘tuned.service’.
  10. Select: (p) postpone, (df) diff-full, (e) edit,
  11. (mc) mine-conflict,(tc) theirs-conflict,
  12. (s) show all options:p                    //选择先标记p,随后解决
  13. [root@web2 mycode]# ls
  14. tuned.service tuned.service.mine        tuned.service.r10    tuned.service.r9
  15. [root@web2 mycode]# mv tuned.service.mine tuned.service
  16. [root@web2 mycode]# rm -rf tuned.service.r10 tuned.service.r9
  17. [root@web2 mycode]# svn ci -m “modified”    //解决冲突
步骤三:使用dump指令备份版本库数据
svnadmin dump /var/svn/project > project.bak //备份
svnadmin create /var/svn/project2 //新建空仓库
svnadmin load /var/svn/project2 < project.bak //还原

发表评论

邮箱地址不会被公开。 必填项已用*标注