管理信息系统概述,系统基础 对于体系结构、模型和示例的概述

如果您有疑问或建议,请进入技术讨论区交流 >>>
系统基础 对于体系结构、模型和示例的概述,什么是软件配置维护?在学校学习的首要工具中,通常不会 包含 SCM。软件(或资源)控制,正如其名字所暗示的那样,是一种工具和一种有关的流程,而这种流程被用于维护源代码及其演进。SCM 提供的首要功用如下:
在存储库(repository)中维护一个文件。
在存储库中维护文件的修订。
检测源修改抵触并为多个开发人员的环境提供兼并。
跟踪变卦的发起方。
为了完成一致、可反复的构建提供文件(有关修订)的配置维护。
SCM 的适用性
资源控制 首要是指源代码和有关文件的控制,而资源维护 则可使用于任何类型的资源。包含超文本标志言语(HTML)和二进制图像文件、普通文本文档或其他任何文件的 Web 站点是 SCM 系统举行修订控制的对象。
所以,SCM 准许您控制存储库中的一组文件并跟踪这些文件的修订。其他开发人员修改了存储库中的这些文件后,SCM 会标识出这些变卦与您所做的变卦之间存在的抵触,然后自动将其兼并或通知您存在抵触。这个功用十分首要,由于它准许多个开发人员修正同一组文件。SCM 还能跟踪出谁做了何种变卦。SCM 还准许您将文件按逻辑划分为有关的文件组,比如组成软件图像或可执行文件的源文件。 
SCM 的术语
在深化揣摩 SCM 体系构造的类型和详细之前,先要熟识一下术语的意思。存储库 是文件存储和维护的中心位置(有时又被称为树)。从存储库中取出文件放到本地系统的任务文件夹的流程被称作签出。假设变卦了本地文件而又想同步变卦存储库,就须要执行更新。假设要将变卦后的文件签入到存储库,就需执行提交。假设所变卦的文件先前曾经被变卦并已由他人提交,则会发作兼并,标明两组变卦集将会被兼并在一同。若由于变卦抵触的原由不能兼并时,则必已发作了抵触。在此情况下,提交被拒绝,并要求开发人员手工兼并变卦。当提交了变卦之后,就会创立此文件的一个新的修订。 
一个或多个开发人员能够对主树(存储库的现在头)或位于主树旁的单个的分支举行操作。这就让开发人员能够操作分支而不会影响到主树。当分支固定后,再将分支与主树举行兼并。
要标志源树演进流程中的首要阶段,能够对一组文件修订使用标签。这会将这组文件组合成一个有用的集合(有时会用作针关于唯一构建的文件的一个揭晓)。体系构造
各种 SCM 间有许多的差异,其中有两种最根本的区别很值得揣摩:
集中式存储库与散布式存储库
变卦集模型与快照模型
集中式存储库与散布式存储库
当今 SCM 体系构造的最为首要的差异之一是存储库是集中式的仍旧散布式(分散的)。现在最为罕见的体系构造是集中式存储库。这个星型 体系构造由中心的源存储库和任务于这个存储库的多个开发人员组成(参见图 1)。开发人员从中心存储库签出源代码到本地的沙箱内,举行变卦后,将它提交回中心存储库。其他开发人员就能够再访问这些变卦。
如果您有疑问或建议,请进入技术讨论区交流 >>>
图 1. 在集中式体系构造中,一切开发人员都议决同一个中心存储库举行任务
Linux管理信息系统概述,系统基础 对于体系结构、模型和示例的概述
中心存储库也可以够创立分支,准许多个开发人员协作于针对位于存储库(但必需在 mainline 或 tip 之外)的资源的一组变卦。
散布式体系构造则准许开发人员为其变卦创立其自己本地的存储库。本地开发人员的存储库与原始的存储库(已被散布)很类似。首要的区别是:在集中化的方式中,变卦是在沙箱内完成的,而在散布式办法中则准许开发人员任务于别离的存储库。开发人员举行变卦、提交变卦到其本地的存储库,之后,在不影响主干的前提下,与其他开发人员的变卦兼并。这样,本地开发人员就使得变卦集对上线(upline)开发人员可用(参见图 2)。
图 2. 在分散体系构造中,开发人员议决其各自的存储库员同步任务
LinuxLinux管理信息系统概述,系统基础 对于体系结构、模型和示例的概述
检查原图(大图)
分散体系构造很有意思,由于它准许不一样的开发人员在对等网络内同步任务。当任务预备好(最好是固定)后,开发人员能够分发变卦集(或修补)以使他人也可以够运用这些特征。这是当今许多开源系统的模型,包含 Linux® 内核。
变卦集模型与快照模型
曾经的和当今的 SCM 的体系构造的另一个幽默的区别是 delta 变卦的存储方式。它们实际上是类似的,且发生的后果也类似,但在修订的存储方式上二者却大不类似。如果您有疑问或建议,请进入技术讨论区交流 >>>
在快照模型中,整个存储库的每个修订(带优化以降低树的大小)的所有文件都被存储。而在变卦集模型中,只需 delta 被存储于修订之间,这样就创立了一个精简的存储库(参见图 3)。
图 3. 快照模型和变卦集模型各有所长
LinuxLinuxLinux管理信息系统概述,系统基础 对于体系结构、模型和示例的概述
从图 3 能够看出,模型不一样但后果却类似。在快照模型中,能够高速获得修订,但须要更多的空间来存储它们。而变卦集模型须要的空间少,但须要更多时间来获得某个修订,原由是 delta 必需使用于根本修订。在本文后面的局部将引见如何树立优化来最小化必需要使用的 delta 的数目。
示例 SCM
让我们来看一下按体系构造(集中或散布)划分的一些 SCM。您很快就会看到,其中一些 SCM 支持两种模型。
CVS
并发版本系统(Concurrent Versions System,CVS)是当今最为常用的 SCM。它是一种集中式的处置方案,采用了快照模型,开发人员运用集中式的存储库来举行软件的协作开发。CVS 十分罕见并且是 Linux 揭晓版的一局部。其容易和简约的语法(对大非少数人而言)使其快速成为了多个或单个开发人员 SCM 的一种理想挑选。
清单 1 给出了一组 CVS 命令示例和冗长的有关描画。
清单 1. CVS 命令示例
# Create a new repository 
cvs -d /home/user/new_repository init 
# Connect to the central repository 
export CVSROOT=:pserver:[email protected]:/cvs_root 
# Check out a sandbox for module project from the central repository 
cvs checkout project 
# Update a local sandbox from the central repository 
cvs update 
# Check in changes from the local sandbox to the central repository 
cvs commit 
# Add new files to the local sandbox (need to be committed) 
cvs add <file/subDirectory> 
# Show changes made in the local sandbox 
cvs diff 关于喜好用指向-单击方式操作的用户,CVS 提供了许多开源的图形化前端以供运用,包含 WinCVS 和 TortoiseCVS(集成了 Microsoft® Windows Explorer)。
虽然 CVS 被普遍采用,但它仍然有一些缺乏之处。CVS 不准许重命名文件,并且对一些特殊文件(如 symlink)的支持不是很好。变卦能够按文件跟踪,而非按变卦本身,这点十分讨厌。兼并有时也会出现疑问(CVS 内部会为此运用 diff3)。
如果您有疑问或建议,请进入技术讨论区交流 >>>
CVS 总体而言仍旧很有用的,能够完成其须要完成的职务,并且一切主流的平台都支持 CVS。假设喜好用 CVS 而又想逃避其缺陷,则能够思索运用 Subversion。
Subversion
Subversion(SVN)是为了替代 CVS 而设计的,消弭了 CVS 原有的疑问和缺陷。与 CVS 一样,Subversion 也是一种集中化的处置方案,采用的是快照模型。它的命令也模拟了 CVS 的,但添加了一些对诸如删除文件、重命名文件或恢复为原始文件等的处置功用。
Subversion 还准许远程访问,能够采用许多协议,比如超文本传输协议 (HTTP)、安全 HTTP或定制的 SVN 协议,此协议还支持议决 Secure Shell (SSH)的隧道技术。
清单 2 给出了 Subversion 所支持的一些命令及 CVS 中所没有的一些扩展。很清楚,Subversion 的命令集和 CVS 的很类似,这使它极受 CVS 用户的迎接。
清单 2. Subversion 的命令示例
# Create a new repository
svnadmin create /home/user/new_repository
# Check out a sandbox from the central repository
svn checkout file:///server/svn/existing_repository new_repository
# Update a local sandbox from the central repository
svn update
# Check in changes from the local sandbox to the central repository
svn commit
# Add new files to the local sandbox (need to be committed)
svn add <file/subDirectory>
# Show changes made in the local sandbox
svn diff
# Rename a file in the local sandbox (requires commit to the repository)
svn rename <old_file> <new_file>
# Remove files (also removed from repository, requires commit)
svn delete <file/subdirectory>  
与 CVS 一样,Subversion 集成了一些图形化的前端如 ViewCVS 和 TortoiseSVN。另外也有一些工具能够把 CVS 存储库转化为 Subversion(比如 cvs2svn.py),但这些工具并不能处置庞杂版本的分支和标志。和许多开源项目一样,随着时间的推移,这种情况会有所改动。Subversion 还集成了 TortoiseMerge 作为一个单独的检查器和修补顺序。
Subversion 处置了许多让 CVS 用户困扰的疑问,比如特殊文件的版本化和自动的提交和签出。假设您喜好用 CVS 和集中式存储库的方式,那么 Subversion 就是您所需的 SCM。如果您有疑问或建议,请进入技术讨论区交流 >>>
如今让我们先放下对集中方式的探讨,看看被人们视为 SCM 未来的协作式分散存储库。
Arch
Arch 是分散 SCM 的规范,它提供许多不一样的完成,包含 ArX、Bazaar、GNU arch 和 Larch。Arch 不只好够作为一种分散 SCM 运作,如 图 2 所示,还可运用变卦集模型(参见 图 3)。 Arch SCM 是开源开发的一种很盛行的办法,由于开发人员可在单独的存储库上举行开发,同时又能够控制所有资源。这是由于散布式存储库就是具有修订控制的实践存储库。能够在本地存储库使用变卦创立一个修补来供下段的开发人员运用。这就是分散模型的真实的强势所在。
与 Subversion 类似,Arch 处置了 CVS 中所存在的许多疑问,包含元数据的变卦,比如修订文件容许、处置文件删除和重命名以及自动的签入(将签入组在一同而非作为单独的文件)。
清单 3 中显示了 Arch SCM 中的一些罕见命令,还给出了 GNU arch,由于它是由 Arch 的设计者 Tom Lord 开发的。GNU arch 提供了 SCM 应有的一些根本功用,包含 Subversion 中的一些新特征。
清单 3. GNU arch (tla) 的命令示例
# Register a public archive
tla register-archive http://www.mtjones.com/arch
# Check out a local repository from the upstream repository
tla get [email protected]/project--stable myproject
# Update from the local repository
tla update
# Check in changes to the local repository
tla commit
# Add new files to the local repository (need to be committed)
tla add <file>
# Show changes made in the local repository (patch format)
tla what-changed
# Rename a file in the local repository (requires commit to the repository)
tla mv <old_file> <new_file>
# Remove files (also removed from repository, requires commit)
tla rm <file> 
Arch 还准许用 star-merge 兼并来自下段存储库的变卦。为了最小化必需使用到根本修订的修补的数目(依据变卦集模型), cacherev 命令将会在存储库中创立根本修订的一个新的快照。 
创立根本修订的一个新快照 
Arch 的优势之一是虽然它是为分散操作所设计的,但也可以够用于集中存储库范例。
tla 用户对其不满之处是它太过庞杂。其他的 Arch 完成,比如 baz 则十分容易。假设 tla 不能满足要求,能够尝试运用后者。
如果您有疑问或建议,请进入技术讨论区交流 >>>
如今让我们来看一下结尾一个分散式的 SCM,它由 Linux 内核的维护者 Linus Torvalds 自己编写。
Git
Git SCM 由 Linus Torvalds 开发,用来替代 Bitkeeper SCM。 它十分容易,是一种分散式的基于变卦集的 SCM 且用作 Linux 内核的 SCM。它运用文件组模型而非跟踪单个的文件。运用 SHA1 紧缩并混编变卦集以验证其完壁性(参见清单 4)。 
清单 4. Git 的命令示例
# Get a Git repository (first time)
git clone \
 rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git \
 linux-2.6
