TortoiseSVN 详细操作指南

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。

                                                                              热爱技术的小郑

1、引言

考虑以下几种情况:

  • 你是否在一个团队中效力?
  • 你修改文件而他人也在修改,你修改的内容丢失了?
  • 你保存了文件可又后悔了,想把这个文件恢复到修改前的状态?
  • 你希望能够查看一个文件的前世?
  • 你在项目中发现了 BUG,想立案侦查它是何时产生的?
  • 你想快速比较一个文件的幼年和中年的差别?

如果这些问题你都遇到了,那就使用 TortoiseSVN 吧。TortoiseSVN 是 Subversion 的客户端。Subversion 是针对 CVS 的不足而开发的版本控制系统

2、基本概念

2.1 版本库 Repository

Subversion 是版本管理的后台系统,其核心是保存数据的“版本库-repository”。 版本库用分层的“文件-目录”文件系统数来存储数据。连接到版本库的客户能读写数据。版本库记录了你的每一次修改!客户端可以从版本库中取到过去的任何一个版本。
典型的服务器/客户机模型如下图:
在这里插入图片描述

2.2 图标重载

TortoiseSVN 最明显的特性之一就是图标重载,重载的图标显示在你的工作副本文件上。你一眼就可以看到文件被修改过了。根据文件的 Subversion 状态的不同,重载的图标
也不同。
显示重载图标的资源管理器:
在这里插入图片描述

各图标含义说明:

在这里插入图片描述

一个新检出的工作复本使用绿色的对勾做重载。表示 Subversion 状态正常.


在这里插入图片描述

在你开始编辑一个文件后,状态就变成了已修改,而图标重载变成了红色感叹号。通过这种方式,你可以很容易地看出哪些文件从你上次更新工作复本后被修改过,需要被提交。


在这里插入图片描述

如果在提交的过程中出现了冲突图标变成黄色感叹号。


在这里插入图片描述

如果你给一个文件设置了 svn:needs-lock 属性,Subversion 会让此文件只读,直到你获得文件锁。只读文件具有这个重载图标来表示你必须在编辑之前先得到一个锁。


在这里插入图片描述

如果你拥有了一个文件的锁,并且 Subversion 状态是正常,这个重载图标就提醒你如果不使用该文件的话应该释放锁,允许别人提交对该文件的修改。


在这里插入图片描述

这个图标表示当前文件夹下的某些文件或文件夹已经被计划从版本控制中删除,或是该文件夹下某个受控的文件丢失了。


在这里插入图片描述

加号告诉你有一个文件或是目录已经被计划加入版本控制。


对于未受控的文件没有图标重载。这么做是因为图标重载的数量受到系统的限制,应该要节约使用。事实上,你会发现并不是所有的图标被使用在你的系统上。这是由于 Windows限制图标重载不能超过 15 个。Windows 自己用了 4 个,剩下 11 个可被别的应用程序使用。如果你同时使用了 TortoiseCVS,就没有足够的空位了,所以 TortoiseSVN 希望成为一个“良好市民™”,限制自身的使用,为别的应用留下机会

2.3. 右键菜单

所有的 TortoiseSVN 命令都是通过 windows 资源管理器的右键菜单执行。右键点击一个文件或者文件夹,大多数菜单项都能够直接显示。一个命令是否显示取决于这个文件或文件夹或者它们的父文件夹是否受版本控制。

版本控制下一个目录的右键菜单:

在这里插入图片描述

2.4. 拖放

在工作副本里右键拖拽文件或目录到新的位置,或者右键拖拽一个非版本控制的文件或文件夹到一个版本控制目录下的时候,右键菜单还能够出现其他的命令。

2.5. 版本库浏览器

TortoiseSVN 的版本库浏览器类似与 Windows 的资源管理器,在版本库浏览器中,能查看版本库的结构和状态。

点击鼠标右键,在弹出的菜单中选择“TortoiseSVN”->“browser

