Linux下搭建版本控制器SVN

    关于版本控制器,大体可分为集中式和分布式两种。git

    集中式的版本控制器一般会存在一个中央服务器,主要是用来存放版本库的,(这里暂且先不说分支的事)当咱们工做以前,首先须要从中央服务器获得一份最新版本的代码,修改完毕以后,再次推送到中央服务器。集中式的版本控制器有个最大的缺点,就是必需要联网才能工做,同时,一旦中央服务器挂掉,整个项目就所有奔溃,可是用起来确实要方便一些。
vim

    

wKioL1kqPGqwWzGZAAC3evypPGE896.png

    分布式版本控制器的优点就很明显了,对于分布式的版本控制器,并无中央服务器一说,加入该版本控制器的每一个人的电脑上都有一个完整的版本库,所以,也同时避免了联网的缺点。当进行了本地的修改以后,只要推送给彼此,各自的修改就均可以看到。为了方便,一般的分布式版本控制器中也有一台相似于中央处理器的机器,只是为了你们相互推送的时候更加地方便,即便一台服务器down掉,只须要再拷贝一个版本库便可,容灾性要好得多。
bash

wKiom1kqPV7wnQjcAADniIMTnto612.png


    对于这两种版本控制器,SVN是集中式的表明,Git是分布式的表明,二者各有优缺点,在互联网公司中,二者都有着必定的应用。这里要说的是SVN的搭建与操做。
服务器

环境:  CentOS6.5
分布式

操做以前:安装svnserver,直接使用yum安装便可,一些状况下,电脑是自动安装了svn和git的ide

开始操做:svn


一、SVN仓库的创建ui



a、建立项目目录dir,并进行仓库初始化spa

     mkdir  /svn_repo版本控制

     svnadmin create /svn_repo

b、修改仓库目录下的conf文件夹下的三个文件的内容,每行开头没有空格

     authz:权限相关信息

 [/]                              # 仓库所在目录

 muhui = rw                # 给muhui用户rw权限

 *=                              # 其余用户没有任何权限

     passwd:用户名和密码相关信息

user = passswd

     svnserver.conf:相关配置路径

 anon-access = none                匿名用户权限

 auth-access = write               受权用户有写权限

 password-db = passwd              密码文件,未指定路径,表示当前目录

 authz-db = authz                 权限文件

 realm = /svn_repo/httpd            版本库所在目录


二、SVN项目目录


a、建立主工做目录manager

     [root@bogon svn_test]# tree

     .

     └── manager

         └── httpd

             ├── branched       # 子分支目录

             ├── tags

             └── trunk          # 主分支目录

     进入到manager目录,3将manager的目录结构同步到仓库,在httpd项目目录下,有了这个三个文件夹。

     svn import httpd svn://127.0.0.1/httpd -m "init httpd"

b、建立用户,并将主分支的代码检出到本地。

     mkdir -p  /svn_test/dev1

     cd  /svn_test/dev1

     svn  co svn://127.0.0.1/httpd/trunk httpd 

c、文件修改,并提交文件

     [root@bogon httpd]# vim main.cpp

     [root@bogon httpd]# ls

     main.cpp

     [root@bogon httpd]# svn st 

     ?       main.cpp                                                     #  ?表示该文件未归入版本控制

     [root@bogon httpd]# svn add main.cpp             # add将该文件添加到版本控制

     A         main.cpp

     [root@bogon httpd]# svn ci -m "dev1 modify"   # 将修改提交到服务器

     增长           main.cpp

     传输文件数据.

     提交后的版本为 2。


三、多人协做

    须要说明的一点,多人协做,和多分支操做是两个概念。一个分支上能够有多个user在操做,这里说的是在主分支下的多用户操做

 

a、建立用户dev2,下拉代码修改并再次提交

[root@bogon httpd]# pwd

/svn_test/dev2/httpd

[root@bogon httpd]# vim main.cpp

[root@bogon httpd]# svn st 

M       main.cpp

[root@bogon httpd]# svn up                           # 更新代码,防止远程库代码已被更改

版本 2。