rsync -a \
 --progress rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git/ \
 .git/
# Update a Git repository from the defined upstream Git repository
git pull rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
# Checkout from the Git repository into the local working repository
git checkout
# Update from the local Git repositor3
git-update-cache
# Commit changes to the local Git repository
git commit
# Add new files to the local repository
git-update-cache --add <file>
# Show changes made to the local working Directory
git diff
# Remove files (requires commit)
git-update-cache --remove <file> Git SCM 在其自己的 Git 存储库内是自托管的,这意味着您必需引导 Git 来将其装置到本机。Git 的命令集与您到当前为止看到的那些命令十分类似,并且绝对容易。如果您有疑问或建议,请进入技术讨论区交流 >>>
您能够会问:“为啥不运用现有的 SCM 中的一种呢?” 问得很好。 Git 十分幽默,吸引着许多 Linux 内核黑客,所以它很能够成为下一个主流的 SCM。Linus 将 Git 描画为一个高速的目录内容维护器,虽然它所做的任务不多但完成得十分高效。 
收益
无论您运用何种 SCM,都会获得一些普遍的收益。运用 SCM,能够跟踪文件中的变卦来判别变卦对软件的影响水平。当发作不正确的变卦时,能够发觉这些变卦并将它们恢复回原始资源中。能够组合文件修订集并标志它们来打造揭晓,而揭晓又能够在任何时间签出以供反复构建代码的特定揭晓(SCM 的要求)。
不论运用集中式存储库仍旧散布式存储库,运用快照模型仍旧变卦集模型,所带来的收益都是类似的。由于任何当今软件开发项目都必需要有 SCM,所以越早越多地运用它们就会得到益处越多。
前景展望
本文只探讨了如今最为常用的 SCM 的一些最根本的知识。尚有许多其他的开源 SCM 能够运用,比如 Aegis、Bazaar-NG、DARCS 和 Monotone。当然,SCM 也惹起了一些争论,而这些争论通常很难有正确的答案。假设运用一种工具后效率极高,那就运用这种工具吧!SCM 大多时分都用在团队开发的情况下,而很少用于孤立的个体开发的环境中(除非您是个独断专行的老板,喜好自己做一切决议)。所以,您尽能够尝试一切的能够性来熟识一些不一样的作风。SCM 是软件开发中的必需工具,也是您的开发工具箱中的必备局部。 
Tags:  gsm系统概述 安防系统概述 电力系统概述 管理信息系统概述

延伸阅读

最新评论

发表评论