zoukankan      html  css  js  c++  java
  • SVN笔记

    svn:版本控制软件

    在现实的软件开发中有可能遇到的问题:

    代码管理混乱

    备份多个版本,占用磁盘空间大

    解决代码冲突困难

    容易引发BUG

    难于追溯问题代码的修改人和修改时间

    难于恢复至以前正确版本

    无法进行权限控制

    项目版本发布困难

    Svn的安装

          参照SVN 安装界面.doc文件

    创建仓库

    3.1   仓库的位置

    F:workcoursesvn epositorysvn

    3.2   利用svnadmin –create命令创建仓库

     

      上面的命令指的是在指定的目录下创建一个仓库。

    3.3  库里的文件

     

    svn仓库的启动

    4.1   两种启动-1-命令行

    4.1.1               启动命令

                  Svnserve –d –r 文件路径

     

    4.1.2               检查是否启动

     

    上面的这个命令可以检查端口号,一般svn默认的端口号是3690.

     

    说明该端口号正在被监听

    4.1.3               说明

    当把命令窗口关闭以后,监听就没有了,所以这种启动方式必须把命令窗口打开。

    4.2   两种启动-2-windows服务

    4.2.1               执行启动命令

    sc create SVN-Service binpath= "F:workcoursesvninsvnserve.exe --service -r F:workcoursesvn epositorysvn " displayname= "SVN-Service" start= auto depend= Tcpip

             binpath为执行命令所在的路径

             -r 为仓库的路径:这里配置的多仓库

                    也就是说可以在svn下建立很多仓库,例如建立itcast仓库

                    访问的时候:svn://localhost/itcast。建立oa,则访问的时候

                    svn://localhost/oa

                  如果路径改为F:workcoursesvn epositorysvnitcast,只能访问itcast这一个仓库。

    4.2.2                 Window服务

    当成功执行上述的命名以后,就可以在window的服务下面看到类似的内容。

     

    4.2.3               删除服务

    sc delete SVN-Service

    svn命令

    5.1   svn checkout命令

           说明:把仓库中的某一个项目checkout出来

          

                  svn checkout svn://localhost/itcast F:developworkroomuser

    5.1.1               建立用户

    创建一个客户端操作文件夹

          

           F:workcoursesvndevelop

    在该文件夹下建立两个文件夹,代表两个用户user1和user2

    5.1.2               利用命令

    利用命令把itcast仓库checkout到user1目录

     

    创建完毕以后user1下会多一个文件夹

     

    这说明创建完毕了。

    5.2   svn add命令

    在客户端创建一个文件,把该文件加入到该仓库中,加入到版本控制中

    5.2.1               执行命令

    在客户端user1中新建一个txt文件:a.txt

    说明:把a.txt加入到了itcast仓库,加入到了版本控制中

    5.3   svn commit

          说明:当把一个文件加入到指定仓库以后,接下来的操作就是提交。在提交的时候必须写一些说明(可以写这次提交都做了一些什么内容)

    5.3.1                 执行命令

     

    说明:当执行这个命令的时候失败了。因为用的是匿名用户登录的。

    在F:workcoursesvn epositorysvnitcastconf路径下有一个文件:svnserve.conf

    该文件有一句这样的描述:

         # anon-access = read

    说明:匿名用户只能有读的权限,所以这里应该改一下:

      anon-access = write

    当改完以后再次执行次命令的时候:

     

      说明命令执行成功了。在itcast仓库中加了一个文件a.txt,版本号为1

    5.3.2               user2用户执行checkout命令

     

    把a.txt文件checkout到user2中,并且版本为1

    5.3.3               User2用户修改a.txt文件

    5.3.4               User2用户commit文件

     

     文件a.txt在user2下再次进行修改

    5.3.5               User1用户进行更新

        

           把user1下的a.txt文件更新到版本2

    5.3.6               当删除掉客户端的一个文件时

    当删除掉客户端的一个文件时,可以使用svn update命令把服务器上的版本download下来。

    Tortoisesvn的使用

    6.1   建立仓库

    1、  在F:workcoursesvn epositorysvn路径下建立一个文件夹为itcast

    2、  进入itcast目录,如图所示

     

    3、  执行完第二步后,在itcast目录中产生了

     

    这个目录和用命令行创建的工程的目录是一样的。

    6.2   建立用户

    在F:workcoursesvndevelop目录下创建两个用户user1和user2,即两个文件夹。

    6.3   点击user1用户,选中checkout

     

       把itcast仓库放入到user1中

     执行完上述操作以后itcast仓库就被下载到了user1中

    6.4   在user1的itcast仓库中创建一个a.txt文件

    6.5   利用svn add把a.txt添加到版本控制

     

    添加完毕以后会出现如下的图标:

          

    6.6   利用svn commit上传到服务器

     

     

    在执行commit之前还要修改权限的部分。

    6.7   在user2中创建itcast仓库

    这个时候,user2的icast仓库中已经存在a.txt文件了

    6.8   修改a.txt文件

    6.9   执行commit操作

    6.9.1               在user1用户下针对itcast库的a.txt执行update操作

    6.10     上锁

    可以针对user1用户中的a.txt文件进行上锁的操作。

     

     

     

     当输入用户名和密码的时候,就上锁了,上锁的突变如下所示:

     

    当用户user2试图再次修改此文件时,会报如下的错误:

     

    6.11     解锁

     

    6.12     needs-lock

    6.12.1          a.txt变成needs-lock

    1. txt作如下的操作:

     

     

    添加一个属性:svn:need-lock,值为true,确定以后变成如下的图标:

     

    这个图标表明再次修改必须上锁。

    6.12.2          a.txt上锁

     

    6.12.3          进行修改

    6.12.4          进行commit操作

    6.13     去掉needs-lock属性

     

    点击remove就可以了

    6.14     冲突问题

    6.14.1          user1更新a.txt文件

    6.14.2          user2更新a.txt文件

    6.14.3          user1更改a.txt文件

    6.14.4          user2更改a.txt文件

    6.14.5          user1对a.txt进行commit操作

    6.14.6          user2对a.txt进行commit操作

     

       当user2对a.txt进行操作的时候,user2操作的a.txt文件并不是最新的。所以报如下的错误。

    6.14.7          对a.txt执行update操作

     

    该图标表示文件有冲突了。

    a.txt.mine表示user2用户最新的

    a.txt.r11 表示提交之前的

    a.txt.t12表示服务器上最新的

    6.14.8          解决冲突

     

     

      Theirs表示服务器上的

      Mine 表示自己的

      Merged 表示合并以后的版本

     

    可以在冲突的那一行点击右键,选择这四个选项中的其中一个。这个时候,Merge就会发生变化。

     

    这样就可以解决冲突的问题。

    6.14.9          Resolved

    当解决完毕以后,告诉svn已经解决完了

          

    6.14.10    commit

    权限

    7.1   权限的配置

    在itcast库的config目录下有授权的相关内容。

    7.1.1               svnserve.config

    定义所有认证和授权政策。

    7.1.1.1             anon-access

    匿名用户的访问权限,应该是什么访问权限都没有

           anon-access = none

    7.1.1.2             auth-access

    认证用户授权

       auth-access=write

    7.1.1.3             password-db

    指定用户的认证文件为passwd文件

    password-db=passwd

    7.1.1.4             authz-db

    authz-db=authz

    指定用户的授权文件为authz。

    7.1.2               password

    存放项目成员账户信息

    [users]

    # harry = harryssecret

    # sally = sallyssecret

    等号左边代表用户名,等号右边代表密码,所以可以这么添加:

    user1=user1pwd

    user2=user2pwd

    这样系统中有两个用户user1,user2,密码分别是user1pwd,user2pwd。

    7.1.3               authz

    复杂的群主授权控制

           [groups]

    # harry_and_sally = harry,sally

    # harry_sally_and_joe = harry,sally,&joe

      

    groups是组的意思

       等号左边的是组名,等号右边的是组的成员

    所以可以写

    svn_group = user1    把user1加入到svn_group组中

       # [repository:/baz/fuz]

    # @harry_and_sally = rw

    # * = r

       # [repository:/baz/fuz]:指出针对哪个仓库

       # @harry_and_sally = rw:针对某一个仓库,对组进行授权

       # * = r:对除了这个组以外的其他用户进行授权

    [itcast:/]:针对itcast仓库

    @svn_group = rw   针对svn_group组进行授权

    user2 = rw         针对user2用户进行授权

    * =  除了以上用户以外的其他用户都不能授权

    [itcast:/doc]

    user1 = rw

    * =

    以上配置说明:针对itcast仓库的doc目录,只有user1有读写权利,其他的用户都没有。

    7.2   权限的使用

    当配置完成权限以后,当在user1用户下或者user2用户下修改了一个文件,进行commit的时候,系统会自动提示如下:

          

    这个时候只有输入正确的用户名和密码信息才能提交。

    svn嵌入myeclipse

    8.1   插件的下载

    从官网上下载插件http://subclipse.tigris.org,可以从这个网站下载到最新的svn插件。

    8.2   创建插件目录

    在F:workcoursesvn下创建插件目录mypluginssvneclipse,把下载完的解压后的两个文件夹放入到该目录下

          

    8.3   创建svn.link文件

    在myeclipse安装的dropins目录下创建svn.link文件

    Link文件中的path

          

    path的值就是svn插件的目录所在。

    8.4   重启myeclipse

    svn在myeclipse中的使用

    9.1   把库添加到myeclipse中

    打开如下的视图:

          

    准备新建一个资源库的位置

     

    输入库的url:

     

    itcast库就被导入进来了

          

    9.2   把svn的项目检出到myeclipse

    在新建项目的时候,选择从svn上检出项目

     

    选择现有资源库的位置

     

    检出的项目在myeclipse中

     

    9.3   对a.txt进行编辑

    9.4   对a.txt进行commit操作

    9.5   Compare with

     

    可以利用Compare with的功能的子功能

                  基本修订版

                         最新版本的上一个版本

     

    利用这个功能可以和以往的版本做对比。

    9.6   Replease With

    可以选择某一个版本的内容覆盖当前版本的内容

    9.7   把项目添加到svn中

    新建一个项目,做如下的操作:

     

    选择svn

     

    把项目保存在itcast资源库

     

    9.8   分支、合并、切换

    9.8.1               Trunk

    存放开发的主线,团队成员在开发的时候一直要用这个库中的内容

    9.8.2               Branches

    存放支线副本:当项目稳定以后,先发布到tags下,如果发现了bug,再从tags下检出到branches下。在该版本下进行bug的修复,把修复完毕的稳定的版本重新发布到tags下。

    9.8.3               Tags

    存放标签副本,也就是存放稳定版本

    9.8.4               问题:

    一个公司开发了一个oa系统,随后发布了一个版本v1.0,由于这个版本还是比较成功的,然后客户提出了更多的需求,随后开发团地准备开发下一个版本v2.0,当开发团队

    在如火如荼的工作的时候,客户突然提出了在v1.0版本有一个bug,需要改进,而且必须把这个改进引入到v2.0版本中。用svn怎么样解决这个问题呢?

    9.8.5               解决

    9.8.5.1             在svn库中建立一个项目oa

    9.8.5.2             让oa成为svn项目

     

    9.8.5.3             修改权限,让匿名用户具有写的权限

     

    9.8.5.4             在客户端准备一个oa文件夹

    9.8.5.5             在oa文件夹下建立三个文件夹

     

    9.8.5.6             把oa里面的内容导入到svn库中

     

    9.8.5.7             查看仓库的结构

     

    从上面可以看出,branches,tags,trunk已经被加入到仓库中了。

    9.8.5.8             把正在开发的一个项目导入到trunk(主线)中。

     

     

    这样该项目的基本代码就加入到了trunk中。

    9.8.5.9             把trunk的项目check out到myeclipse中。

     

     

     

     

    经过以上几步,trunk中的目录就被导入到了oa中。

    9.8.5.10          发布v1.0版本

     

     

    选择发布到tags目录

     

    在tags下建立一个文件夹V1.0

    9.8.5.11          开发V2.0的功能

    在A.java类上稍微做一下修改即可。

    9.8.5.12          现在V1.0有bug,对V1.0的版本做检出

     

     

     

     

    9.8.5.13          对V1.0的版本进行修改

    9.8.5.14          对修改后的内容提交

    9.8.5.15          以上操作不对,因为tags的内容不能进行修改

    9.8.5.16           

    9.8.5.17          对tags中的V1.0做分支

    对tags中的V1.0做分支,然后移动到branches中,为V1.0_fixup。

    9.8.5.18          切换版本库的路径

           把路径切换到branches/V1.0_fixup。

    9.8.5.19          提交

    因为版本库已经切换到了branches/V1.0_fixup,所以这个时候可以提交了。

    9.8.5.20          把修复好的V1.0_fixup发布

     

    选择branches中的版本做分支标记。

     

    发布到稳定库中(tags),并且版本的名字为V1.1

    9.8.5.21          把V1.1版本加入到原来的版本中

    在trunk版本中,选择合并。

     

     

    从tags/V1.1中进行merge

    9.8.5.22          在企业的应用

    1、  项目经理会发一个word文档

    1、  svn的仓库的地址

    2、  使用svn的用户名和密码

    3、  把svn上的项目导入到myelicpse中

    4、  做自己的模块,把自己写的东西上传到svn上

    5、  版本的对比,合并版本

    合群是堕落的开始 优秀的开始是孤行
  • 相关阅读:
    使用字体图标完整步骤
    用position:absolute定位小窗口位于版面正中心
    MySql 技术内幕 (第7章 游标)
    MySql 技术内幕 (第5章 联接与集合操作)
    赋值语句作为判断的条件
    发布订阅模式和观察者模式
    关系代数
    数据库关系代数表达式学习
    软考通过分数
    哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度
  • 原文地址:https://www.cnblogs.com/biaogejiushibiao/p/9498818.html
Copyright © 2011-2022 走看看