SVN基本使用笔记——广州云科

简介

SVN是什么?
代码版本管理工具
它能记住你每次的修改

查看所有的修改记录

恢复到任何历史版本

恢复己经删除的文件


SVN跟Git比,有什么优势
使用简单,上手快
目录级权限控制,企业安全必备
子目录Checkout,减少不必要的文件检出


主要应用:
开发人员用来做代码的版本管理
用来存储一些重要的文件,比如合同
公司内部文件共享,并且能按目录划分权限


SVN仓库
推荐: svnbucket.com,sVN桶

现在最好用的SVN服务


安装sVN客户端
TortoisesvN   windows推荐

cornstone    mac推荐

svnbucket.com(sVN桶)官网如下:也有使用教程

svn使用教程 · SVN使用教程

下载安装svn客户端

可参考:svn客户端下载 · SVN使用教程

从而下载win的64位的TortoiseSVN客户端

官网下载太慢,也可找别的渠道下载,如【TortoiseSVN下载 中文版】TortoiseSVN 1.14.5-ZOL软件下载

下载后,点击安装直接next。

下载汉化包:还是找到上面官网svn客户端下载 · SVN使用教程

下载后运行安装,安装最后一步勾选配置TortoisesvN使用这个语言。即可。

sVN基本操作:
检出checkout

新增add
提交commit

更新update

历史记录

SVN基本操作

1、进入官网,注册登录后,项目列表点击加号创建一个项目,输入名称和描述,可先不勾选那个创建三个目录的按钮。

SVNBucket - SVN仓库,免费 SVN 代码托管服务器,不限私有,不限成员

2、点击这个项目,点击复制SVN地址如svn://svn.svnbucket.com/svn_3284514536/svnbucket/

3、桌面上创建一个目录,如workspace,点进去,点击右键,然后点击svn检出,再给他加一层目录后点击确定,输入svn的用户名和密码即可。

4、进入该目录C:\Users\kongdeyi\Desktop\workspace\svnbucket后,发现一个.svn文件夹,我们在这个C:\Users\kongdeyi\Desktop\workspace\svnbucket目录下从别的地方copy几个文件放进去。右键svn提交,然后第一个框中输入描述,第二个框中选择要提交的内容,也可点击全选全部选中,然后确定即可。

5、然后再是svnbucket网站中可看到提交的内容和记录等

6、我们修改一下pojo中的User实体类中的内容,然后再次在.svn文件夹所在的目录点右键svn提交,提交前可双击查看文件变更的内容差异:

确定没问题后,确定提交即可。

7、svnbucket网站上该文件查看发现是经过修改后的内容。

8、查看日志:在该C:\Users\kongdeyi\Desktop\workspace\svnbucket\文件夹或子文件夹中右键tortoiseSVN选择显示日志即可查看之前提交的内容。

在svn提交之前先右键的svn更新是一个比较好的习惯,可避免覆盖原文件。

撤销和回复

撤销和恢复:
撤销本地修改

撤销已提交内容

恢复到指定版不

第一种情况:比如我们修改了pojo下的User类将类名改成User666,只是在本地还未提交,我们想到这个是个错误的修改,我们可右键tortoiseSVN中选择还原,也可在svn提交的时候,检查一下修改的内容后,提交窗口中右击该文件选择svn还原。

第二种情况,当我们将修改成错误的内容文件提交上去了,提交完后发现该pojo下的user类刚刚修改成user666是有问题的。

可先在右键tortoiseSVN中日志中看到这次提交的文件,点开发现和之前修改的区别确实是改错了。我们可在下图位置右键,选择复原此版本做出的修改

然后现在只是本地恢复正常了,但我们还需要提交到仓库,右键svn提交即可

第三种情况是我们想恢复到一个比较早的版本,恢复到指定版本

右键tortoiseSVN中日志中,想要复原到的版本,右键复原到此版本

现在还是只是本地修改了,我们还需要svn提交。

添加忽略

忽略不想提交的文件:

C:\Users\kongdeyi\Desktop\workspace\svnbucket文件夹下的pojo我们不想pojo文件夹提交了,我们可右击这个pojo文件夹,tortoiseSVN->去除版本控制并增加到忽略列表,选择pojo即可。

然后,先svn更新后svn提交,就会将这些删除pojo目录的本地提交到远程仓库。

也可在svn提交的时候,在第二个框中,对某个文件或文件夹右键,选择增加到忽略列表也可。

又不想忽略这个pojo文件夹或其他已经被忽略的文件呢?

右击这个被忽略的文件或文件夹,tortoiseSVN选择加入,或选择从忽略列表中删除。然后svn提交即可。

解决冲突

什么情况容易发生冲突?
1多个人修改了同个文件的同一行

