版本控制 SVN RPM包打包

版本库

典型的客户/服务器系统

~版本库是版本控制的核心

~任意数量客户端

~客户端通过写数据库分享代码

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

  1. ............
  2. anon-access = none
  3. //匿名无任何权限
  4. auth-access = write
  5. //有效账户可写
  6. ...............
  7. password-db = passwd
  8. //密码文件
  9. ................
  10. authz-db = auth
  11. //ACL访问控制列表文件
  12. ................

vim /var/svn/project/conf/passwd

  1. … …
  2. [users]
  3. harry = pass
  4. //用户名和密码
  5. tom = pass
  6. //用户名和密码
  7. .........

vim /var/svn/project/conf/authz

                        .............

  1. [/]                                //定义ACL访问控制       这里的/为控制库仓库的根目录:/var/svn/project/    如果需要设置根目录下面的某个目录文件可以在/后面指定
  2. harry = rw                        //用户对项目根路径可读可写
  3. tom = rw
  4. * = r                            //其他人只读
  5. ............

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 到一个干净点的目录

  1. svn --username harry --password pass \
  2. co svn://192.168.2.100/ code        
  3. //建立本地副本,从服务器192.168.2.100上co下载代码到本地code目录 会自动创建code目录       
  4. //用户名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            //查看版本仓库的日志


  1.  echo "test" > test.sh          //本地新建一个文件
  2. svn ci -m "new file"             //提交失败,该文件不被svn管理
  3. svn add test.sh                  //将文件或目录加入版本控制
  4. svn ci -m "new file"            //再次提交,成功
  5.  svn rm test.sh                    // rm -rf test.sh是无效的  使用svn删除文件
  6.  svn ci -m "xxx"                    //提交一次代码
  7.  svn diff                                 //查看所有文件的差异

  8.  svn diff umount.target        //仅查看某一个文件的差异
  9. svn cat svn://192.168.2.100/reboot.target    //查看服务器文件的内容
  10. sed -i "d" user.slice
  11. svn revert user.slice
    已恢复“user.slice”            //还原
  12. cat user.slice |wc -l
    11
  13. sed  -i "3a xxx" user.slice    //修改文件
  14. cat user.slice | wc -l
    12
  15. svn ci -m "xxx"
    正在发送       user.slice
    传输文件数据.
    提交后的版本为 7。
  16. svn merge -r7:1 user.slice        //文件从版本7还原到版本1
  17. cat user.slice | wc -l
    11
  18. [root@web2 tmp]# svn -r1 co svn://192.168.2.100/ qq            //加-r 跟版本号 指定下载某个版本的数据
  19. .............取出版本 1。

harry和tom修改不同的文件

        

  1. [root@web1 mycode]# sed -i "3a ###harry modify#####" tmp.mount
  2. [root@web1 mycode]# svn ci -m "has modified"
  3. [root@web2 mycode]# sed -i "3a ###tom modify#####" umount.target
  4. [root@web2 mycode]# svn ci -m "has modified"
  5. [root@web2 mycode]# svn update
  6. [root@web1 mycode]# svn update

    harry和tom修改相同文件的不同行

                

  1. [root@srv5 ~]# cd harry
  2. [root@web1 mycode]# sed -i "3a ###harry modify#####" user.slice
  3. [root@web1 mycode]# svn ci -m "modified"
  4. [root@web2 mycode]# sed -i "6a ###tom 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"        //提交成功

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  tuned*
  14. tuned.service tuned.service.mine        tuned.service.r10    tuned.service.r9
  15. [root@web2 mycode]# mv tuned.service.mine tuned.service       //.mine就是自己的,把自己的覆盖掉tuned.server
  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.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目录结构

  1. rpmbuild -ba nginx.spec                //会报错,没有文件或目录
  2. ls /root/rpmbuild                          //自动生成的目录结构
  3. 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                            

猜你喜欢

转载自blog.csdn.net/jon_stark/article/details/80277894