1.Subversion基本操作
web1
1.1 安装Subversion服务器
]# yum -y install subversion
1.1.1 创建版本库
]# mkdir /var/svn/
]# svnadmin create /var/svn/project
]# ls /var/svn/project/
conf db format hooks locks README.txt
1.1.2 本地导入初始化数据
]# cd /usr/lib/systemd/system/
...
提交后的版本为 1
1.1.3 修改配置文件,创建账户与密码
所有配置文件,要求顶头写,开头不要有空格
配置目录:
]# vim /var/svn/project/conf/svnserve.conf
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
1.1.4 启动服务
]# svnserve -d -r /var/svn/project
]# netstat -nutlp | grep svnserve
2. 客户端测试(192.168.2.200,web2)
]# yum -y install subversion
]# cd /tmp/
]# svn --username harry --password 123456 \
co svn://192.168.2.100/ code
...
取出版本 1。
//建立本地副本,从服务器192.168.2.100上co下载代码到本地code目录
//用户名harry,密码123456
]# ls
code
]# cd code/
####################################
基础操作:
]# vim user.slice //挑选任意文件修改其内容
]# svn ci -m "modify user" //将本地修改的数据同步到服务器
...
提交后的版本为 2。
]# svn update //将服务器上新的数据同步到本地
正在升级 '.':
版本 2。
]# svn info svn://192.168.2.100 //查看版本仓库基本信息
路径: .
URL: svn://192.168.2.100
版本库根: svn://192.168.2.100
版本库 UUID: f78204b0-46ec-47e1-8aa4-76d9c74f5569
版本: 2
节点种类: 目录
最后修改的作者: harry
最后修改的版本: 2
最后修改的时间: 2019-01-31 08:57:14 +0800 (四, 2019-01-31)
]# svn log svn://192.168.2.100 //查看版本仓库的日志
]# echo "test" > test.sh //本地新建一个文件
]# svn ci -m "new file" //提交失败,该文件不被svn管理(无反应)
]# svn add test.sh //将文件或目录加入版本控制
A test.sh
]# svn ci -m "new file" //再次提交,成功
正在增加 test.sh
传输文件数据.
提交后的版本为 3。
]# svn mkdir subdir //创建子目录
A subdir
]# svn rm timers.target //使用svn删除文件
D timers.target
]# svn ci -m "xxx" //提交一次代码
正在增加 subdir
正在删除 timers.target
提交后的版本为 4。
]# vim umount.target //任意修改本地的一个文件
]# svn diff //查看所有文件的差异
]# svn diff umount.target //仅查看某一个文件的差异
]# svn cat svn://192.168.2.100/reboot.target //查看服务器文件的内容
]# sed -i 'd' tmp.mount(无反应)
//删除文件所有内容,但未提交
]# svn revert tmp.mount //还原tmp.mount文件
已恢复“tmp.mount”
]# rm -rf *.target //任意删除若干文件,无反应
]# svn update //还原
...
已还原“umount.target”
版本 4。
]# sed -i '1a #test###' tuned.service //修改本地副本中的代码文件
]# svn ci -m "xxx" //提交代码
传输文件数据.
提交后的版本为 5。
]# svn merge -r5:2 tuned.service //将文件从版本7还原到版本2
]# svn ci -m "xxx" 提交数据
正在发送 tuned.service
传输文件数据.
提交后的版本为 6。
#########################
使用svn命令测试svnserver服务时可以使用的命令列表:
add 添加文件
commit(ci) 提交更新
checkout(co) 检出代码
cat 查看内容
del 删除文件
diff 文件对比
import 导入代码
info 查看版本信息
list 查看文件列表
log 查看版本历史
update 更新
mkdir 创建目录
3.使用Subversion协同工作
该版本库支持多个账户同时协作编辑文件
测试演示多人协作编辑的具体操作
手动解决版本冲突问题
备份版本库数据
注册使用Github
使用svn客户端工具连接subversion服务器并测试多人协同工作以及如何手动解决冲突问题,账户名称分别为harry和tom,最后使用svnadmin dump指令对版本库进行备份工作。
3.1 远程连接两个终端,每个人下载代码本地副本,web1,web2
web1:
]# cd /tmp
]# svn --username tom --password 123456 \
> co svn://192.168.2.100/ code
...
取出版本 6。
]# cd code(web1 web2都在code目录下)
3.2 harry和tom修改不同的文件
web1 code]# sed -i "3a ###tom modify#####" tmp.mount
web1 code]# svn ci -m "has modified"
正在发送 tmp.mount
传输文件数据.
提交后的版本为 7。
web2 code]# sed -i "3a ###harry modify#####" umount.target
web2 code]# svn ci -m "has modified"
正在发送 umount.target
传输文件数据.
提交后的版本为 8。
web2 code]# svn update
正在升级 '.':
U tmp.mount
更新到版本 8。
web1 code]# svn update
正在升级 '.':
U umount.target
更新到版本 8。
3.3 harry和tom修改相同文件的不同行
web1 code]# sed -i "3a ###tom modify#####" user.slice
web1 code]# svn ci -m "modified"
正在发送 user.slice
传输文件数据.
提交后的版本为 9。
web2 code]# sed -i "6a ###harry modify#####" user.slice
web2 code]# svn ci -m "modified" //提交失败
正在发送 user.slice
传输文件数据.svn: E160028: 提交失败(细节如下):
svn: E160028: 文件 “/user.slice” 已经过时
web2 code]# svn update //提示失败后,先更新再提交即可
正在升级 '.':
G user.slice
更新到版本 9。
web2 code]# svn ci -m "modified" //提交成功
正在发送 user.slice
传输文件数据.
提交后的版本为 10。
3.4 harry和tom修改相同文件的相同行
web1 code]# sed -i '1c [UNIT]' tuned.service
web1 code]# svn ci -m "modified"
正在发送 tuned.service
传输文件数据.
提交后的版本为 11。
web2 code]# sed -i '1c [unit]' tuned.service
web2 code]# svn ci -m "modified"
正在发送 tuned.service
传输文件数据.svn: E160028: 提交失败(细节如下):
svn: E160028: 文件 “/tuned.service” 已经过时
web2 code]# 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,随后解决
更新到版本 11。
冲突概要:
正文冲突:1
手动解决冲突:
web2 code]# ls tun*
tuned.service tuned.service.mine tuned.service.r10 tuned.service.r11
web2 code]# mv tuned.service.mine tuned.service(手动,以我为准)
web2 code]# rm -rf tuned.service.r10 tuned.service.r11
web2 code]# ls tun*
tuned.service
web2 code]# svn ci -m "modified" //解决冲突
正在发送 tuned.service
传输文件数据.
提交后的版本为 12。
web1 code]# svn update
正在升级 '.':
U tuned.service
更新到版本 12。
3.5 使用dump指令备份版本库数据
web1 ~]# svnadmin dump /var/svn/project > project.bak //备份
web1 ~]# ls
... project.bak ...
web1 ~]# svnadmin create /var/svn/project2 //新建空仓库
web1 ~]# svnadmin load /var/svn/project2 < project.bak //还原
...
------- 提交后版本 12 >>>
3.6 下载GitHub仓库中的代码(真机)
]# yum -y install git
4.制作nginx的RPM包(web1)
要求:
软件名称为nginx
软件版本为1.12.2
RPM软件包可以查询描述信息
RPM软件包可以安装及卸载
4.1 安装rpm-build软件
4.1.1 资源准备:
]# yum -y install rpm-build
]# rpmbuild -ba nginx.spec //会报错,没有文件或目录
]# ls /root/rpmbuild //自动生成的目录结构
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
将源码软件复制到SOURCES目录:
]# cp nginx-1.12.2.tar.gz /root/rpmbuild/SOURCES/
4.1.2 创建并修改SPEC配置文件:
]# vim /root/rpmbuild/SPECS/nginx.spec
Name:nginx
Version:1.12.2
Release: 100
Summary:Nginx is a web server software.
#Group:Applications/Internet
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.
%post
useradd nginx
%prep
%setup -q //自动解压源码包,并cd进入目录
%build
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make %{?_smp_mflags}
%install
make install DESTDIR=%{buildroot}
%files
%doc
/usr/local/nginx/* //对哪些文件与目录打包
%changelog
4.2 使用配置文件创建RPM包
4.1 安装依赖软件包
]# yum -y install gcc pcre-devel openssl-devel
4.2 rpmbuild创建RPM软件包
]# rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec
]# ls /root/rpmbuild/RPMS/x86_64/nginx-1.12.2-100.x86_64.rpm
/root/rpmbuild/RPMS/x86_64/nginx-1.12.2-100.x86_64.rpm
查看包简介
# rpm -qpi /root/rpmbuild/RPMS/x86_64/nginx-1.12.2-100.x86_64.rpm
Name : nginx
Version : 1.12.2
Release : 100
Architecture: x86_64
Install Date: (not installed)
Group : Unspecified
Size : 816381
License : GPL
Signature : (none)
Source RPM : nginx-1.12.2-100.src.rpm
Build Date : 2019年01月31日 星期四 10时38分06秒
Build Host : web1
Relocations : (not relocatable)
URL : www.test.com
Summary : Nginx is a web server software.
Description :
nginx [engine x] is an HTTP and reverse proxy server.
安装、卸载软件:
]# rpm -ivh /root/rpmbuild/RPMS/x86_64/nginx-1.12.2-100.x86_64.rpm
- 高级运维(七):Subversion基本操作、使用Subversion协同工作、制作nginx的RPM包
一.Subversion基本操作 目标: 本案例要求先快速搭建好一台Subversion服务器,并测试该版本控制软件: 1> 创建版本库 2> 导入初始化数据 3> 检出 ...
- 使用rpm-build制作nginx的rpm包
2014-11-27 11:05:49 一.RPM包的分类 RPM有五种基本的操作功能:安装.卸载.升级.查询和验证. linux软件包分为两大类: (1)二进制类包,包括rpm安装包(一般分为i ...
- 制作nginx的rpm包出现问题
在学习打包rpm,找到了个不错的参考站点 https://src.fedoraproject.org/cgit/rpms/ 过程: git clone -b el6 git://pkgs.fedor ...
- FPM制作Nginx的RPM软件包
FPM制作Nginx的rpm软件包 FPM相关参数-s:指定源类型-t:指定目标类型,即想要制作为什么包-n:指定包的名字-v:指定包的版本号-C:指定打包的相对路径-d:指定依赖于哪些包-f:第二次 ...
- nginx的RPM包制作案例
使用nginx-1.12.2版本的源码软件,生成对应的RPM包软件,具体如下: - 软件名称为nginx - 软件版本为1.12.2 - RPM软件包可以查询描述信息 - RPM软件包可以安装及卸载 ...
- 制作自己的rpm包,并为其制作patch包。
本文分为两个部分,第一部分是制作一个简单的自己的rpm包,并安装运行它.第二部分是为其制作一个patch包,并通过spec配置文件去打补丁,安装.运行打补丁后的程序. 一.安装工具 [yh@local ...
- 制作FastDFS的RPM包
首先获取fastdfs的源码,因为fastdfs还依赖一个libfastcommon的库,所以也要准备好. fastdfs的源码目录结构: libfastcommon的源码目录结构: 接下来将以Cen ...
- fpm制作rpm包
一.前言 在企业中我们有事安装软件包.部分都是源码安装,如nginx安装路径都已经固化了,但实际业务中,我们都是把软件包安装到固定目录下,不满足需要,这是其一.其二,编译安装很耗时,比如mysql,特 ...
- 一步步制作RPM包
一步步制作RPM包 来源 http://blog.51cto.com/laoguang/1103628 一.RPM制作步骤 我们在企业中有的软件基本都是编译的,我们每次安装都得编译,那怎么办呢?那就根 ...
随机推荐
- PAT甲级题分类汇编——计算
本文为PAT甲级分类汇编系列文章. 计算类,指以数学运算为主或为背景的题. 题号 标题 分数 大意 1058 A+B in Hogwarts 20 特殊进制加法 1059 Prime Factors ...
- Scratch零基础起步攻略(一)
通常,类似这样的文章开头总要阐述一大段关于编程的重要性,还有自己的专业性.权威性等等,我就都省掉了…… 简单介绍一下自己,从事计算机编程教育前前后后有近20年了,面对了不同年龄层次的学员,大部分跟着我 ...
- Python 命令行模块使用技巧
命令行参数传递 python main.py -H 192.168.1.1 -p 22,23,24 #coding:utf-8 import optparse def PortScan(host,po ...
- 利用 nodejs 解析 m3u8 格式文件,并下 ts 合并为 mp4
利用 nodejs 解析 m3u8 格式文件,并下 ts 合并为 mp4 以前看视频的时候,直接找到 video标签,查看视频地址,然后下载下来.. 后来发现,好多 video 标签打开元素审查,如下 ...
- javascript之typeof
定义和用法
- Java单例最好的设计模式:Spring 之 GlobalAdvisorAdapterRegistry
先上代码: public abstract class GlobalAdvisorAdapterRegistry { /** * Keep track of a single instance so ...
- IDEA解决 lombok 编译报错 cannot resolve method set/get 方法
首先关于lombok的介绍 https://blog.csdn.net/ThinkWon/article/details/101392808 总之,就是通过添加注解的方式,不需要为类编写getter或 ...
- JS权威指南读书笔记(二)
第四章 表达式和运算符 1 new调用构造函数的过程 a 创建一个新的空对象 b 设置空对象的_proto_指向构造函数原型prototype c 将这个新对象当做this的值 ...
- C#为什么要装箱和拆箱
来自论坛4楼的回答非常棒,地址:https://bbs.csdn.net/topics/390624164?page=1 内容如下: 道理很简单,按理说C#被设计成一种完全面向对象的语言.因此,包括数 ...
- {T4模板}C# Net MVC+SqlServer=T4模板生成实体类并操作数据(DbHelper+DBManage)
1.ConnectionString,数据库链接 Web.config <configuration> <connectionStrings> <!-- 数据库 SQL ...