发表于: 2017-08-01 17:20:59

2 1068


终于回来了,从现在开始,每天写日报。

本日的学习计划,最重要:svn使用!





学习前的准备:

今日计划:学习SVN的使用

一 为什么要使用SVN

任何技术的使用,都是因为工作中遇到了相关的问题,才需要这种技术提供对应的解决方案。解决的问题:1 备份2 代码还原3 协同修改4 多版本文件管理5 追溯代码的编写人和编写时间6 权限控制-避免代码被人恶意修改

二 版本控制介绍

2.1 什么是版本控制

解决上述问题的方式叫做版本控制!版本控制[Revision control],最初来源于工程设计领域,是维护工程蓝图的标准做法,能追踪工程蓝图从诞生一直到定案的过程。是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统。

2.2 版本控制软件

常见的版本控制软件有SVN和GIT

SVN(Subversion ),是一个开放源代码的版本控制系统,采用了分支管理系统,它的设计目标就是取代CVS。
Git是用于Linux内核开发的版本控制工具。它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便。git的速度很快,这对于诸如Linuxkernel这样的大项目来说自然很重要。Git最为出色的是它的合并跟踪(merge tracing)能力。 (github)

2.3 SVN原理

 

SVN是一种CS架构软件采取客户端/服务器模式——在服务器的版本库中保存项目文件的各个版本,所有参与协同开发的程序员在自己本地电脑上保存一个工作副本。SVN支持程序员将本地副本更新到服务器端的最新版本,也支持将本地副本的最新改变更新到服务器端,而且后面的更新不会覆盖前面的更新,而是作为一个新的版本被保存下来——SVN甚至支持将本地工作副本恢复为服务器端保存的某一个历史版本。

2.3.1 SVN最常见的操作:

①检出(checkout):将一个服务器端创建好的项目整个下载到本地,这是到项目组后参与开发的第一步,只需执行一次。
②更新(update):将本地文件更新为服务器端的最新版本,通常为每天上班时或修改公共文件之前执行一次。
③提交(commit):将本地修改提交到服务器端。通常每天下班前或每实现一个功能、完成一个模块时执行一次。

三 SVN服务器的搭建和使用

版本:


  



    

Location是指VisualSVN Server的安装目录,Repositorys是指定你的版本库目录.Server Port指定一个端口,Use secure connection勾山表示使用安全连接,

点击Next,进入下一步,如下图:

  最后点击finish即可完成安装验证是否安装成功
在命令行输入:svn --version
看到如下信息就表示服务器端程序安装成功


四 创建SVN仓库

 在弹出的右键菜单中选择Create New Repository或者新建->Repository:一路点击Next即可。

4.1 建立用户和组,并且需要分配权限。

在VisualSVN Server Manager窗口的左侧右键单击用户组,选择Create User或者新建->User,如图:
 点击User后,进入如下图:
 填写Username和password后,点击ok按钮后,进入如下图:
 点击上面的【Add】按钮后,如下图
 

4.2 创建用户组

然后我们建立用户组,在VisualSVN Server Manager窗口的左侧右键单击用户组,选择Create Group或者新建->Group,如图:
 点击【Group】按钮后,进入如下图: 在弹出窗口中填写Group name为Developers,然后点Add按钮,在弹出的窗口中选择Developer,加入到这个组,然后点Ok.接下来我们需要给用户组设置权限,在MyRepository上单击右键,选择属性,如图:
 在弹出的对话框中,选择Security选项卡,点击Add按钮,选中longen0707,然后添加进来,权限设置为Read/Write,如下图: 点击【确定】按钮即可。    

五  客户端SVN安装。

1.下载

首先我们需要下载 ”svn小乌龟”后,进行安装。比如我下载如下的:
   安装完成后,比如在我的项目在qiandaun1中,我右键就可以看到如下:
 说明snv已经安装成功了!

2:checkout项目文件。

    新建或者进入目录下(比如qianduan1),右键 --> Svn Checkout -->

 其中URL我可以在SVN服务器获取到,我在myRepositories下右键新建文件
 qianduan文件被建立,然后比如我这样右键 --> copy下
 黏贴URL即可。