在弹出版本库 URL 地址对话框中输入想要查看的版本库URL 地址:
在这里插入图片描述
点击“OK”,打开版本库浏览器:
在这里插入图片描述

  • 在版本库浏览器中你可以执行比如拷贝,转移,重命名等,这些操作直接在版本库上进行。

  • 在版本库浏览器窗口的顶端输入版本库的 URL 地址和你要浏览的版本号。可以打开特定的版本。

  • 你也可以在版本库浏览器中使用拖拽的操作。如果你把一个文件夹从资源管理器中拖拽到版本库浏览器中,那就实现该文件夹的导入功能。有一点要注意,在导入多个文件时,必须分开一个一个地拖进去

  • 如果要在版本库浏览器中移动一个文件,只用左键拖到它要去的位置。如果你更愿意去拷贝该文件的话,使用这个按住左键拖 。操作就像在资源管理器中一样,拷贝时指针“加” 来标记。

  • 如果你要拷贝/移动一个文件或文件夹到一个新的位置并重命名,你可以右键拖 或者
    按住右键拖这个文件,而不用左键拖。这样,就会显示对话框来为该文件或文件夹重命
    名。

  • 右键菜单
    在版本库浏览器的文件或者目录上点击右键,会出现不同的菜单,这些菜单提供了丰富的功能。

在这里插入图片描述

3. 日常操作

3.1. 项目入库 Import

所谓的 Import,就是把本地想要进行版本控制的项目文件提交到服务器的版本库中。此时的 SVN 服务器上只是创建了一个空的版本库,并没有包含任何项目文件。

在将项目导入到版本库前,应该进行以下操作:

  • 新建一个临时目录、把项目所需的目录及文件拷贝到此临时目录下。
  • 删除所有构建工程不需要的文件
  • 组织好目录和子目录内的文件

选择临时目录,点击鼠标右键,在弹出的菜单中选择TortoiseSVN”->“Import,会弹出项目导入对话框:
在这里插入图片描述
URL of repository

  • 项目导入到版本库的 URL,可以手工输入,也可以点击后面的按钮,打开版本库浏览对话框,选择所需的版本库。

Import mesage

  • 输入提交日志信息。便于以后查看。
  • 完成后点击“OK“按钮,TortoiseSVN 会把临时目录下所有文件的完整目录树及其内容导入到版本库。
  • 临时目录的文件夹名称不会在版本库中出现,只有这个文件夹下面的内容会在版本库中出现。现在这个工程就存贮在版本库,被版本控制。请注意,你用来存放导入文件的临时目录下的文件并没有被版本控制!你需要检出刚才导入的版本,以便获得受版本控制的工作目录

3.2. 检出工作副本 Check Out

所谓的 Checkout 就是指获得 SVN 服务器端指定的版本库中存储的所有文件,这些文件存在本地的工作副本目录下,并且受到版本控制系统的管理。SVNCheckout
Visual Source SafeCheckout 意义完全不一样,VSS 的 Checkout 指的是检出并且锁定某个文件。

SVNCheck Out 是第一次连接 SVN 库时使用,相当于 VSS 的 Set Working Folder 和 Get Last version 两个命令。

操作方法:
步骤一:新建一个目录
步骤二:在该目录上点击右键,在弹出的菜单中选择“SVN Check Out”:
在这里插入图片描述
步骤三:在弹出的 Check out 对话框中,在 URL of repository 处选择版本库所在路径
在这里插入图片描述
URL of repository
版本库的 URL 地址。

Checkout directory
本地工作目录。
填写好后,点击“OK”按钮,就会把 SVN 服务其上此目录下的内容 Check out 到上面新建的工作目录下。

3.3. 导出项目 Export

所谓 Export,就是把服务器上的项目文件存放到本地目录,Export 到本地目录的这些文件脱离了版本控制系统的控制。一般情况下,为了制作安装包,需要一个“干净“的项目文件。
操作方法:

步骤一:新建一个目录
步骤二:在该目录上点击右键,在弹出的菜单中选择“TortoiseSVN“-> “Export

在这里插入图片描述
URL of respository
版本库的 URL 地址,可以手工填写,也可以点击后面的按钮,打开版本库浏览器查找。

Export directory
导出到本地的目录。

Revision
要导出的版本:
HEAD revision 最新版本
Revision 指定的版本,如果记不住版本号,可以点击“Show log”按钮查找。

设置完成后,点击“OK”按钮,就会把所选择目录下的所有文件包括目录导出到本地目录下。

3.4. Check Out 和 Export 的区别

check out 方式获得版本后,取到的文件仍处于 SVN 版本控制中。
export 导出版本后,导出的文件脱离 SVN 版本控制。

3.5. 添加文件

