版本控制 SVN基础 实战案例 、 RPM打包

案例1:Subversion基本操作
案例2:使用Subversion协同工作
案例3:制作nginx的RPM包
1 案例1:Subversion基本操作
1.1 问题

本案例要求先快速搭建好一台Subversion服务器,并测试该版本控制软件:
创建版本库
导入初始化数据
检出数据至用户本地副本
对本地副本进行增删改查等操作
1.2 方案

使用YUM安装subversion软件,使用svn客户端工具连接svnserver服务器并测试版本控制软件。
1.3 步骤

实现此案例需要按照如下步骤进行。
步骤一:安装Subversion服务器

1)YUM安装subversion软件
[[email protected] ~]# yum -y install subversion
[[email protected] ~]# rpm -q subversion
2)创建版本库
[[email protected] ~]# mkdir /var/svn/
[[email protected] ~]# svnadmin create /var/svn/project
[[email protected] ~]# ls /var/svn/project/
conf/ db/ format hooks/ locks/ README.txt
3)本地导入初始化数据
[[email protected] ~]# cd /usr/lib/systemd/system/
[[email protected] ~]# svn import . file:///var/svn/project/ -m "Init Data"
4)修改配置文件,创建账户与密码
[[email protected] ~]# vim /var/svn/project/conf/svnserve.conf
[general]

These options control access to the repository for unauthenticated

and authenticated users. Valid values are "write", "read",

and "none". The sample settings below are the defaults.

anon-access = none
//19行,匿名无任何权限
auth-access = write
//20行,有效账户可写

The password-db option controls the location of the password

database file. Unless you specify a path starting with a /,

the file‘s location is relative to the directory containing

this configuration file.

If SASL is enabled (see below), this file will NOT be used.

Uncomment the line below to use the default password file.

password-db = passwd
//27行,密码文件

The authz-db option controls the location of the authorization

rules for path-based access control. Unless you specify a path

starting with a /, the file‘s location is relative to the the

directory containing this file. If you don‘t specify an

authz-db, no path-based access control is done.

Uncomment the line below to use the default authorization file.

authz-db = authz
//34行,ACL访问控制列表文件

This option specifies the authentication realm of the repository.

If two repositories have the same authentication realm, they should

have the same password database, and vice versa. The default realm

is repository‘s uuid.

realm = My First Repository

[[email protected] ~]# vim /var/svn/project/conf/passwd
… …
[users]
harry = pass
//用户名和密码
tom = pass
//用户名和密码
[[email protected] ~]# cat /var/svn/project/conf/authz
[/] //定义ACL访问控制
harry = rw //用户对项目根路径可读可写
tom = rw

  • = r //其他人只读
    5)启动服务
    [[email protected] ~]# svnserve -d -r /var/svn/project1
    [[email protected] ~]# netstat -nutlp |grep svnserve
    tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 4043/svnserve
    步骤二:客户端测试(192.168.2.200)

1)将服务器上的代码下载到本地
[[email protected] ~]# cd /tmp
[[email protected] ~]# svn --username harry --password pass \
co svn://192.168.2.100/ code
//建立本地副本,从服务器192.168.2.100上co下载代码到本地code目录
//用户名harry,密码pass

ATTENTION! Your password for authentication realm:
<svn://127.0.0.1:3690> b72f45f0-bbe5-4a0c-ad4a-37f52704f0b1
can only be stored to disk unencrypted! You are advised to configure
your system so that Subversion can store passwords encrypted, if
possible. See the documentation for details.
You can avoid future appearances of this warning by setting the value
of the ‘store-plaintext-passwords‘ option to either ‘yes‘ or ‘no‘ in
‘/root/.subversion/servers‘.

Store password unencrypted (yes/no)? yes //提示是否保存密码
[[email protected] ~]# cd /tmp/code
[[email protected] code]# ls
[[email protected] code]# vim user.slice //挑选任意文件修改其内容
[[email protected] code]# svn ci -m "modify user" //将本地修改的数据同步到服务器
[[email protected] code]# svn update //将服务器上新的数据同步到本地
[[email protected] code]# svn info svn://192.168.2.100 //查看版本仓库基本信息
[[email protected] code]# svn log svn://192.168.2.100 //查看版本仓库的日志
[[email protected] code]# echo "test" > test.sh //本地新建一个文件
[[email protected] code]# svn ci -m "new file" //提交失败,该文件不被svn管理
[[email protected] code]# svn add test.sh //将文件或目录加入版本控制
[[email protected] code]# svn ci -m "new file" //再次提交,成功
[[email protected] code]# svn mkdir subdir //创建子目录
[[email protected] code]# svn rm timers.target //使用svn删除文件
[[email protected] code]# svn ci -m "xxx" //提交一次代码
[[email protected] code]# vim umount.target //任意修改本地的一个文件
[[email protected] code]# svn diff //查看所有文件的差异
[[email protected] code]# svn diff umount.target //仅查看某一个文件的差异
[[email protected] code]# svn cat svn://192.168.2.100/reboot.target //查看服务器文件的内容
[[email protected] code]# sed -i ‘d‘ tmp.mount
//删除文件所有内容,但未提交
[[email protected] code]# svn revert tmp.mount
//还原tmp.mount文件
[[email protected] code]# rm -rf *.target
//任意删除若干文件
[[email protected] code]# svn update
//还原
[[email protected] code]# sed -i ‘1a #test###‘ tuned.service
//修改本地副本中的代码文件
[[email protected] code]# svn ci -m "xxx"
//提交代码
[[email protected] code]# svn merge -r7:2 tuned.service
//将文件从版本7还原到版本2
使用svn命令测试svnserver服务时可以使用的命令列表如表-1所示。
表-1 svn命令列表

