版本库
典型的客户/服务器系统
~版本库是版本控制的核心
~任意数量客户端
~客户端通过写数据库分享代码
Subsersion特点
~记录每一次改变
YUM安装subversion软件
yum -y install subversion
mkdir /var/svn/
svnadmin create /var/svn/project //创建版本库
cd /usr/lib/systemd/system
svn import . file:///var/svn/project/ -m "xxx" //导入数据 import导入代码
修改配置文件
ls /var/svn/project/conf/
authz passwd svnserve.conf //三个配置文件从右到左改
vim /var/svn/project/conf/svnserve.conf
- ............
- anon-access = none
- //匿名无任何权限
- auth-access = write
- //有效账户可写
- ...............
- password-db = passwd
- //密码文件
- ................
- authz-db = auth
- //ACL访问控制列表文件
- ................
vim /var/svn/project/conf/passwd
- … …
- [users]
- harry = pass
- //用户名和密码
- tom = pass
- //用户名和密码
- .........
vim /var/svn/project/conf/authz
.............
- [/] //定义ACL访问控制 这里的/为控制库仓库的根目录:/var/svn/project/ 如果需要设置根目录下面的某个目录文件可以在/后面指定
- harry = rw //用户对项目根路径可读可写
- tom = rw
- * = r //其他人只读
- ............
svnserve -d -r /var/svn/project1 //-d 是指定放入后台根&是一样的效果 -r 后续是仓库的根目录 仅把指定仓库共享出去
serverve -d //共享所有仓库
netstat -antupl | grep svnserve
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 2574/svnserve //svnserve服务占用3690端口
客户端测试
cd /tmp //cd 到一个干净点的目录
- svn --username harry --password pass \
- co svn://192.168.2.100/ code
- //建立本地副本,从服务器192.168.2.100上co下载代码到本地code目录 会自动创建code目录
- //用户名harry,密码pass 确认操作回车会提示是否保存密码,输入yes下次就不需要输入用户根密码
svn ci -m "modify" //co是从服务器下载 ci是上传到服务器
正在发送 wpa_supplicant.service //只上传修改的文件
正在发送 zram.service
传输文件数据..
提交后的版本为 2。
svn update //同步服务器上的数据 版本不变
svn info svn://192.168.2.100 //查看版本仓库基本信息
svn log svn://192.168.2.100 //查看版本仓库的日志
- echo "test" > test.sh //本地新建一个文件
- svn ci -m "new file" //提交失败,该文件不被svn管理
- svn add test.sh //将文件或目录加入版本控制
- svn ci -m "new file" //再次提交,成功
- svn rm test.sh // rm -rf test.sh是无效的 使用svn删除文件
- svn ci -m "xxx" //提交一次代码
svn diff //查看所有文件的差异
- svn diff umount.target //仅查看某一个文件的差异
- svn cat svn://192.168.2.100/reboot.target //查看服务器文件的内容
- sed -i "d" user.slice
- svn revert user.slice
已恢复“user.slice” //还原 - cat user.slice |wc -l
11 - sed -i "3a xxx" user.slice //修改文件
- cat user.slice | wc -l
12 - svn ci -m "xxx"
正在发送 user.slice
传输文件数据.
提交后的版本为 7。 - svn merge -r7:1 user.slice //将文件从版本7还原到版本1
- cat user.slice | wc -l
11 - [root@web2 tmp]# svn -r1 co svn://192.168.2.100/ qq //加-r 跟版本号 指定下载某个版本的数据
- .............取出版本 1。
harry和tom修改不同的文件
- [root@web1 mycode]# sed -i "3a ###harry modify#####" tmp.mount
- [root@web1 mycode]# svn ci -m "has modified"
- [root@web2 mycode]# sed -i "3a ###tom modify#####" umount.target
- [root@web2 mycode]# svn ci -m "has modified"
- [root@web2 mycode]# svn update
- [root@web1 mycode]# svn update
harry和tom修改相同文件的不同行
- [root@srv5 ~]# cd harry
- [root@web1 mycode]# sed -i "3a ###harry modify#####" user.slice
- [root@web1 mycode]# svn ci -m "modified"
- [root@web2 mycode]# sed -i "6a ###tom modify#####" user.slice
- [root@web2 mycode]# svn ci -m "modified" //提交失败
- Sending svnserve
- Transmitting file data .svn: Commit failed (details follow):
- svn: File '/user.slice' is out of date(过期)
- [root@web2 mycode]# svn update //提示失败后,先更新再提交即可 把服务器上的跟自己修改的合并,而并非覆盖
- [root@web2 mycode]# svn ci -m "modified" //提交成功
harry和tom修改相同文件的相同行 //机器没办法解决冲突,必须人工自己解决。
- root@web1 mycode]# sed -i '1c [UNIT]' tuned.service
- [root@web1 mycode]# svn ci -m "modified"
- [root@web2 mycode]# sed -i '1c [unit]' tuned.service
- [root@web2 mycode]# svn ci -m "modified"
- Sending tuned.service
- Transmitting file data .svn: Commit failed (details follow):
- svn: File '/tuned.service' is out of date(过期)
- [root@web2 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,随后解决
- [root@web2 mycode]# ls tuned*
- tuned.service tuned.service.mine tuned.service.r10 tuned.service.r9
- [root@web2 mycode]# mv tuned.service.mine tuned.service //.mine就是自己的,把自己的覆盖掉tuned.server
- [root@web2 mycode]# rm -rf tuned.service.r10 tuned.service.r9 //然后把多余的都删了,最后只保留所需要的。
- [root@web2 mycode]# svn ci -m "modified" //解决冲突
svnadmin dump /var/svn/project/ > project.bac //会把所有版本备份到指定的文件里 后续转到拷贝备份文件到其他电脑上
* 已转存版本 0。
* 已转存版本 1。
* 已转存版本 2。
* 已转存版本 3。
.........
svnadmin create /var/svn/abc //创建一个仓库
svnadmin load /var/svn/abc/ < project.bac //然后把拷贝的备份文件导入到新的仓库里
如果客户端是windows系统就安装TortoiseSVN,就有图形界面可以使用。
使用git
首先在github上创建用户及仓库
yum -y install git //然后在客户端装包
git clone https://github.com/zengjonstark/test //git clone https://github.com/用户名/仓库名
可以把仓库服务器上的数据都下载过来,然后修改
git add . //然后添加新建的为git模式
git commit -m "ci" //上传
git push //需要用户名和密码 成功把数据上传到github网站上
RPM包
把源码包做成RPM包
什么是RPM?
压缩包,把源码安装的结果打包
基本信息(是人随便写的)
安装rpm-build软件包
yum -y install rpm-build
生成rpmbuild目录结构
- rpmbuild -ba nginx.spec //会报错,没有文件或目录
- ls /root/rpmbuild //自动生成的目录结构
- BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
准备工作,将源码软件复制到SOURCES目录
cp nginx-1.12.2.tar.gz /root/rpmbuild/SOURCES/
创建并修改SPEC配置文件
vim /root/rpmbuild/SPECS/nginx.spec //新建一个文件,文件名无要求,后缀名必须是.spec,后缀是.spec自动会生成参数
Name:
Version:
Release: 1%{?dist}
Summary:
............
%files
%doc
%changelog
rpmbuild -ba nginx.spec