2无法进行合并的二进制文件
怎么避免冲突?
经常update同步下他人的代码

二进制文件不要多个人同时操作
冲突了怎么办?
解决冲突很简单,不用怕

版本冲突原因:

假设A、B两个用户都在版本号为100的时候,更新了kingtuns.txt这个文件,A用户在修改完成之后提交kingtuns.txt到服务器,这个时候提交成功,这个时候kingtuns.txt文件的版本号已经变成101了。同时B用户在版本号为100的kingtuns.txt文件上作修改,修改完成之后提交到服务器时,由于不是在当前最新的101版本上作的修改,所以导致提交失败。

别人修改了pojo下的User中类名改为User666并提交了,本机电脑没有update这个最新版本的,在上一个版本中也修改了User类的类名这一行的代码为public interface,然后svn更新,或只选中这个User类进行svn更新这一个文件,就会报冲突,会生成几个这个User文件,mine是本地的,r7和r9是版本7或9的,参考下图:

解决方法:

然后右击爆红的地方,可使用他的,丢弃我的,也可丢弃我的,使用它的。也可编辑冲突:

编辑冲突,可以在他的或我的冲突的这行右击这一行,使用某个正确的文本块,如下:

确定后,更新成功,本地恢复正常了,解决冲突了。

对于修改二进制文件,比如图片,用别的地方某个同名图片覆盖掉svn项目中的某个图片。然后svn更新,就会产生冲突。右击爆红的冲突这行,可选择使用他们的还是使用我的,或选择编辑冲突,选择要本地现在的副本的,还是上一个版本的,还是远程的。

分支

什么时候需要开分支?
隔离线上版本和开发版本
大功能开发,不想影响到其他人,自己独立开个分支去开发


sVN经典目录结构:
trunk    主干,开发中的文件 ,平时在主干上开发,开发后用那个版本可开一个分支存储到branch中。
branches   分支

tags    标签

1、可在vnbucket中创建项目的时候勾选那个创建分支接口的选框。

2、自己创建:

先创建这三个文件夹,然后将之前该svnbucket文件夹中的工作文件放到trunk目录中,svn提交,选择全部文件提交即可。        

开发就在主干上开发,开发完成要上线了,就可开一个分支。

1、右击trunk文件夹,ortoiseSVN选择分支/标记,选择至路径branches,加个onlinev1.0

填写信息,选择版本库中的最新版本

点击确定即可

2、更新一下C:\Users\kongdeyi\Desktop\workspace\svnbucket  svn更新,然后branches目录下就会有onlinev1.0文件夹,里面就有trunck分支下的所有内容复制了一份。

这样会有个问题,以后分支越来越多,要更新的内容也会越来越多,我们可将分支单独checkout一份出来:

右击这个文件夹,选择属性

选择subVersion,复制全部的url:

回到workspace,在这个目录右击,选择svn检出,也可改个名字,确认即可:

然后同理,sgvnbucket目录下的trunk目录也可属性复制url,在workspack目录下检出一份。这样svnbucket目录就可删除了,结果如下

这样在主干修改的内容提交不会影响分支,分支修改提交也不会影响主干。

合并分支 

分支上修改的内容怎么同步到主干上呢,如分支上修改bug,要同步到主干上:

workspace目录下右击这个svnbucket-onlinev1.0文件夹,ortoiseSVN选择显示日志。选中某个版本,合并版本到:

合并版本到,选择主干的文件夹:

 本地主干目录合并好了,我们在主干目录svn提交到远程仓库

分支切换 

再开一个分支:

右击workspace目录下的svnbucket-trunk目录,选择tortoisesvn,选择分支/标记,选择branches分支,起个名onlinev2.0,确认即可。

右击这个svnbucket-onlinev1.0, tortiosesvn,选择切换:

可下拉切换,或点右侧选择路径切换 

确定后,右击这个svnbucket-onlinev1.0属性,就看到切换成2.0了

当然,我们可以给这个文件夹改个名字:

也可点进C:\Users\kongdeyi\Desktop\workspace\svnbucket-online,右击后 tortiosesvn点击版本库浏览器,查看结构        

代码暂存

有什么用?
1.代码改了很多,突然需要紧急修复一个bug,但是代码还没写完,不能提交。

2.代码重构了很多,突然需要发布新版本,但是代码还跑不起来,不能提交。

C:\Users\kongdeyi\Desktop\workspace\svnbucket-trunk\pojo中的User类,我们修改了一些代码,带还没改完,不应该提交。我们右击后Tortoise中选择汉化翻译的贮藏

上面两个按钮,一个不保留修改,一个保留修改。 

取出暂存,我们右击后Tortoise中选择汉化翻译的取消贮藏,选择暂存的文件来取出暂存

 复杂代码合并