将要添加的文件或者目录拷贝到上面新建的目录下,然后在文件或者目录上点击右键,在弹出的菜单中选择“TortoiseSVN”->“Add”
在这里插入图片描述
弹出如下对话框:
在这里插入图片描述
SVN 会把准备加入的文件及目录显示出来,可以根据需要选择要添加的文件或者目录。

点击“OK”把文件添加到 SVN 中。

在资源管理器中,要增加的文件或者目录图标上有一个白色红底的感叹号。表示工作目录中的文件和版本库中的文件没有同步。

说明:Add 命令只是告诉 SVN 客户端,这些文件将要纳入版本管理,并没有将这些改变提交到 SVN 服务器,如果要提交到版本库中,需要执行“SVN Commit”操作。

3.6. 修改文件

打开工作目录下的文件,直接进行修改,文件修改后,文件的图标会变化。

3.7. 删除文件

选中要删除的文件或者目录,单击鼠标右键,选择“TortoiseSVN”->“Delete”

在这里插入图片描述
这样删除后,文件或者目录的图标会相应的变化,此时只是本地工作目录下记录了删除动作,SVN 服务器上的文件还没有真正删除,只有执行 Commit 提交后,SVN 服务
器上的文件或者目录才会真正删除。

注意:千万不要用“Delete”键或者来删除文件,这样删除的话,SVN 客户端不会保存删除操作,将无法提交修改。

3.8. 放弃修改

当添加文件、修改文件、删除文件后,发现添加错误、修改错误、或者误删除文件后,想要放弃修改,可以点击鼠标右键,在弹出的菜单中选择“TortoiseSVN”->“Revert”:

在这里插入图片描述
在弹出对话框中,选择要恢复的文件,点击“OK”按钮,就可以恢复到修改前的状态。
在这里插入图片描述
说明:Revet 只能撤销本地的修改,不能撤销已经提交(Commit) 的变更

3.9. 查看修改

在提交前可以查看哪些文件在本地或者服务器上已经做了修改。有时我们对工作副本的许多文件进行了修改,这些文件位于不同的子目录。还有一种情况是我们的工作副本已经很久没有执行 Update 命令,我们想看看工作副本中有哪些文件已经发生修改了,这时就可以在工作副本的最上层目录单击右键,在弹出的菜单中选择“TortoiseSVN”->“Check for modifications”

在这里插入图片描述

出现如下对话框,会列出所修改的文件:
在这里插入图片描述

3.10. 提交入库

确定文件修改正确后,需要把文件提交到 SVN 服务器的版本库中,在需要提交的在文件或者目录上点击鼠标右键,在弹出的菜单中选择“SVN Commit”

在这里插入图片描述
弹出如下提交确认对话框:
在这里插入图片描述
在上面该对话框中,可以根据需要填写提交信息,也可以选择要提交的文件。确定后点击“OK”把修改的文件提交入库。
提交完成后,显示信息如下:
在这里插入图片描述

3.11. 获取最新的版本

第一次获取最新的版本时,需要用 Check out 命令。

当本地已经有工作副本以后,需要获取最新的版本时,需要用 SVNUpdate 命令,相当于 VSS 的 Get Last Version 命令。操作步骤如下:
在工作目录上点击鼠标右键,选择“SVN Update
在这里插入图片描述
说明:如果工作目录下有被修改的文件,或者有被删除的文件,并且还没有提交这些更改时,在执行 Update 命令时,这些文件不会被更新。如果想要放弃当前所有更改,并把本地我文件更新成 SVN 服务器上最新的版本,需要先执行“Revert”命令,放弃所有更改动作,然后再执行“Update”命令。

3.12. 获取特定的版本

有时候我们需要回溯到特定的日期或者是版本,查看当时的文件内容,这就需要使用SVNUpdate to revision 命令。在想要更新的文件或者目录上点击鼠标右键,在弹出的菜
单中选择“TortoiseSVN”->“Update to revision”

在这里插入图片描述
弹出如下 Update 对话框:
在这里插入图片描述
Update 对话框中,可以选择更新到最新版本(HEAD),也可以选择更新到特定的版本(Revision)。如果你记不起准确的版本号码,可能只隐约记得大概的时间,没有关系,点击“Show Log”按钮,就可以回顾历史了:

