翻译: margiex


第一章:基础

A tale of two trees

开始之前先讲解一下基本的术语和操作. 一个是存储区,一个是工作目录.

一个SCM工具提供一个存放源代码的地方,我们称之为"存储区",一般存放在服务器上,并共享给当前团队的所有成员.

每个开发人员都有自己的工作目录,一般存放在工作的机器上,并通过一个客户端程序访问.

所有内容都基于目录层次结构,存储区中的一个文件主要根据其路径来定义描述,就象普通的文件系统中一样。在Vault和SourceSafe中,存放路径必须$开头,如:

$/trunk/src/myLibrary/hello.cs

一个开发人员的基本工作流程看起来应该是这样:

  • 拷贝存储区内的内容到当前工作目录;
  • 在当前工作目录内修改代码;
  • 更新这些变更到存储区;
  • 重复以上步骤.

在此省略了会议、休假之类的事,不过对于一个开发人员而言,使用SCM工具就只有上面那些步骤了。存储区用于保存所有完成的工作。如果存储区内没有一项任务的交付物,则不认为这项工作已经完成。

让我们考虑一下没有工作目录和共享存储区的情况,如果是一个独立的开发人员,则是可以接受的,针对多人的开发小组,则情况会很混乱。

我曾看见有人尝试过。代码存放在一台文件服务器上,每个人都通过windows共享修改代码,当某个人想修改main.cpp时,他们会大声问是否其它人在使用此文件.网络带宽大部分消耗编译代码上,当我向他们推销我的产品时,我感觉就象一个ER医生(译者注:ER Doctor)。那天晚上回到家里,我真的很高兴,因为我知道我又救了一条"生命".

最佳实践:不要破坏版本树

当存储区被破坏之后,工作目录的好处几乎都失去了.任何时候,存储区应该处于一种让任何成员可以继续工作的状态.如果某个成员签入的代码不能编译或测试通不过,所有成员的工作都受到了影响.

许多团队对破坏者都有相应的"惩罚",并非是很严厉的处罚,需要象征性的提醒其它成员注意.如罚款1美元(积少成多,以后可以做团队费用).另一种惩罚就是让他做公益劳动,只是让他感到不好意思,而不是真的惩罚.

一旦有了SCM工具,多人团队就简单多了.每个开发人员有自己的私有目录,他可以在自己目录里做修改而不用影响他人.

注意:并不是所有SCM工具都与这里使用的术语相同.许多系统使用"目录",而不是"文件夹".VSS使用"数据库",而不是"存储区".In the context of Vault, these two words have a different meaning.   Vault allows multiple repositories to exist within a single SQL database.  For this reason, I use the word "database" only when I am referring to the SQL database. (这段文字为该产品的说明,不作翻译.)

入 和 出

存储库一般存放在专门的服务器上,而与开发人员的工作目录"远远"分离.之所以说"远",是因为可能相隔几寸,或远在几千公里之外.物理距离其实没什么意义.一般SCM工具提供通过TCP/IP在客户端和服务器之间交流的手段,无论是以太网还是互联网.

由于工作目录和存储区的分开,SCM工具中大多的特征就是帮助开发人员在两者之间来回传送数据,一般有如下操作:

Add:  存储区开始时一般是空的,因此我们需要往里面添加东西,在Vault中使用"添加文件"你可以将本地的文件或目录添加到存储区中;

Get:  当我们从存储区拷贝内容到工作时,这个操作就叫"Get",要注意的是这个操作主要针对我们不打算修改的文件,这些文件在我们的工作目录是只读状态;

Checkout:  当我们想取得文件并编辑时,这个操作就叫"签出".这些文件在我们工作目录中会被标记为可读,而SCM服务器会记录我们的签出点;

Checkin:  当我们修改之后要保存到存储区时,我们就使用"签入"操作.本地目录的文件又会被标记为只读,而SCM服务器就会更新存储的内容到新的版本.

上面这些定义只是很简单的初级定义,只是针对SourceSafe或Vault的操作的缺省描述.而后面谈到的工作如CVS会略有不同,当然Vault也可配置为与CVS相同的工作方式.

术语的区别:有些SCM工具可能在字词上有所不同.Vault和SourceSafe使用"checkout"表明要编辑一个文件,而CVS则使用"checkout"得到文件,无论你打算编辑与否.有些SCM工具使用"commit"表示签入,而不是"checkin".事实上,这些术语在Vault中都会使用,在后面的章节中有介绍.

H.G. Wells would be proud

你的存储区并不仅仅是你当前代码版本的一个集合.事实上,它是代码的各个版本的集合.存储区中包含有扬有修改历史,保存了每个文件的所有变更版本号,因此,版本控制看起来就象是一部时间机器.

回退到软件的某一个时间点对一个项目而言是非常有用的,假如我们需要取得代码在2005-9-8的一份拷贝,使用SCM工具是非常容易做到的.

一种更常见的情况是当一段代码看起来有点奇怪,其它人都不易理解的时候,可以回溯这段代码的历史,了解修改的人和时间,及相关变更描述来了解修改的原因.