2 案例2:使用Subversion协同工作
2.1 问题

沿用练习一,通过svn工具,对subversion版本库进行多人协同工作测试,要求如下:
该版本库支持多个账户同时协作编辑文件
测试演示多人协作编辑的具体操作
手动解决版本冲突问题
备份版本库数据
2.2 方案

使用svn客户端工具连接subversion服务器并测试多人协同工作以及如何手动解决冲突问题,账户名称分别为harry和tom,最后使用svnadmin dump指令对版本库进行备份工作。
2.3 步骤

实现此案例需要按照如下步骤进行。
步骤一:多人协同工作

1)远程连接两个终端,每个人下载代码本地副本,注意web1(192.168.2.100)和web2(192.168.2.200)代表了两个不同的主机,看清楚操作是在哪一台计算机上执行!
[[email protected] ~]# cd /tmp
[[email protected] ~]# svn --username harry --password pass \

co svn://192.168.2.100/project mycode
[[email protected] ~]# cd /tmp
[[email protected] ~]# svn --username tom --password pass \
co svn://192.168.2.100/project mycode
[[email protected] ~]# cd mycode
[[email protected] ~]# cd mycode
2) harry和tom修改不同的文件
[[email protected] mycode]# sed -i "3a ###harry modify#####" tmp.mount
[[email protected] mycode]# svn ci -m "has modified"
[[email protected] mycode]# sed -i "3a ###tom modify#####" umount.target
[[email protected] mycode]# svn ci -m "has modified"
[[email protected] mycode]# svn update
[[email protected] mycode]# svn update
3)harry和tom修改相同文件的不同行
[[email protected] ~]# cd harry
[[email protected] mycode]# sed -i "3a ###harry modify#####" user.slice
[[email protected] mycode]# svn ci -m "modified"
[[email protected] mycode]# sed -i "6a ###tom modify#####" user.slice
[[email protected] mycode]# svn ci -m "modified" //提交失败
Sending svnserve
Transmitting file data .svn: Commit failed (details follow):
svn: File ‘/user.slice‘ is out of date(过期)
[[email protected] mycode]# svn update //提示失败后,先更新再提交即可
[[email protected] mycode]# svn ci -m "modified" //提交成功
Sending user.slice
Transmitting file data .
4) harry和tom修改相同文件的相同行
[[email protected] mycode]# sed -i ‘1c [UNIT]‘ tuned.service
[[email protected] mycode]# svn ci -m "modified"
[[email protected] mycode]# sed -i ‘1c [unit]‘ tuned.service
[[email protected] mycode]# svn ci -m "modified"
Sending tuned.service
Transmitting file data .svn: Commit failed (details follow):
svn: File ‘/tuned.service‘ is out of date(过期)
[[email protected] mycode]# svn update //出现冲突,需要解决
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,随后解决
[[email protected] mycode]# ls
tuned.service tuned.service.mine tuned.service.r10 tuned.service.r9
[[email protected] mycode]# mv tuned.service.mine tuned.service
[[email protected] mycode]# rm -rf tuned.service.r10 tuned.service.r9
[[email protected] mycode]# svn ci -m "modified" //解决冲突
步骤二:使用dump指令备份版本库数据

[[email protected] ~]# svnadmin dump /var/svn/project > project.bak //备份

  • Dumped revision 0.
  • Dumped revision 1.
  • Dumped revision 2.
  • Dumped revision 3.
  • Dumped revision 4.
  • Dumped revision 5.
  • Dumped revision 6.
  • Dumped revision 7.
  • Dumped revision 8.
  • Dumped revision 9.
  • Dumped revision 10.
  • Dumped revision 11.
    [[email protected] ~]# svnadmin load /var/svn/project2 < project.bak //还原
    3 案例3:制作nginx的RPM包
    3.1 问题

