美文网首页
SVN 日常使用

SVN 日常使用

作者: wayyyy | 来源:发表于2020-04-02 21:32 被阅读0次

    SVN全名Subversion,即版本控制系统。

    版本模型

    所有的版本控制系统都需要解决一个基础问题:怎样让系统允许用户共享信息,而不会让他们因意外而互相干扰?版本库里意外覆盖别人的更改非常的容易。

    • 拷贝-修改-合并方案
      每一个客户联系项目版本库建立一个个人工作拷贝―版本库中文件和目录的本地映射。用户并行工作,修改各自的工作拷贝,最终,各个私有的拷贝合并在一起,成为最终的版本,这种系统通常可以辅助合并操作,但是最终要靠人工去确定正误。

    新建了一个Subversion版本库,从修订版本号0开始,每一次成功的提交加1,当你提交成功,Subversion告诉客户端这个新版本号:


    linux 日常使用

    • svn checkout

      svn checkout svn://xxxx --username xxx --password  xxx
      

      上面的操作会svn会询问是否将验证信息缓存在磁盘上面,用脚本拉取代码时不合适

      svn checkout svn://xxxx --username xxx --password  xxx --no-auto-cache
      
      • 检出某个版本的代码
        检出20版本的代码。
        svn checkout -r 20 svn://xxxx 
        
    • svn export
      检出的项目仍然被SVN进行管理,有.svn隐藏的文件夹,和版本库仍然关联,导出的项目相当于一些普普通通的文件,不再和版本库、SVN有任何关系。

      svn export -r 版本号 svn://xxxx 本地目录 --username xxx --password  xxx
      
    • svn update

      svn update .  # 将当前目录更新到最新版本
      
      • U foo
        文件foo更新。
      • A foo
        文件或目录foo被添加到版本库中。
      • D foo
        文件或目录foo在版本库被删除了。
      • R foo
        foo被删除,而一个新的同样名字的项目添加进来,它们具有同样的名字,但是版本库会把它们看作具备不同历史的不同对象。
      • G foo
        文件foo接收到版本库的更改,你的本地版本也已经修改,但改变没有互相影响,svn成功的将版本库和本地文件合并,没有发生任何问题。
      • C foo
        文件foo的修改与服务器冲突,服务器的修改与你的修改交迭在一起。
    • svn add foo
      将文件、目录或者符号链foo添加到版本库,当你下次 提交后,foo会成为其父目录的一个子对象。注意,如果foo是目录,所有foo中的内容也会预定添加进去,如果你只想添加foo本身,使用--non-recursive(-N)参数。
    • svn delete foo
      将文件、目录或者符号链foo从版本库中删除掉,如果foo是文件,它马上从工作拷贝中删除,如果是目录,不会被删除,但是Subversion准备好删除了,当你提交你的修改,foo就会在你的工作拷贝和版本库中被删除。

    • svn move

    • svn status
    • svn diff
    • svn commit

      svn commit -m "upload test.log"
      
    • svn revert

      • 修改过的东西没有提交
        svn revert [-R] file or dir
        

      如果回滚的是一个目录,-R选项表示递归。

      • 修改过的东西已经提交
        这种情况下,需要用svn merge命令来进行回滚。
        第一步,先将自己修改备份一下。
        第二步,执行svn update 保证工作区文件是最新的。
        第三步,利用svn log找出要回滚的确切版本号,比如版本号是10。
        第四步,利用svn merge回滚到具体版本
        svn merge -r 20:10 file or dir
        
        第四步,提交回滚
        svn commit -m "..."
        
    • 重命名

    • 查看版本日志

      • 查看某一文件的版本变化
        svn log test.log  # 查看这个文件的所有修改记录,及其版本号的变化。
        
      • 查看一段日期的日志
        svn log -r {2018-07-03}:{2018-07-09}
        
      • 查看某一版本所修改的文件列表及说明
        svn log -r r196674 -v
        

    冲突

    如果两个程序员同时修改了同一个文件,SVN可以合并这两个程序员的改动。
    实际上SVN管理源代码是以行为单位的,就是说两个程序员只要不是修改了同一行程序,SVN都会自动合并两种修改。如果是同一行,SVN会提示文件Confict冲突,需要手动确认。


    分支

    SVN 新建资源仓库时,可选择默认创建3个文件夹,这3个文件夹分别是:trunk,branches,tags。

    • trunk
      一般用于存放目前项目主线,也就是项目所有功能模块的集合体,一整个项目所有代码库。一般来说,存放在trunk中的代码都是稳定可正常运行的。
    • branches
      分支,其实也就是主线的拷贝,主要应用于在项目需要有新的开发时,不针对主线进行,而是在主线的基础上,拷贝一份或者多份。针对每个模块小组,均可根据自己的开发情况,创建自己的分支进行开发,最后将分支一起合并到trunk上来,从而最后合并为一个项目。
    • tags
      标记是主线中一个特定版本的定型版。比如一个系统1.0开发完成,就会将主线的代码打一个tag,标记1.0开发完成。所以Tags中的代码只读的,也就是tags中的版本是不允许再动了。

    trunk负责保存当前稳定版本。
    branches 负责保持你分支版本,进行新需求开发。
    tags则保存最终发布上线版本,所以不可再修改。
    各司其职,各尽其责,使得开发过程中版本控制有条不紊。


    开发工作流

    日常开发过程其实就是这样的,(假设你已经Checkout并且已经工作了几天):Update(获得最新的代码) -->作出自己的修改并调试成功 --> Commit(大家就可以看到你的修改了)

    windows 日常使用

    • 检出代码
      右键菜单中点击 SVN Checkout。

    • 更新到最新版本
      更新本地代码与SVN服务器上最新的版本一致,只要在需要更新的文件夹上点击右键或者在文件下空白处点击右键,选择”SVN Update” (获取指定版本中的内容,点击右键执行SVN菜单中的“Update to reversion“),就可以了。

    • 提交

      • 加入版本库
        右键SVN菜单执行“Add“操作提交到”变更列表中
      • 提交更新
        右键SVN菜单执行”SVN Commit”提交到版本库中
    • 回退至某个版本
      右击想要回退的文件或者文件夹,在TortoiseSVN弹出菜单中选择"Update to reversion…"。

    • 删除
      方法1:选择被删除文件,右键svn菜单执行”delete”操作,然后选择被删除文件的父目录,右键svn菜单执行”SVN Commit”。

      方法2:使用操作系统的删除操作删除该文件,然后选择被删除文件的父目录,右键svn菜单执行”SVN Commit”,在变更列表中选择被删除的文件

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



    参考资料

    1. https://zhuanlan.zhihu.com/p/38573577
    2. https://blog.csdn.net/mrluzle/article/details/70140956
    3. https://www.cnblogs.com/harveylv/p/6835738.html
    4. https://www.kancloud.cn/i281151/svn/197105

    相关文章

      网友评论

          本文标题:SVN 日常使用

          本文链接:https://www.haomeiwen.com/subject/sbkxphtx.html