点击【ok】按钮后,就可以检索出来,如下:
 如下图:
 注意事项:
  .svn这个隐藏目录记录着两项关键信息:工作文件的基准版本和一个本地副本最后更新的时间戳,千万不要手动修改或者删除这个.svn隐藏目录和里面的文件!!,否则将会导致你本地的工作拷贝(静态试图)被破坏,无法再进行操作。
  1)    TortoiseSVN图标介绍    
        新建的文件 
    
        已本地管理, 但还没提交到服务器 
    
        已提交同步到服务器 
    
        本地文件修改了, 但还没有提交 
    
        要提交的文件与服务器端的有冲突 
    
        当前文件被设置了锁定, 但当前用户没有获得锁, 不能操作    
    
        当前文件被设置了锁定, 但当前用户获得了锁, 可以操作了 

2)    TortoiseSVN Client基础操作:

    1. SVN检出(SVN Checkout)

    在文件夹或者目录下单击右键 –> 选择SVN检出,如下图所示
   点击后,在弹开窗口的版本库url框中输入版本库的目录地址,然后点击确定,如下图
 再点击ok按钮后,如下图:
在弹出的对话框中输入用户名和密码,验证成功后,项目文件开始从远程服务器下载到本地工作目录中。
 点击ok按钮后,即可获取完成,如下图所示:

2.  增加(Add)

  在test项目文件下,新建一个b.txt文件,提交到版本库的方法如下2种:
  1. 先提到变更列表中,再commit到配置库中,选择新增文件,右键SVN菜单执行“Add“操作提交到”变更列表中”,然后右键SVN菜单执行”SVN Commit”提交到版本库中。
  2. 不提交到变更列表中,而是直接commit配置库中,选择该文件,右键svn菜单执行”SVN Commit”操作。

  3.  删除(Delete)

    如果被删除的文件还未入版本库,则可以直接使用操作系统的删除操作删除该文件。
    如果被删除的文件已入版本库,则删除的方法如下:
选择被删除文件,右键svn菜单执行”delete”操作,然后选择被删除文件的父目录,右键svn菜单执行”SVN Commit”.
使用操作系统的删除操作删除该文件,然后选择被删除文件的父目录,右键svn菜单执行”SVN Commit”,在变更列表中选择被删除的文件。如下图:
 

4.  改名(Rename)

    修改文件名,选中需要重命名的文件或文件夹,然后右键“TortoiseSVNàRename“,在弹出的对话框中输入新名称,点击”ok”按钮,并将修改文件名后的文件或文件夹通过 “SVN Commit”提交到SVN服务器上。

5 版本库浏览

通过此功能可以查到谁,什么时候,对那个目录下的那些文件进行了那些操作,如下图:

 

6.  SVN还原(SVN Revert)

    右击想要回退的文件或者文件夹,在TortoiseSVN弹出菜单中选择”Update to reversion…” 然后会弹出一个窗口,如下:
比如说我们要回退到第10个版本只需要在Revision中填写相应的版本号,然后点击ok即可。
查看版本修改到某一个版本 
 

7.  检查更新(Check for modifications)

    此功能可以显示你所做的修改有哪些还没有提交的,此功能不光能看到对文件的修改变化,所有的变化都能看到,包括增加文件或者目录,删除文件或者目录,移动文件或者目录等,如果你点击了检查版本库,那你还可以看到版本库里的改动,既别人提交了哪些文件的改动,你还没更新到本地,如下:

7.1 解决冲突

更新本地代码与SVN服务器上最新的版本一致,只要在需要更新的文件夹上点击右键或者在文件下空白处点击右键,选择”SVN Update” (获取指定版本中的内容,点击右键执行SVN菜单中的“Update to reversion“),就可以了。
  为什么会产生冲突代码呢?原因很简单就是因为不同的人,同时修改了同一个文件的同一个地方,这时候,他提交了,我没有提交,我就提交不了,这个时候我们要进行先更新,然后在进行提交即可,那如果产生冲突,会生成如上3个文件。解决方案如下:
    方法一: 使用SVN自带的冲突工具
        执行edit conflicts  启动工具修改 
           执行commit
    方法二: 手动解决:
        直接打开手动修改
        执行resolve
 手动处理!        执行commit
     

