当前位置:网站首页>MIT 6.031 Reading5 : Version Control学习心得
MIT 6.031 Reading5 : Version Control学习心得
2022-06-23 12:56:00 【静静子*】
目录
版本控制系统介绍
版本控制系统(Version Control System):是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。版本控制系统不仅可以应用于软件源代码的文本文件,而且可以对任何类型的文件进行版本控制。用的比较多的如svn,git等。
如果你是位图形或网页设计师,可能会需要保存某一幅图片或页面布局文件的所有修订版本(这或许是你非常渴望拥有的功能),采用版本控制系统(VCS)是个明智的选择。 有了它你就可以将选定的文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。 使用版本控制系统通常还意味着,就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子,但额外增加的工作量却微乎其微。
版本控制系统的类型
1. 本地版本控制系统
许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。 这么做唯一的好处就是简单,但是特别容易犯错。 有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。
为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。

本地版本控制系统是一个本地数据库,位于本地计算机中,其中每个文件更改都存储为补丁。它的工作原理是在硬盘上保存补丁集,通过应用所有的补丁,可以重新计算出各个版本的文件内容。
该系统的主要问题是所有数据都存储在本地,因为如果此本地数据库发生任何事情,您将丢失所有补丁。此外,如果任何内容影响了文件的一个版本,则以后的任何更改都将丢失。
使用本地版本控制系统进行协作特别困难,几乎是不可能的。
2. 集中式版本控制系统
接下来人们又遇到一个问题,如何让在不同系统上的开发者协同工作? 于是,集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。 这类系统,诸如 CVS、Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。 多年以来,这已成为版本控制系统的标准做法。
这种做法带来了许多好处,特别是相较于老式的本地 VCS 来说。 现在,每个人都可以在一定程度上看到项目中的其他人正在做些什么。 而管理员也可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。
但与本地VCS的情况一样,如果您的中央数据库损坏并且备份未保留,则整个项目历史记录将丢失。您唯一能够恢复的是人们仍然在本地计算机上拥有的快照。
3. 分布式版本控制系统
于是分布式版本控制系统(Distributed Version Control System,简称 DVCS)面世了。 在这类系统中,像Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像下来,包括完整的历史记录。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
分布式版本控制系统弥补了前面两种版本控制系统的缺陷,成为了版本控制的首选方案。其代表就是Git。
版本控制术语
- Repository(存储库):我们项目中版本的本地或远程存储
- Working copy(工作副本):我们可以处理的项目的本地可编辑副本
- File(文件):我们项目中的单个文件
- Version or revision(版本或修订):我们项目内容在某个时间点的记录
- Change or diff(更改或差异):两个版本之间的差异
- Head(头):当前版本
版本控制系统的功能
- Reliable(可靠):只要我们需要它们,就保留版本;允许备份
- Multiple files(多个文件):跟踪项目的版本,而不是单个文件
- Meaningful versions(有意义的版本):有哪些更改,为什么要进行更改?
- Revert(还原):全部或部分还原旧版本
- Compare versions(比较版本)
- Review history(查看历史记录):针对整个项目或单个文件
- Not just for code(不仅仅是代码):散文,图像等
- Merge(合并):合并与常见先前版本不同的版本
- Track responsibility(跟踪责任):谁进行了更改,谁触及了该行代码?
- Work in parallel(并行工作):允许一个程序员自己工作一段时间(不放弃版本控制)
- Work-in-progress(正在进行的工作):允许多个程序员共享未完成的工作(不中断其他人,不放弃版本控制)
Git简介
Git和其他版本控制系统的主要差别在于:
Git只关心文件数据的整体是否发生了变化,而多数的其他系统则只关心文件内容的具体差异,它们在每个版本中记录着各个文件的具体差异。在Git中的绝大多数操作都只需要访问本地文件和资源,不需要联网。这是因为Git在本地磁盘上就保留着所有当前项目的历史更新,所以处理起来速度飞快,这是使用空间换时间的处理方式。使用Git,即使在没有网络或VPN的情况下,你同样可以非常愉快的频繁提交更新,等到有了网络的时候再提交到远程的仓库。
边栏推荐
- [deeply understand tcapulusdb technology] transaction execution of document acceptance
- R语言dplyr包arrange函数排序dataframe数据、通过多个数据列排序dataframe数据(默认是升序排序)
- Hanyuan hi tech 8-way telephone +1-way 100M Ethernet RJ11 telephone optical transceiver 8-way PCM telephone optical transceiver
- 4-way telephone +1-way Gigabit Ethernet 4-way PCM telephone optical transceiver
- 你管这破玩意儿叫 MQ?
- Wallys/DR6018-S/ 802.11AX MU-MIMO OFDMA / 2* GE PORTS/WIFI 6e / BAND DUAL CONCURRENT
- 那些技术实战中的架构设计方法
- Can cold plate, submerged and spray liquid cooling lead the development of high-performance computing?
- 华三交换机配置SSH远程登录
- Loss, duplication and backlog of message queues
猜你喜欢

LM05丨曾经的VIX(二代产品)

Generics, generic defects and application scenarios that 90% of people do not understand

Hanyuan high tech USB2.0 optical transceiver USB2.0 optical fiber extender USB2.0 optical fiber transmitter USB2.0 interface to optical fiber

Cloud native essay deep understanding of ingress

MySQL使用ReplicationConnection導致的連接失效分析與解决

怎么手写vite插件

Digraph D and e

华三交换机配置SSH远程登录

windows 安装 MySQL

在線文本過濾小於指定長度工具
随机推荐
有向图D和E
Tt-slam: dense monocular slam for flat environment (IEEE 2021)
Technology sharing | wvp+zlmediakit realizes streaming playback of camera gb28181
sed -i命令怎么使用
"Four highs" of data midrange stability | startdt Tech Lab 18
Js: get the maximum zindex (Z-index) value of the page
The GLM function of R language uses frequency data to build a binary logistic regression model. The input data for analysis is frequency data, which is transformed into normal sample data (split and s
20 years' Shanghai station D question Walker (two points, concise)
Have you ever encountered incompatibility between flink1.15.0 and Flink CDC MySQL 2.2.1? f
ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked.
LM05丨曾经的VIX(二代产品)
Esp32-c3 introductory tutorial problems ⑧ - blufi_ example. c:244: undefined reference to `esp_ ble_ gap_ start_ advertising
In flinksql, the Kafka flow table and MySQL latitude flow table are left joined, and the association is made according to I'd. false
4k-hdmi optical transceiver 1 channel [email protected] Hdmi2.0 optical transceiver HDMI HD video optical transceiver
美国的国家公园概览
R语言dplyr包arrange函数排序dataframe数据、通过多个数据列排序dataframe数据(默认是升序排序)
TUIKit 音视频低代码解决方案导航页
R语言glm函数使用频数数据构建二分类logistic回归模型,分析的输入数据为频数数据、将频数数据转化为正常样本数据(拆分、裂变为每个频数对应的样本个数)
C file download method
UI framework