本章为 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 rm -r -n --cached  */Runtime/\*      //-n:加上这个参数,执行命令时,是不会删除任何文件,而是展示此命令要删除的文件列表预览. git rm -r -n ...

  2. vspython版本控制_git进行版本控制心得详谈

    小编在学习可视化的时候,接触到git,所以这里写一下关于GitHub的有关知识,写这个的目的还是巩固自己的学习,一方面可以提高自己,另一方面回头看一下,有什么更深层次的东西还可以再记录. 首先说一下版 ...

  3. 文件夹去掉git版本控制_git 从版本控制中删除文件及.gitignore的用法

    刚开始用git的时候,喜欢用git add *把所有文件都加入到版本管理中. 后来发现,因为我在virtualenv下面创建的内容,在跑测试的时候,会产生__pycache__文件夹,里面的很多东西都 ...

  4. git bash here创建项目无法选择m_git 版本控制初学者指南

    雷锋网 AI 科技评论按,如果你还不熟悉版本控制,现在是开始学习的时候了.这是一份基本的 Git 指南,从 0 开始学习可以打下良好的基础.几乎可以肯定都是,Git 在任何职业环境中都会用到,你越早熟 ...

  5. git bash here创建项目无法选择m_版本控制Git基础及使用详解

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

  6. VS清除打开项目时的TFS版本控制提示

    原文:http://blog.useasp.net/archive/2015/12/15/how-to-permanently-remove-vs-project-TFS-source-version ...

  7. [转]VS清除打开项目时的TFS版本控制提示

    本文转自:http://www.cnblogs.com/weixing/p/5219294.html 对于曾经做过TFS版本控制的项目,在版本控制服务不可用的时候,依然会在每次打开项目的时候都提示:当 ...

  8. git 添加外部项目地址

    github 提交第三方模块流程 // git config --global user.name 'your name' 可以设置全局用户名,在commit记录里显示的是这个配置设置的名称. // ...

  9. git拉取单个文件_Git拿来就用

    简介 Git[1]是 Linus 开源的分布式代码版本控制工具. Q:版本控制工具有哪些? A: 集中式:SVN.CVS.VSS 等 分布式:BitKeeper.Git 等 Q:集中式和分布式有什么区 ...

最新文章

  1. ASP.NET AJAX入门系列(1):概述
  2. ubuntu解决eclipse中logcat只显示level栏
  3. 【UVA 437】The Tower of Babylon(拓扑排序+DP,做法)
  4. DIV+CSS 让同一行的图片和文字对齐
  5. 更新wordpress遇到prepare警告问题的解决
  6. 《苹果》何以成禁果?
  7. Bailian2681 求字符串长度【字符串】
  8. Q96:过程纹理(Procedural Texture)(0)——概述
  9. 如何使用iMazing将iPhone的数据迁移到iPad
  10. linux修改max user processes limits
  11. ThinkPad SL400 使用经验小记
  12. mysql中怎么根据生日(brithday)获取年龄
  13. Datawhale组队学习周报(第031周)
  14. HttpClient 4.1版本,模拟登录,终于成功了(2)
  15. Wishbone总线快速了解
  16. c语言青蛙游戏,c语言:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?...
  17. 白盒测试——循环测试
  18. EverNote开源协议-Android
  19. avr单片机流水灯程序c语言,AVR单片机学习C语言的流水灯验证
  20. 基于PHP+MySQL的学生信息管理系统(源码)

热门文章

  1. 百度地图定位以及方向传感器的调用
  2. java归并排序详解
  3. visual Studio Code(VS code)软件中HTML超级好用的一个插件 liveserver,vs code浏览网页
  4. 使用sql语句解析json字符串
  5. 【python-docx】长度单位(毫米、厘米、英尺、磅等)的表示和转换关系
  6. 欺骗的艺术——第二部分(2)
  7. Docker操作镜像源
  8. 软考数据库详细知识点整理(全)
  9. python实现四则运算_四则运算 Python实现(杨浩政,张兆敏)
  10. 吸墨涂料市场现状及未来发展趋势