Linux基本服务SVN版本控制服务

SVN 版本控制

  Subversion 是一个自由/开源的版本控制系统
   其作用是解决,在团队合作中,很多人共同完成一个文件,就会导致每个人负责的部分在修改中出现很多版本,而这些文件之间毫无关联,这样很难合作,这时候就用到SVN。
   在SVN出现前,工程师想了很多个办法试图解决,不过结果都不太好。

   起初,想用ftp等共享目录的办法,让所有人把文件修改好传到一个位置,可这样如果后一个人写的覆盖前一个人的,会导致前一个人的操作失效,这肯定是不可以的;
   后来,使用读写锁的办法,都是对一个文件进行操作,一个人写的时候,另一个人不能写,所有人都修改这一个文件,这样就可以实现文件的共同修改,不过问题也不小,这方法会导致,一个文件一次只能一个人改,这人改完才到下一个,这样效率很低;
   现在,用的SVN工作原理是,每个人把文本下载到本地,然后修改自己的部分,再上传到SVN中,如果SVN中最新的版本就是,你下载的版本,就会把你的上传的文件改成最新版本,如果SVN当前最新版本不是你当时下载的版本,SVN会自动合并你和你下载的版本后的所有修改记录的信息,然后将修改后的文件变成最新版本,如果中间有冲突,就要人工干预了。

   现在除了SVN,还有GIT也能做到这个,两个原理差不多。


SVN 的搭建

     1. 装包: yum install -y subversion
     创建用于存储svn信息和数据的目录:先mkdir创建预备被共享的目录的父目录,再用svnadmin create创建共享目录
        例如:预备共享/a/b/c/d/e 那就要先 mkdir -p /a/b/c/d, 再svnadmin create /a/b/c/d/e 

     2. 修改配置文件 /刚刚好创建用于存储svn信息和数据的目录/conf/的三个文件,
       先改svnserve.conf

anon-access = none        # 匿名用户的权限,none是无权限,read是读权限,write是读写权限
auth-access = write        # 有效用户的权限,即通过正确的用户密码登陆的用户的权限
password-db = passwd        # 用户的用户名和密码的信息记录,默认即可
authz-db = authz            # 具体权限的设置,默认即可

      在原配置文件中都有,只不过被注释了,但是!要注意,所有配置必须顶格写,开头不能是空格

      再改passwd

[users]
用户名 = 密码

      在原配置文件中都有,只不过被注释了,不过开头还是不能有空格

     最后改authz

[/目录位置]
用户 = 权限

     目录位置的/代表的是svn创建的共享目录的位置,也就是svn的根目录,对于具体目录进行的权限分配,当某个子目录没有具体设置权限的时候会找其父目录,继承其权限
      权限r代表读权限,w代表写权限,空代表无权限
       注意: 对于用户权限的修改是实时的,不需要重启,改完权限会立刻生效

   当然也可以选择创建子目录
      在导入的时候,SVN根路径后面加上想创建的/子目录即可

   3. 启动服务
     svnserve -d  -r /SVN的系统根路径
      启动服务的时候必须有 [ -r /SVN的系统根路径 ] ,虽然不写可以启动,但是下面客户端在访问操作的时候必须在IP后面加上SVN的系统根路径,很麻烦


SVN 具体操作

    服务端:
      svn import 准备导入到SVN的本地文件 file:///SVN的绝对路径/SVN下的子目录(可以没有) -m "介绍"
        导入后,会自动出现这个SVN子目录,在客户端可以访问
        导入的是文件就会显示文件,导入的是目录就是目录,
        没有子目录就全存在根目录下,有子目录就存在根下的子目录下的

    客户端:
        svn --username 用户 --password 密码 info svn://IP
        第一次操作的时候需要进行用户名密码的认证,通过交互界面可以记住帐号密码,实现以后的所有操作不需要加上用户名密码的认证,而info就是显示SVN的版本信息

下面操作中不写本地目录默认是操作到当前目录