随着时间的推移,存储区会变得非常庞大和臃肿,因此SCM工具提供了相应的解决机制.在Vault中,提供历史浏览器查看以前的内容,可以搜索和排序.

也许对一个SCM工具而言,最重要的是使用标签.一个标签用于在一个特定时间上对存储内容设置一个有意义的名称,而且可以在以后很容易的根据标签取得当时的所有内容的一个快照.

接下来

本章简单的介绍了一下SCM工具能做什么,主要好处有两点:

  • 工作目录给开发人员提供了私有的空间;
  • 存储区的历史记录保存了每次所做的变更和原因.

下一章主要讲述checkin.

原文出处:http://software.ericsink.com/scm/scm_basics.html


转载于:https://www.cnblogs.com/margiex/archive/2005/09/08/232644.html

版本控制系统(译文) 2 - 基础相关推荐

  1. g4e基础篇#2 Git分布式版本控制系统的优势

    1. 基础篇: 为什么要使用版本控制系统 Git 分布式版本控制系统的优势 Git 安装和设置 初始化Git存储库(Repo) 起步 1 – 创建分支和保存代码 起步 2 – 了解Git历史记录 起步 ...

  2. g4e基础篇#1 为什么要使用版本控制系统

    本篇是Git企业开发者教程基础篇的第一篇 1. 基础篇: 为什么要使用版本控制系统 Git 分布式版本控制系统的优势 Git 安装和设置 初始化Git存储库(Repo) 起步 1 – 创建分支和保存代 ...

  3. Git基础 1 ---- 版本控制系统的介绍

    1 Git 1 版本控制系统 vcs - version control system 2 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统 3 版本控制系统的主要功能 1 ...

  4. 分布式版本控制系统Git——使用GitStack+TortoiseGit 图形界面搭建Git环境(服务器端及客户端)(转)...

    近期想改公司内部的源码管控从TFS为git,发现yubinfeng大侠有关git的超详细大作,现将其转载并记录下,以防忘记,其原博客中有更加详细的git及.net开发相关内容.原文地址:http:// ...

  5. 在Eclipse 2.0中使用版本控制系统CVS

    董向辉 (xianghui.dong@mail.ia.ac.cn) 2002 年 7 月 2002年6月28日,Eclipse 2.0正式版已经正式完成,这将是Java开发工具历史上的一个重要事件,E ...

  6. python开放源代码的版本控制系统_几款版本控制工具SVN、GIT、CVS及Mercurial的比较...

    版本管理 RCS,cvs,svn,git 比较 1,RCS(Revision Control System) 修订控制系统 特点 : 1), 简单 2), 使用 Lock 机制防止多个开发人员对同一个 ...

  7. GIT (分布式版本控制系统)

    Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. [1] Git的读音为/gɪt/. Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版 ...

  8. Git分布式版本控制系统简介和使用

    Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.[1] Git的读音为/gɪt/. Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本 ...

  9. 【分布式版本控制系统】GIT 托管网站 客户端

    上传到远程库 第一次上传 git add . git commit -m"备注信息" 之后上传 git add . git commit -m"备注信息" gi ...

最新文章

  1. Deploying Windows Mobile 6 with Exchange Server 2007 白皮书
  2. 【PAT乙级】1063 计算谱半径 (20 分)
  3. QT的QSGGeometryNode类的使用
  4. ***某知名网络安全公司
  5. 选型java程序_Java程序员自动化指南
  6. Vue事件处理_vue的事件处理超级方便_功能强大---vue工作笔记0011
  7. 基于R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习
  8. 游戏资源提取工具RPGViewer图像一致转换工具
  9. pythonweb数据可视化_基于Python实现交互式数据可视化的工具(用于Web)
  10. Flink reduce详解
  11. linux下codelite使用教程,codelite 在 ubuntu linux 中的安装和使用
  12. NTL库在Win上基于MinGW的安装
  13. linux yum安装svn版本号,CentOS7 yum安装svn服务
  14. cv2.error: OpenCV(4.5.2) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-1y7gm6kn\opencv\modul
  15. Kindeditor 图片粘贴上传后设置图片属性
  16. 计算机中丢失safeengine.dll,safeengine.dll
  17. vue3小兔鲜商城项目学习笔记+资料分享06
  18. c语言程序设计植树,c语言程序设计报告
  19. Jupyter Lab 密码登录、远程访问
  20. 法国经济发展状况概述

热门文章

  1. 未来的GDI:WPF技术纵览[zz]
  2. 《网管员必读——网络组建》(第2版)导读
  3. 手动安装Linux网卡驱动程序
  4. 投票选择eclipse.org的新界面
  5. 电脑护眼设置_解锁办公新技能 海信护眼平板Q5玩转工作无负担-科技频道
  6. 负压电路_通风设备之负压风机的工作原理与安装方法是怎样的?
  7. numpy找到最大值坐标_学习OpenCV convexhull并用numpy实现
  8. python udp通信_Python实现UDP程序通信过程图解
  9. RIDE在linux系统下运行,在linux上执行robotframework用例
  10. 数据科学入门与实战:玩转pandas之七数据分箱技术,分组技术,聚合技术