zoukankan      html  css  js  c++  java
  • svn的安装和基本操作,及常见问题

    作用: 

      防止代码丢失(本地删除了找不到)

      行为受到控制(不能动别人代码)。

      不同人之间代码的相互调用,且不会产生冲突

     安装

      服务器端:

    服务器端配置时是有提供一个URL的。这个URL是客户端链接服务器时用的:

        项目Test的仓库的地址

    然后服务器端要配置用户和密码,用户才能在客户端使用:

            

       客户端

    安装后右键会出现:

          

        SVN  Checkout  是第一次链接服务器时用的,点击后:

            

    如要链接项目Test,在服务器端点击Test,出现的是项目Test的URL地址。

    把这个地址填写在Checkout  里。注意客户端和服务器不是同一台机器时,地址里的计算机名DADI-PC(服务器的计算机名)要换成服务器的ip地址。

    443是端口号,是服务器端安装时设置的。

    本地磁盘的存放路径:

          

     设置完之后点击OK,第一次链接会出现下面的界面:

          

    点击上面这个下次就不会出现了

     

    然后输入用户名,密码:

         

        注意选中下面 的   Save....    下次不用再次输入。

        

        本地磁盘里就多出了项目文件夹。里面有一个文件夹.svn。有这个文件夹,Test项目文件夹才能跟服务器端进行svn操作(增删改查等)

              

     基本操作

      提交操作

      新增文件(是自己拷贝到或者在这个Test创建的文件),然后提交:

      新建的文件,还没有提交,会有一个问号:

          

      如Test 文件夹下有一个Test.java文件,在Test文件夹下右键---点击SVN Commit:

      

      

    上面是写注释的地方,每次提交都写注释,写明自己为什么修改代码,防止有争论时忘记自己当时为什么修改,修改了哪里。

    选中要提交的文件,但是点击 OK。就提交了。

    所有的操作都是点击   OK   后  就完成了。(删除也是,更新也是,所以要注意,别不小心就删除了,或者更新把本地覆盖了。虽然SVN也可以再找回来,但是毕竟麻烦)

    Status是状态:

        non-versioned    无版本    说明是第一次新建项目,还没提交到服务器。

         missing          是要删除时的状态

           modified        修改后待提交

     

    提交后的文件,有一个对勾:

        

    删除操作

      本地删除文件后,服务器端还是有的,操作同上。需要在Test文件夹下右键---点击SVN Commit:

         

        missing说明是要删除的文件,选中---OK。服务器端也就删除了。

     修改文件

      修改后待提交的文件,是一个感叹号:

        

       

        这一块区域显示的是,上次提交后,又有了变化的文件(修改了,新建的,删除的等等),需要再次提交的文件

     

     常见问题

    多个用户操作同一个文件

    (1)B修改了A的代码

        如A提交一个文件,然后被B修改了。等A要用时,一个update更新,发现代码不是自己原来提交的了,自己写的部分被修改了。

         只有当前代码是最新版本,才能进行提交操作(要不你代码已经是很久以前的了,想提交进去直接覆盖最新的版本,你都不是在最新版本上修改的,谁知道你的代码有没有问题)。所以每天早晨第一件事就是更新代码。晚上最后一步是提交代码。

         当A早晨更新代码时,发现自己的代码被修改了:

          

        (这个Updated就是代码有修改的意思吗?)

        如何找回代码,如何知道是谁修改了代码?

        右击文件----TortoiseSVN ---Show log:

        

        可以看到代码提交记录:

          

          加号的是新建的意思,感叹号就是修改了的意思。可以看到谁在什么时间进行了什么操作。(如果提交时有些注释,Message里会显示)

          然后点击要恢复的版本---选择恢复到此版本:

         

          点击  Revert:

            

        本地代码恢复(仍需要提交):

          

        

    (2)B删除了A的代码

        第二天A一个更新,结果自己本地的代码也被删除了。

        如何找回?

        不能在文件上右击文件----TortoiseSVN ---Show log查看此文件的操作日志,就在这个目录下(是Test这个目录,这是前面下载代码时设置的本地仓库那个目录)右键----TortoiseSVN ---Show log,查看有多少人对这个项目提交了代码:

        

     

         选择想要的代码,然后右键---保存(图里没有显示出来save,在下面):

        

     

        只要代码被提交过,以后所有的操作都会被SVN记录下来,本地丢失了没关系,但是如果服务器端的那个仓库丢失了,就真的丢失了,所有管理员要对那个仓库备份。

    多人操作同一个代码,提交由先后,导致版本问题

      提交代码必须保证自己修改的最新版本,所以每天早晨最开始就是先更新代码

       AB都update了保证自己是最新版本,然后修改了提交,但是有先有后,B 先提交了,那A提交时就会遇到版本问题,因为B提交后版本更新了一次,A那边就不是最新版本了:

          

        提交失败,提示是过时版本,需要更新版本。点击OK:

          

     

            选择 更新。

     这时候出现一个问题,你代码没有提交,但是最新版本的代码却被拷贝了下来(B提交的那个版本),并且和你的代码合并了(Merged):

          

        如果AB修改的不是同行的代码,那两人的代码合并就没有关系,你修改了第九行,我修改了第十行。合并后是正确的。依次点击OK提交上去就可以了。

        如果AB修改的是同一行代码,SVN就合并不了,那就会出错。

        更新之后,提交之前本地就多了几个文件:

           

     

       黄色感叹号说明合并失败。此时不要再提交了。

      打开黄色感叹号的文件:

        

     

         上面是你想提交的代码,下面是现在已有的代码(两个代码修改的是同一行),此时就需要AB协商了。

        

         .main文件里是你自己想提交的代码。

        .r10 是老版本,是你修改之前的版本。其实是AB都没有修改时的那个版本

        .r11 是你提交时服务器端的最新版本(数字越大,版本越新)。其实就是B提交的最新版本。

         通过自己修改的版本,原来的版本,B修改的版本,双方可以协商出应该如何修改,是保留A的修改还是保留B的修改。

         不要直接在黄色感叹号Test.java里修改,容易删除不干净。

     

            如果保留A的修改,  .main文件覆盖黄色感叹号文件Test.java(把.main文件修改文件名为Test.java即可覆盖)。

            如果保留B的修改,直接右键操作文件恢复(直接修改文件名覆盖):

            

          得到的就是最新版本了(B提交的版本)而且那三个文件也消失了:

        

     

            如果都不要,用原来的版本, 就用  .r10文件直接修改文件名覆盖。

    冲突的地方很多的情况:

        AB都添加了代码,又都修改了同样位置的代码,然后提交有先后,B先提交,A提交出错,提示先更新。

        这时候就不要去更新了。把自己的代码先复制到其他地方。

        然后通过图中的操作把自己的代码恢复,得到上一个自己取得那个版本:

        

      然后再更新,得到目前最新版本(也就是B提交的版本)。为什么不直接更新取B提交的最新版?因为更新的话还会多出来另外三个文件,比较麻烦?

       

      然后把自己复制出去的修改一个名字拷贝进来。SVN有磁盘对比代码的工具。选中两个文件,右键,如图操作:

          

      得到对比结果:

        

        第一个方法都没有修改,第二个方法AB都修改了,需要双方协商。第三个是双方都新加的方法,都保留就可以了。

        协商修改完,再次提交就可以了(自己复制进来的那个删除就可以了)。因为A这边提交了,此时B那边需要更新一下

    B修改了A的方法,A没有发现,继续写代码

        

         如图,A的方法里的操作被B修改了。

      当双方都没有发现问题,经过很多版本提交后,比如测试时,发现那个方法报错了,但是已经很多版本过去了,不知道是谁因为什么修改的代码,怎么办?

      SVN还有一个历史记录比对的工具

      打开Show log:

        

        得到历史版本记录:

          

        此时选中最新的版本18和版本17,选择对比版本:

        

    发现此方法已经被修改了,再依次选择版本17和16,再次对比,直到找到这个方法被修改的时候:

      

      可以看到是版本16时,B修改的代码。然后就可以找B询问为什么修改了。

  • 相关阅读:
    近期C#小问题总结
    Arcgis由栅格数据提取等值线
    Arcgis由离散点制作核密度图
    用Arcgis为离散点区域生成格网(渔网)
    Arcengine合并面要素
    对离散点进行抽稀
    对离散点进行区域分割
    关于异常来自 HRESULT:0x80040351
    分布式缓存---Memcached 入门
    Mongodb安装 for windows7 64位
  • 原文地址:https://www.cnblogs.com/youwuyi/p/10422766.html
Copyright © 2011-2022 走看看