在这里插入图片描述
所有曾经做过的更改动作,及其日期与对应的版本都会列在此对话框中,选择所需的版
本,按下“OK”按,这个版本就自动填入到 Update 对话框的 Revision 中,在点击“OK”,你所选择的特定版本就会被取到你的工作目录下。

4. 常见问题

状况 1.报“403forbidden”错误

答:权限问题,表示你没有权限访问,请联系管理员,另外要检查输入路径大小写是否一致,SVN 区分大小写。

状况 2.400 bad request
答:一般都是杀毒软件导致的,请将 SVN 加入到你的可信区。

状况 3.No repository found
答:访问路径不对,请检查你访问的 URL 地址。

状况 4.405 Method not allowed
答:访问断口被封了。

状况 5.Out of date
答:表示版本库的内容比你提交的新,处理方式:先把版本库内容更新下来,然后用你本地的文件覆盖再提交。

状况 6. 提交失败,一个文件夹文字状态“阻碍”,提示“请执行"清理"动作”。
答: 产生这种状态的原因暂未知,可按以下解决方案:

解决方案:
1、备份出现叹号的文件夹
2、新建一个文件夹检出最新版本(无问题的版本)
3、用最新版本对应的文件夹中的.svn 文件夹,替换出现问题的文件夹中的.svn 文件夹,尤其注意要将出现问题的文件夹下的.svn 文件夹完全删除后再替换,以确定这个文件夹版本信息恢复到最新版本。
4、执行清理
5、提交成功

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

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

相关文章

Nginx详解 五:反向代理

文章目录 1. 正向代理和反向代理1.1 正向代理概述1.1.1 什么是正向代理1.1.2 正向代理的作用1.1.3 正向代理的基本格式 1.2 反向代理概述1.2.1 什么是反向代理1.2.2 反向代理可实现的功能1.2.3 反向代理的可用模块 2. 配置反向代理2.1 反向代理配置参数2.1.1 proxy_pass2.1.2 其…

华为云云耀云服务器L实例评测|老用户回归的初印象

华为云云耀云服务器L实例评测|老用户回归的初印象 前言一、新面孔1. 云耀云服务器2. 服务器特色 二、上手感官体验1. 性价比感受2. 推荐宝塔面板3. CloudShell登录4. 安全性 总结 前言 其实笔者接触华为云已经很久了,第一次使用的云服务器就是华为云。当…

C# 反射机制

图片来自:https://www.cnblogs.com/tangge/p/3440605.html

探索多态的本质【C++】

文章目录 多态的构成条件虚函数虚函数的重写(覆盖) 虚函数重写的两个例外C11 override和final区分重载、覆盖(重写)、隐藏(重定义)抽象类接口继承和实现继承多态的原理虚函数表 动态绑定和静态绑定动态绑定静态绑定 单继承中的虚函数表多继承中的虚函数表…

视频监控平台EasyCVR分组批量绑定/取消通道功能的后端代码设计逻辑介绍

视频监控平台/视频存储/视频分析平台EasyCVR基于云边端一体化管理,可支持视频实时监控、云端录像、云存储、磁盘阵列存储、回放与检索、智能告警、平台级联等功能。安防监控平台在线下场景中应用广泛,包括智慧工地、智慧工厂、智慧校园、智慧社区等等。 …

Ubuntu20.04同时安装ROS1和ROS2

Ubuntu20.04同时安装ROS1和ROS2 Excerpt 每版的Ubuntu系统版本都有与之对应ROS版本的,每一版ROS都有其对应版本的Ubuntu版本,不可随便装,ubuntu20.04对应ROS1 noetic和ROS2 foxy版本。_ros1和ros2共存 Ubuntu20.04同时安装ROS1和ROS2共存 文…

Vue+NodeJS+MongoDB实现邮箱验证注册、登录

一.主要内容 邮件发送用户注册用户信息存储到数据库用户登录密码加密JWT生成tokenCookie实现快速登录 在用户注册时,先发送邮件得到验证码.后端将验证进行缓存比对,如果验证码到期,比对不正确,拒绝登录;如果比对正确,将用户的信息进行加密存储到数据库. 用户登录时,先通过用…

[H5动画制作系列] Sprite及Text Demo