上面分支部分学了在日志中选择某个版本合并到另外一个分支上去。

情况:
主千开发新功能,改了很多
分支是线上版本,修复了很多bug
两个分支的代码时间久了差异很大,无法直接分支合并或者指定提交记录合并代码


使用BeyondCompare

下载:下载 | Beyond Compare 中文官方网站

安装后使用

选择文件比较,选择将路径分别粘贴到左右:

选中右键比较内容,直接点开始,

上方选择差别菜单,也可选择全部。

点开这个User.java文件:

点左边这个,将右边替换,点击右边这个将左边替换。然后修改完后,再ctrl+s可保存。

然后就可按需合并修改了。然后再把代码提交上即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/98960.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数学建模--一维插值法的多种插值方式的Python实现

目录 1.算法流程步骤 2.算法核心代码 3.算法效果展示 1.算法流程步骤 #算法的核心就是利用scipy中的interpolate来完成工作 #一共是5种一维插值算法形式: #插值方法:1.阶梯插值 2.线性插值 3.2阶样条插值 4.3阶样条插值 #"nearest"阶梯插值 #"zero&…

Beats:安装及配置 Metricbeat (二)- 8.x

这篇文章是继文章 “Beats:安装及配置 Metricbeat (一)- 8.x” 的续篇。你可以先阅读之前的那篇文章再继续阅读这篇文章。我们在这篇文章中继续之前的探讨。 使用 fingerprint 来代替证书 在实际的使用中,我们需要从 Elasticsear…

骨传导和普通耳机哪个危害大?哪款更值得入手一些?

先说结论,普通耳机对人体的危害要比骨传导耳机大一些,区分方式也很简单,想要了解骨传导耳机和普通耳机哪个对人体的危害更大,首先就要了解它们的传声方式,普通耳机的传声原理很简单,利用空气传声&#xff0…

【系统设计系列】 回顾可扩展性

系统设计系列初衷 System Design Primer: 英文文档 GitHub - donnemartin/system-design-primer: Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards. 中文版: https://github.com/donnemart…

SpringBoot实现发送邮件功能

平时注册或者登录一个网站时,可能收到过邮件用来发送验证码等,邮件在项目中经常会被用到,比如邮件发送通知,比如通过邮件注册,认证,找回密码,系统报警通知,报表信息等。 发送邮件用…

Vue组件之间传值

聊一聊vue里面组件之间的传值 首先总结一下vue里面传值的几种关系: 如上图所示, A与B、A与C、B与D、C与F组件之间是父子关系; B与C之间是兄弟关系;A与D、A与E之间是隔代关系; D与F是堂兄关系,针对以上关系 我们把组件…

每日一题——下一个排列

下一个排列 题目链接 读懂题目 要理解题目的意思,主要是要读懂这一句:整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。 我们来逐词分析: 其整数,即我们要将这个数组的数字构成一个十进制整数,例如数组…

Qt中布局管理使用总结

目录 1. 五大布局 1.1 QVBoxLayout垂直布局 1.2 QHBoxLayout水平布局 1.3 QGridLayout网格布局 1.4 QFormLayout表单布局 1.5 QStackedLayout分组布局 1.6 五大布局综合应用 2. 分割窗口 3. 滚动区域 4. 停靠区域 1. 五大布局 1.1 QVBoxLayout垂直布局 #include <…

软件测试/测试开发丨Web自动化测试 关键数据记录

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27105 记录关键数据的作用 内容作用日志1、记录代码执行情况&#xff0c;方便复现场景&#xff0c;也可以作为bug依据截图1、断言失败或成功的截图&#…

Yapi接口一键生成Java代码

Yapi上定义好接口之后,转换成Java代码时费时费力,都是重复劳动,毫无意义,所以有了这个工具把程序员从大量重复劳动中解放出来。 1:修改application.properties yapi.project.token=f1a0ea09031f41e1adfa18a 获取方法如下: yapi.api.interface.ids和yapi.api.cat.id只配置…

QT实现TCP通信(服务器与客户端搭建)

一、TCP通信框架 二、QT中的服务器操作 创建一个QTcpServer类对象&#xff0c;该类对象就是一个服务器调用listen函数将该对象设置为被动监听状态&#xff0c;监听时&#xff0c;可以监听指定的ip地址&#xff0c;也可以监听所有主机地址&#xff0c;可以通过指定端口号&#x…

mysql trace

optimizer_trace 它可以跟踪优化器做出的各种决策&#xff08;比如访问表的方法、各种开销计算、各种转换等&#xff09;&#xff0c;并将跟踪结果记录到 information_schema 数据库中的 optimizer_trace 表中。 mysql 默认是关闭 追踪的 开启、并设置格式为 josn,同时设置trac…