7.2 解决冲突的办法

防止冲突:
    方法一: 先update, 再修改 (不能完全防止)
    方法二: 设置锁lock(太狠了, 一般不建议使用) ---了解
        方法三:分不同的包,尽量避免同时修改一个文件,如果不是同时修改一个文件,不会有冲突

8 SVN提交(SVN Commit)


    Svn的提交是将在工作空间做的修改进行提交,包括文件内容的修改,文件或目录的添加,删除,命名,移动等操作。如下图所示:

9 版本库浏览(Repo-browser)

    此功能是用来浏览需要查看的资料库,在本地文件夹下点击右键,选择TortoiseSVNàRepo-browser,在弹出的对话框中输入资料库地址,再输入用户名和密码,就能查看到你需要查看到版本库的内容,在这你还能看到那些文件被谁锁定了

六 分支和主干

项目中为何要创建分支,及合并?
      比如我现在项目所有的文件放在主干上(trunk)中,由于需求的变更,需要增加新的需求,但是我们主干上还要继续往下开发,在此我们可以新建一个分支,来做增加新的需求那一块,主干上继续开发,等分支上代码没有问题的时候,再合并到主干上来。
 创建分支的最大的目的就是跟主线进行并行开发时候不影响主线的开发。
  如何操作?
      假如我本地新建一个文件夹test下有2个文件夹trunk(存放主干上的代码)和branch(存放分支上的代码)

 一:先提取主干上的代码。

  点击trunk --> 鼠标右键 --> 点击SVN Checkout --> 弹出一个对话框,如下图所示:
   其中上面的URL是从服务器VisualSVN Server上获取的,如下所示:
  直接右键qianduan3 --> Copy URL to Clipboard 即可。
  其中qianduan3项目有如下文件,如下图所示:
 最后点击上面的checkout按钮后,就可以在主干上把代码从远程服务器上获取到

二:新建分支

  从trunk(主干上)创建分支(branch)步骤如下:
  1. 右键trunk --> branch/Tag 如下图:
   
  在弹出的对话框如下图:
   
  点击ok按钮后,就可以在VisualSVN Serval服务器上新增newBranch,是从如上服务器qianduan3上的文件拷贝一份的,如下所示:
   
现在我们可以再来看看本地branch文件夹了,我现在直接进入branch文件下,右键 --> Chenckout下,就可以把newBranch下的所有文件提取出来了,如下所示:
 
点击ok按钮就可以把文件提取出来了,如下图所示:
分支目前建立在svn的服务器端,本地并没有更新,对本地branch文件夹 右键--> update即可,就可以更新到分支代码,如下所示:

 合并分支到主干

  1. 回到我们刚刚的主干(trunk)文件夹下,鼠标右键该文件夹 --> TortoiseSVN --> Merge 如下图所示:
 在弹出的窗口,如下图所示: 接着点击【Next】下一步,如下图所示:再接着【Next】下一步,如下图所示:
  就可以看到主干trunk上多加了一个3.txt,就是从分支上合并过来的。

四:合并主干到分支。

如果主干上有一些更新,比如说jar包更新等等,那么这些要更新到分支上去,如何操作呢?比如我现在在主干上新建一个4.txt文件,比如如下:
 在分支点击branch --> 右键TortoiseSVN --> Merge 如下图所示:    

七  锁定文件

 不让别人使用锁定的文件,除非你释放,否则别人不能提交和修改
 

八 Eclipse中使用svn


1 上传项目到svn中

       

恢复代码,将本地代码恢复为跟svn服务上一致的代码。-update


svn服务器检出(下载)项目

 

1、添加资源库位置

  

1、 svn服务器上添加

 

2、 svn资源库检出当前项目

   
  Eclipse中解决冲突

 

  



返回列表 返回列表
评论

    分享到