每天一Git之起步 - 关于版本控制

本文章为git官方文档摘抄,请访问https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%85%B3%E4%BA%8E%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6官网Docs进行学习和理解!

本章为 Git 入门。 我们从介绍版本控制工具的背景知识开始,然后讲解如何在你的系统上运行 Git,最后是关于如何设置 Git 以便开始工作。 通过本章的学习,你应该能了解为什么 Git 这么流行,为什么你应该使用 Git 以及你应该如何设置以便使用 Git。

关于版本控制

什么是“版本控制”?我为什么要关心它呢? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 在本书所展示的例子中,我们对保存着软件源代码的文件作版本控制,但实际上,你可以对任何类型的文件进行版本控制。

如果你是位图形或网页设计师,可能会需要保存某一幅图片或页面布局文件的所有修订版本(这或许是你非常渴望拥有的功能),采用版本控制系统(VCS)是个明智的选择。 有了它你就可以将选定的文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。 使用版本控制系统通常还意味着,就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。 但额外增加的工作量却微乎其微。

本地版本控制系统

许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。 这么做唯一的好处就是简单,但是特别容易犯错。 有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。

为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。

Figure 1. 本地版本控制.

其中最流行的一种叫做 RCS,现今许多计算机系统上都还看得到它的踪影。 RCS 的工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。

集中化的版本控制系统

接下来人们又遇到一个问题,如何让在不同系统上的开发者协同工作? 于是,集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。 这类系统,诸如 CVS、Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。 多年以来,这已成为版本控制系统的标准做法。

Figure 2. 集中化的版本控制.

这种做法带来了许多好处,特别是相较于老式的本地 VCS 来说。 现在,每个人都可以在一定程度上看到项目中的其他人正在做些什么。 而管理员也可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。

事分两面,有好有坏。 这么做最显而易见的缺点是中央服务器的单点故障。 如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。 如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。 本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。

分布式版本控制系统

于是分布式版本控制系统(Distributed Version Control System,简称 DVCS)面世了。 在这类系统中,像 Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像下来,包括完整的历史记录。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。

Figure 3. 分布式版本控制.

更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。 你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。

git提取和拉取区别_每天一Git之起步 - 关于版本控制相关推荐

  1. git提取和拉取的区别_git fetch和git pull的区别

    [是什么]:平时开发经常遇到不清楚的问题就百度/google,目的是能快速使用并解决问题.这时我们没有花太多时间去深入理解,只求能快速解决手头问题. [为什么]但是如果要深入理解的话,发现有时候百度出 ...

  2. gitee项目能用SVN拉取吗_用好 Git 和 SVN,轻松驾驭版本管理

    来源 | 凌承一链接 | bubuko.com/infodetail-2844306.html 本文从 Git 与 SVN 的对比入手,介绍如何通过 Git-SVN 开始使用 Git,并总结平时工作高 ...

  3. gitee项目能用SVN拉取吗_使用Git开发维护Github开源项目的一些经验

    Github无法访问/访问慢的经验 github经常会因为一些原因抽风,无法访问,这时候,可以使用gitee同步github项目,然后从gitee拉项目.在gitee导入项目以后,项目名称后面有个同步 ...

  4. Git 提交和拉取服务器最新版本代码方法

    博客 学院 下载 图文课 论坛 APP 问答 商城 VIP会员 活动 招聘 ITeye GitChat 写博客 发Chat 传资源 登录注册 个人中心 我的博客 消息(3) 创作中心 帐号设置 我的C ...

  5. git pull 默认拉取远端其他分支 问题解决

    git pull 默认拉取远端其他分支 问题解决 参考文章: (1)git pull 默认拉取远端其他分支 问题解决 (2)https://www.cnblogs.com/starfish29/p/1 ...

  6. 【OpenGL】六、Visual Studio 2019 配置 GitHub ( 提取和拉取简介 | 拉取远程代码 )

    文章目录 一.提取和拉取简介 二.拉取远程代码 一.提取和拉取简介 在 " 团队资源管理器 " 主页中 , 选择 " 同步 " 选项 , 在同步页面中 , 有 ...

  7. git命令行拉取合并代码流程

    自己的分支:eleven 远程分支:dev fetch本地新创建分支: test 工作区:就是你在电脑里能看到的目录. 暂存区:英文叫 stage 或 index.一般存放在 .git 目录下的 in ...

  8. git拉取请求_创建有效拉取请求的技巧

    git拉取请求 Pull Requests (PR) are crucial to almost all software development these days. They have beca ...

  9. git拉取请求_向需要的开源项目提供拉取请求的礼物

    git拉取请求 12月1日, 24个Pull Requests将再次打开其虚拟大门,要求您将Pull Request的礼物赠予需要的开源项目. 六年前,受24 Ways (网络极客的出现日历)的启发, ...

最新文章

  1. 爬取我主良缘,获取个人图片及其信息
  2. 百度2016笔试题第一题:页面请求失败值
  3. 同步数据_体验GoldenGate 18C数据同步到ADW
  4. 如何查询高考成绩2021年的成绩排位,2020年高考成绩排名怎么查,高考成绩排名是怎么排的...
  5. 摩拜APP、小程序停服 摩拜单车全面接入美团
  6. maven 本地仓库添加jar包
  7. JQuery学习系列(三)语法
  8. 语音识别代码_Povey正式出任小米语音首席科学家,小米移动端框架MACE全面支持Kaldi...
  9. 刚开始接触vs有没有什么版本比较好用的?
  10. 路由器tomato固件上搭建svn
  11. SQL数据库学习总结
  12. 软考项目管理十大管理及过程
  13. 开始时间 结束时间,全程的运行时间的计算
  14. 数据结构(C语言版)-- 数据结构基础
  15. 华为云Hadoop与Spark集群环境搭建
  16. linux 临时文件夹设置,Linux 系统 tmp 目录的安全设置
  17. win、linux、unix查看系统主机名
  18. 王者荣耀服务器维护到几点,今晚王者荣耀更新到几点 王者荣耀维护时间王者荣耀公告...
  19. Python3.6 安装PIL
  20. CSS3渐变属性:线性渐变和径向渐变用法教程

热门文章

  1. 计算机检索基础知识,[转载]四 计算机文献检索基础知识(原理、结构和功能)...
  2. python 获取帮助页_Python-爬取页面内容(涉及urllib、requests、UserAgent、Json等)
  3. Java中try catch finally语句中含有return语句的执行情况
  4. 内网外网同时连接方法
  5. Yii2在部署新机器时需要注意的环境问题
  6. lightoj1027(期望dp)
  7. 检查浏览器支持(Checking browser support),这个是很广泛的一个知识!
  8. 关于android 双击事件
  9. xcode配置最新版opencv
  10. 今晚直播丨国产数据库入门:openGauss数据库的基本管理和SQL语句入门