本案例使用nginx-1.12.2版本的源码软件,生产对应的RPM包软件,具体要求如下:
软件名称为nginx
软件版本为1.12.2
RPM软件包可以查询描述信息
RPM软件包可以安装及卸载
3.2 方案

安装rpm-build软件包,编写SPEC配置文件,创建新的RPM软件包。
配置文件中的描述信息如表-2:
表-2 SPEC描述信息

3.3 步骤

实现此案例需要按照如下步骤进行。
步骤一:安装rpm-build软件

1)安装rpm-build软件包
[[email protected] ~]# yum -y install rpm-build
2)生成rpmbuild目录结构
[[email protected] ~]# rpmbuild -ba nginx.spec //会报错,没有文件或目录
[[email protected] ~]# ls /root/rpmbuild //自动生成的目录结构
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
3)准备工作,将源码软件复制到SOURCES目录
[[email protected] ~]# cp nginx-1.12.2.tar.gz /root/rpmbuild/SOURCES/
4)创建并修改SPEC配置文件
[[email protected] ~]# vim /root/rpmbuild/SPECS/nginx.spec
Name:nginx
Version:1.12.0
Release: 10
Summary: Nginx is a web server software.
License:GPL
URL: www.test.com
Source0:nginx-1.12.2.tar.gz
#BuildRequires:
#Requires:
%description
nginx [engine x] is an HTTP and reverse proxy server.
%prep
%setup –q //自动解压源码包,并cd进入目录
%build
./configure
make %{?_smp_mflags}
%install
make install DESTDIR=%{buildroot}
cp /root/rpmbuild/SPECS/nginx.sh %{buildroot}/usr/local/nginx/
##注意,cp非必须操作,注意,这里是将一个脚本拷贝到安装目录,必须提前准备该文件
%files
%doc
/usr/local/nginx/* //对哪些文件与目录打包
%changelog
步骤二:使用配置文件创建RPM包

1)安装依赖软件包
[[email protected] ~]# yum -y install gcc pcre-devel zlib-devel openssl-devel
2)rpmbuild创建RPM软件包
[[email protected] ~]# rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec
[[email protected] ~]# ls /root/rpmbuild/RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm
[[email protected] ~]# rpm -qpi RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm
Name : nginx Relocations: (not relocatable)
Version : 1.12.2 Vendor: (none)
Release : 10 Build Date: Mon 02 May 2016 02:30:53 AM PDT
Install Date: (not installed) Build Host: localhost
Group : Applications/Internet Source RPM: nginx-1.8.0-1.src.rpm
Size : 721243 License: GPL
Signature : (none)
URL : www.nginx.org
Summary : Nginx is a web server software.
Description :
nginx [engine x] is an HTTP and reverse proxy server.
[[email protected] ~]# rpm -qpl nginx-1.12.2-10.x86_64.rpm
/usr
/usr/local
/usr/local/nginx
/usr/local/nginx/conf
/usr/local/nginx/conf/fastcgi.conf
/usr/local/nginx/conf/fastcgi.conf.default
/usr/local/nginx/conf/fastcgi_params
/usr/local/nginx/conf/fastcgi_params.default
/usr/local/nginx/conf/koi-utf
/usr/local/nginx/conf/koi-win
/usr/local/nginx/conf/mime.types
/usr/local/nginx/conf/mime.types.default
/usr/local/nginx/conf/nginx.conf
/usr/local/nginx/conf/nginx.conf.default
/usr/local/nginx/conf/scgi_params
/usr/local/nginx/conf/scgi_params.default
/usr/local/nginx/conf/uwsgi_params
/usr/local/nginx/conf/uwsgi_params.default
/usr/local/nginx/conf/win-utf
/usr/local/nginx/html
/usr/local/nginx/html/50x.html
/usr/local/nginx/html/index.html
/usr/local/nginx/logs
/usr/local/nginx/sbin
/usr/local/nginx/sbin/nginx
步骤三:安装、卸载软件

[[email protected] ~]# rpm -ivh RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm
[[email protected] ~]# rpm -qa |grep nginx
[[email protected] ~]# /usr/local/nginx/sbin/nginx
[[email protected] ~]# curl http://127.0.0.1/

原文地址:http://blog.51cto.com/13841846/2134342

时间: 2024-10-07 10:30:20

版本控制 SVN基础 实战案例 、 RPM打包的相关文章

subversion(版本控制),RPM打包

########################################################################################## subversion: 简介: subversion是一个自由/开源的版本控制系统 -->subversion允许你的数据恢复到早期版本 -->或者是检查数据修改的历史 架构: 客户端-命令行,图形 通信方式-本地访问,svn服务器,web服务器 仓库存储-文件系统(FSFS),数据库(Berkeley DB) 基

iOS开发——开发实战篇&amp;版本控制SVN和Git简单实战总结

版本控制SVN和Git简单实战总结 如果你对iOS开发中的版本控制还不了解那么你可以先看看这篇(大致看一遍就ok) 关于版本控制使用起来并不难,但是可能你会遇到这样问题! 学了这么多命令,感觉自己都知道,而且基本上都能敲出一二,但是就是不轻松公司实际开发中到底要怎么用,或者我该怎么下手,下面我们就来看看我们到了公司之后首先要做的,和之后经常要做的一些事情(命令太多没必要去记,常用的也就那么几个). 首先,你必须先知道,在天朝,SVN目前任是主流,但是又不的不会(这里具体原因我就不多说了)! 好了

iOS开发——开发实战篇&amp;版本控制SVN和Git使用详解

版本控制SVN和Git使用详解 公司的实际开发中,在天朝使用较多的还是SVN,因为SVN是集中式的,在天朝上班你们都懂的! -----------------svn----------------- 一:最常用基本步骤--- 下载(完整下载,第一次),将服务器的项目下载到本地开始开发 svn checkout ip —uaerbane=? —password=?     //这里需要add 简:co 更新仓库,服务器项目有变动的时候需要更新到本地,以免错误或者冲突 svn updata    

SVN服务实战。

第1章 SVN服务实战应用指南 1.1 SVN介绍 1.1.1 什么是SVN(Subversion)? Svn(subversion)是近年来崛起的非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个跨平台的开源的版本控制系统.Svn版本管理工具管理着随时间改变的各种数据.这些数据放置在一个中央资料档案库(repository)中,这个档案库很像一个普通的文件服务器或者FTP服务器,但是,与其他服务器不同的是,SVN会备份并记录每个文件每一次的修改更新变动.这样我们就可以把任意一个时间点的

svn服务实战

第1章 SVN服务实战应用指南 1.1 SVN介绍 1.1.1 什么是SVN(Subversion)? Svn(subversion)是近年来崛起的非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个跨平台的开源的版本控制系统.Svn版本管理工具管理着随时间改变的各种数据.这些数据放置在一个中央资料档案库(repository)中,这个档案库很像一个普通的文件服务器或者FTP服务器,但是,与其他服务器不同的是,SVN会备份并记录每个文件每一次的修改更新变动.这样我们就可以把任意一个时间点的

《Web渗透技术及实战案例解析》pdf

下载地址:网盘下载 内容简介 编辑 本书从Web渗透的专业角度,结合网络安全中的实际案例,图文并茂地再现Web渗透的精彩过程.本书共分7章,由浅入深地介绍和分析了目前网络流行的Web渗透攻击方法和手段,并结合作者多年的网络安全实践经验给出了相对应的安全防范措施,对一些经典案例还给出了经验总结和技巧,通过阅读本书可以快速掌握目前Web渗透的主流技术.本书最大的特色就是实用和实战性强,思维灵活.内容主要包括Web渗透必备技术.Google黑客技术.文件上传渗透技术.SQL注入.高级渗透技术.0day

CSDN学霸课表——从应用解析到基础实战,大数据入门、晋级课程推荐

[大数据]Splunk企业级运维智能&大数据分析平台新手入门视频课程 讲师:张文星 本课程系Splunk入门系列课程,实战为主,实战中穿插相关概念和理论.课程包括Splunk基础知识.安装部署.数据采集和存储.数据可视化.创建Splunk应用等.数据分析和可视化部分基于两个案例,边动手边讲解. [Hadoop]Hadoop2.X 应用解析 讲师:李锋 通过学习Hadoop2.X的教程,使学员能够掌握Hadoop2的应用原理,对Hadoop2的体系结构有清晰的认识,并能够熟练部署Hadoop2的高

Hadoop大数据视频教程_零基础实战培训(新增)

Hadoop大数据零基础高端实战培训系列配文本挖掘项目课程分类:大数据适合人群:初级课时数量:230课时+90课程更新程度:完成用到技术:部署Hadoop集群 涉及项目:京东商城.百度.阿里巴巴 咨询qq:1840215592 大数据Hadoop实战视频教程就从最基础的Java语法.数据库.Linux讲起到深入Hadoop大数据技术所必须的所有知识,设计Hadoop生态圈所有常用组件,包括但不限于:Greenplum数据库.HBase.Hive.Pig.ZooKeeper.Chukwa.Hado

MySQL的初次见面礼基础实战篇

[版权申明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/61614366 出自[zejian的博客] 本篇将以最简单的方式呈现并演绎mysql数据库的必知必会的知识点,通过本篇博文您将会对mysql从起点到终点的较为全面的认识,关于mysql的知识,将分两篇来记录,即MySQL的基础实战篇和MySQL的进阶实战篇,以下是本篇的主要知识点. 基础实战篇 环境准备 数据库与表的创建以及SQL增