参考代码: sprite.js: var canvas, stage, container; canvas document.getElementById("mainView"); function init() {stage new createjs.Stage(canvas);createjs.Touch.enable(stage);var loader new createjs.LoadQueue(false);loader.addEventListener(&q…

Docker的开源容器镜像仓库Harbor安装

概述 Docker Hub是Docker官方提供的在线Docker镜像注册中心,其支持Docker镜像的查询(search)、提交(push)以及获取(pull)。目前,在云原生领域中,CNCF提供Harbor开源版本…

创建开机自启的脚本

在启动许多ros节点时有多种方式,我推荐使用launch来启动所有的节点,这也是一种规范的方式。以后会慢慢向这个方向靠。 除此之外还可以通过创建的脚本来启动: 脚本位置不限,只需要: sudo gedit xxx.sh在里面添加相应的…

UI设计师的发展前景是否超越了平面设计?

这是一个现代经济学的典型话题:应该跟随趋势追逐风口,还是坚守成熟的“夕阳产业” UI 设计行业发展短短不过 20 多年,但平面设计这个“夕阳产业”最早可以追溯到上世纪的二三十年代。显而易见的答案是,更新兴的 UI 设计师得到的好…

C语言_指针(1)

文章目录 前言一、指针数组1.1利用指针数组模拟出二维数组 二、数组指针2.1数组名是数组首元素的地址2.2 二维数组传参2.3 一级指针传参2.4 二级指针传参 三. 函数指针四 . typedef 重命名 前言 指针数组是由指针组成的数组。它的每个元素都是一个指针,可以指向任何…

java并发编程 ConcurrentLinkedQueue详解

文章目录 1 ConcurrentLinkedQueue是什么2 核心属性详解3 核心方法详解3.1 add(E e)3.2 offer(E e)3.3 poll()3.4 size()3.5 并发情况分析 4 总结 1 ConcurrentLinkedQueue是什么 ConcurrentLinkedQueue是一个无界的并发队列,和LinkedBlockingQueue相比&#xff0c…

对象临时中间状态的条件竞争覆盖

Portswigger练兵场之条件竞争 🦄条件竞争之对象临时中间状态的条件竞争 Lab: Partial construction race conditions🚀实验前置必要知识点 某些框架尝试通过使用某种形式的请求锁定来防止意外的数据损坏。例如,PHP 的本机会话处理程序模块…

【echarts】如何修改折线图X轴每个刻度的间隔宽度,让拥挤的空间变大,所有坐标点的文案可以显示得下,Echarts x轴文本内容太长的几种解决方案

Echarts 如何修改折线图X轴每个刻度的间隔宽度,让拥挤的空间变大,所有坐标点的文案可以显示得下,Echarts x轴文本内容太长的几种解决方案 有以下几种方案,堪称最全方案: 1、dataZoom进行坐标的比例缩放 通过调整dataZ…

uniapp 在 onLoad 事件中 this.$refs 娶不到的问题

现象 本人想在主页面加载的时候调用子组件的方法。示例代码如下: 运行,发现 this.$refs 取不到。如下图所示: 解决方法,把onLoad 换为 onReady 就可以了。

一笑的大型连续剧之第二集

开场白 各位小伙伴们大家晚上好,今天来和大家一起更新一下我的开发之旅的第二集。上周时间也已经匆匆过去了。今天也是周六晚上了,这个周末很充实但是又很空虚。 本周小结 本周完成了我开发旅途中的第一个模块,关于绩效面谈的一个模块的一…

亚马逊云科技与伊克罗德推出AI绘画解决方案——imAgine

在过去的数月中,亚马逊云科技已经推出了多篇介绍如何在亚马逊云科技上部署Stable Diffusion,或是如何结合Amazon SageMaker与Stable Diffusion进行模型训练和推理任务的内容。 为了帮助客户快速、安全地在亚马逊云科技上构建、部署和管理应用程序&#x…

Docker部署EMQX

1、简介 EMQ X (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器。 Erlang/OTP是出色的软实时 (Soft-Realtime)、低延时 (Low-Latency)、分布式 (Distributed)的语言平台。 MQTT 是轻量的 (Lightweight)、发布订阅模式 (Pu…

简明SQL条件查询指南:掌握WHERE实现数据筛选

条件查询是用于从数据库中根据特定条件筛选数据行的一种方式&#xff0c;它避免了检索整个表中的数据。通常&#xff0c;使用 WHERE 子句来定义过滤条件&#xff0c;只有符合这些条件的数据行才会被返回。 SQL中的运算符有&#xff1a;、!、<、> 等&#xff0c;用于进行…