博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
github前夜-版本控制(VersionControl)
阅读量:5039 次
发布时间:2019-06-12

本文共 1563 字,大约阅读时间需要 5 分钟。

(本文参考自《progit》一书)

头一次听说版本控制这个词的时候, 一头雾水, 什么是版本控制? 它是干什么用的?...

起初我理解的词面意思, 是不是对一个软件的版本的控制呢? 如VS2012, Photoshop CS5, QQ2012 beta...这一类的软件版本的控制问题呢?当然我的理解是错误的.

What is version control ?

在Pro Git一书中是这样说的:"Version control is a system that records changes to a file or set of files over time so that you can recall specific versions later."

这时候就有了一个大概的概念,版本控制是用来记录若干文件内容的变化,方便我们回到之前特定的某个状态.(当然版本控制的功能远比这些要复杂的多)

我们可以想到这很类似于我们平时为了防止某个文件被修改后无法找回, 做的最多的是备份这个文件.

版本控制用来做什么的呢?

说白点, 就是历史记录, 可以让你项目之前的状态, 可以清楚的看到整个项目所有内容每次的变更情况.

同时他也能协调不同开发人员之间的协作.

一个简单的例子, 现在假如有2个人A,B.他们同时对一个服务器上的项目PROJ进行开发.A从服务器上下载了项目的最新内容PROJ, B也从服务器上下载了PROJ, 他们同时在自己的计算机上对PROJ进行修改.

A先完成了修改, 并将自己的修改提交到了服务器上,这时服务器上的项目版本是PROJ_A.

B后完成了对PROJ的修改, B在提交的时候, 在版本控制系统下, 就会出错, 因为现在服务器上的版本是PROJ_A, 而他的修改基础是PROJ, 所以他就要从服务器上获取最新的版本PROJ_A, 并且B要能够知道A具体对PROJ进行了哪些修改, 以便将自己的修改内容合并到PROJ_A中, 而A对PROJ的修改, 都会被版本控制系统记录下来, 这时B可以很方便的将自己修改的内容合并到就新的PROJ_A中去, 形成PROJ_AB, 并提交服务器.

有一天B不小心把项目编辑错乱了,并提交到了服务器,这时可以通过版本控制系统很方便的恢复到B提交之前的版本.版本控制可以清晰地记录每一次,每一位开发者对项目进行的修改.方便管理员查看项目进度.

github是分布式版本控制系统,那什么又是分布式的版本控制系统(Distributed Version Control System)呢?

先说说集中式的版本控制系统(Centralized Version Control System), 前面说2个人A, B, 对服务器上的版本进行修改, 就是集中式的版本控制, 这种控制, 需要一台服务器(Central VCS Server), 所有的记录都在服务器上, 开发人员从服务器上下载最新的内容进行修改并提交到服务器.但是如果服务器发生错误, 那整个项目的所有历史记录都将不复存在.

于是分布式的版本控制问世了, 每个开发者从服务器下载的项目中,不仅包含了项目本身,还把所有的项目历史全拷贝了下来, 这样服务器出错后,任何一个开发者所从服务器上拷贝下来的项目, 都能使项目恢复到之前状态.

有点像异地备份的意思, 地区A发生了天灾, 但是在地区B有他的备份, 分布式也有点这个意思, 一旦服务器出了故障, 任何一个客户都可以把自己本地的项目重新上传至服务器,使项目恢复之前状态.

这些大概就是版本控制的入门了.因本人能力有限。

转载于:https://www.cnblogs.com/rookie2/archive/2012/10/26/2740047.html

你可能感兴趣的文章
多变量微积分笔记24——空间线积分
查看>>
Magento CE使用Redis的配置过程
查看>>
poi操作oracle数据库导出excel文件
查看>>
(转)Intent的基本使用方法总结
查看>>
Mac 下的Chrome 按什么快捷键调出页面调试工具
查看>>
Windows Phone开发(24):启动器与选择器之发送短信
查看>>
JS截取字符串常用方法
查看>>
Google非官方的Text To Speech和Speech Recognition的API
查看>>
stdext - A C++ STL Extensions Libary
查看>>
Django 内建 中间件组件
查看>>
bootstrap-Table服务端分页,获取到的数据怎么再页面的表格里显示
查看>>
进程间通信系列 之 socket套接字及其实例
查看>>
天气预报插件
查看>>
Unity 游戏框架搭建 (十三) 无需继承的单例的模板
查看>>
模块与包
查看>>
mysql忘记root密码
查看>>
apache服务器中设置目录不可访问
查看>>
嵌入式Linux驱动学习之路(十)字符设备驱动-my_led
查看>>
【NOIP模拟】密码
查看>>
java容器---------手工实现Linkedlist 链表
查看>>