[root@bogon httpd]# svn log                          # 查看提交日志信息

.........

[root@bogon httpd]# svn diff                          # 查看修改信息

.........

[root@bogon httpd]# svn ci -m "dev2 write sub"       # 提交代码到仓库

.........

b、冲突解决

     冲突缘由:多个用户同时下拉一份代码进行修改,修改完毕在提交以前,未再次svn  up更新,多个用户同时对一个版本进行修改,形成冲突。

[root@bogon httpd]# svn ci -m "dev1--complict"             # 提交失败,存在冲突

正在发送       main.cpp

传输文件数据.svn: 提交失败(细节以下):

svn: 文件 “/trunk/main.cpp” 已通过时

[root@bogon httpd]# svn up                                           

在 “main.cpp” 中发现冲突。  

选择: (p) 推迟,(df) 显示所有差别,(e) 编辑,

        (mc) 个人版本, (tc) 他人的版本,

        (s) 显示所有选项: p                                                # p选项,进行延时

C    main.cpp

更新到版本 4。

冲突概要:

  正文冲突:1

                        # 出现不少临时文件,为各个版本的源文件

[root@bogon httpd]# svn resolve --accept working main.cpp           # 冲突双方进行协商,修改源文件,以后临时文件被删除

“main.cpp”的冲突状态已解决

[root@bogon httpd]# svn ci -m "deal complict"                      # 再次提交,冲突解决


四、分支操做

a、分支建立

     [root@bogon dev3]# svn copy svn://127.0.0.1/httpd/trunk svn://127.0.0.1/httpd/branched/branch1 -m "add new branch1"  
     提交后的版本为 6。

        #  svn分支建立的过程,其实是对主分支的一份拷贝

b、查看共有多少个分支

    

 [root@bogon dev3]# svn list svn://127.0.0.1/httpd/branched -v
           6 muhui                 5月 28 09:38 ./
           6 muhui                 5月 28 09:38 branch1/

c、从分支branch1分支检出代码到当前工做目录,并查看当前属于那个分支


 [root@bogon dev3]# svn  co svn://127.0.0.1/httpd/branched/branch1  httpd
     A    httpd/main.cpp
     取出版本 6。
     [root@bogon httpd]# svn info
     路径: .
     URL: svn://127.0.0.1/httpd/branched/branch1
     版本库根: svn://127.0.0.1/httpd
     版本库 UUID: 39c9dc13-9f79-4073-bb0e-2b58c9b71fbb
     版本: 6
     节点种类: 目录
     调度: 正常
     最后修改的做者: muhui
     最后修改的版本: 6
     最后修改的时间: 2017-05-28 09:38:49 +0800 (日, 2017-05-28)


d、分支合并操做,要在主分支目录下进行合并

分支上的用户修改文件内容,并检入到分支

   

  [root@bogon httpd]# svn ci -m "branch1 modify"
     正在发送       main.cpp
     传输文件数据.
     提交后的版本为 7。


获取查看分支时的版本号

    

 [root@bogon httpd]# svn log --verbose --stop-on-copy
     ------------------------------------------------------------------------
     r6 | muhui | 2017-05-28 09:38:49 +0800 (日, 2017-05-28) | 1 行
     改变的路径:
        A /branched/branch1 (从 /trunk:5)
     add new branch1
     ------------------------------------------------------------------------


获取主干目录的最新版本号

 [root@bogon httpd]# svn up  
     版本 7。


分支合并

  [root@bogon httpd]# 
svn merge -r 6:7 svn://127.0.0.1/httpd/branched/branch1


五、版本回退


一、仅仅修改源文件,但还未进行ci操做

     

[root@bogon httpd]#  
svn  revert main.cpp


二、修改完毕的结果已经进行了commit

     

[root@bogon httpd]# svn  up          # 获取版本库最新版本      
[root@bogon httpd]# svn  log         # 找到要回滚的版本号
[root@bogon httpd]# svn merge -r 9:8  main.cpp         # merge进行回退,9表示当前版本号,8表示要回退到的版本号




            ------muhuizz整理

相关文章
相关标签/搜索