svn co svn://IP/子目录  本地目录 把SVN上的目录拷贝到本地的一个目录下
svn ci -m "描述"  本地目录 把本地下载的那个目录进行修改后,同步到服务器,注意本地目录一定要是从svn上下载下来的
svn update 将服务器上新的数据同步到本地
svn log svn://IP/子目录 查看具体某个子目录的修改日志
touch /本地目录/文件名
svn add 文件名 
svn ci -m "描述"
创建一个文件上传到svn服务器中,要注意,新建的文件,不用add加入到svn服务器中,是不能用ci同步的,而add只是创建,其中没有数据,需要再ci才能完成创建文件的全部操作
svn mkdir 目录名
svn ci -m "描述" 本地目录
创建文件夹,并且上传到svn中
svn rm 文件名
svn ci -m "描述" 本地目录
删除文件,并且上传到svn中
svn diff 本地目录 查看svn服务器中的数据和本地目录的所有数据进行对比(对子目录不会对比)
svn revert /本地目录/文件名 还原某文件
svn merge -r当前版本:还原至的版本  文件    将后文件还原到原来的某个版本的状态   

注意:
  1. 想用svn创建一个文件,需要在本地创建编辑后,用svn add 再用svn ci提交才能完成
     而创建目录,svn mkdir 就可以了 
  2. 创建用户主要用 'svn add 文件名' ,不是简单的ci的进行更新,
  3. svn不管怎么增删改查,都会有版本记录,哪怕记录删除了,也可以返回旧版本找回


多用户共同维护修改

   1. 不同文件的编辑,两者互不干涉,修改完svn ci提交即可,然后如果要得到对方的修改的文件svn update即可同步文件

   2. 对同一文件的不同行修改,第一个人修改完提交没有问题,但是第二个是提交会报错,这时候用svn update,就会自动同步,两人修改的部分,合并到一个文件中,不过必须全是不同行的修改,不然会有冲突。
    注意:这里有个小的注意点,svn中允许用户端创建文件,只是用户端创建的文件,不能两人同时修改上传,不管是不是同一行,都会报错冲突无法同步到一个文件。
   
   3. 对同一文件的同一行冲突,svn update不能解决只能人为干预,商讨后冲突正确方上传,错误方不上传即可,
     如果冲突 svn update 会报错,然后让用户选择,
     p 代表保留冲突,这不是解决问题,选择后会自动出现多个文件,有冲突比较文件,用户自己的文件,svn最新文件,以及用户修改的初版文件,可以根据需求修改保留
     Df 代表比较不同点  
     mc 代表保留自己的
     tc 代表保留svn上的

   总结: 多用户处理不同文件,不存在任何问题,而如果修改同一文件,必须是服务端创建的文件,如果修改不同行,只需要后来修改的人在提交前用svn update 同步一下,svn会自动把两个文件合并,然后再上传即可了,不过如果是同一行就只能认为操作了


GPL 是一个开源协议
  1. 随意复制       2. 随意修改       3. 再发布(但是具有继承性,再发布的软件也必须也是GPL协议的软件)

RPM包编译安装

  装包:yum -y install  rpm-build  gcc  pcre-devel zlib-devel openssl-devel

  配置:
    命令: rpmbuild -ba rpm.spec &>/dev/null
      这命令会在当前目录下创建一个rpmbulid目录,里面也会有子目录,这就是用来做准备的
    配置源码包,把源码包复制到rpmbuild/SOURCES下即可    修改配置文件 rpmbuild/SPECS/服务名.spec 

Name:服务名        
Version:版本号
Release: 第几次做rpm包
Summary: 简介   
License: 协议(GPL开源协议……) 
URL: 网址 
Source0:源码包名


%post
  安装后脚本
  
%description
  软件具体介绍

%prep
%setup –q                            //自动解压源码包,并cd进入目录

%build
./configure
make %{?_smp_mflags}

%install
make install DESTDIR=%{buildroot}

cp 脚本 %{buildroot}编译安装后的具体目录    // 想编译安装后把一些运行的脚本放到其目录下    

%files
%doc
编译安装后的绝对路径/*            //对哪些文件与目录打包

%changelog

  安装:
     rpmbuild -ba rpmbuild/SPECS/软件名.spec

  Rpm包就保存在rpmbuild/RPMS/x86_64下

猜你喜欢

转载自blog.csdn.net/Yu1543376365/article/details/82904398