Smiling & Weeping

                  ---- 总是要耗尽所有期待,才舍得离开

第一章 Git简介

1.1 版本控制

1.1.1 什么是版本控制系统?

大家平常有没有遇到这种情况: 我们的初始代码能跑通,但是随着我们加新的功能时,加着加着发现代码出现了问题。有些同学可能会疯狂ctrl+z进行回退,这种方法太过麻烦。于是,我们想有没有一种系统,可以帮助我们记录我们对代码的变化,并且可以恢复到指定的某个版本的代码。

这种系统其实就是版本控制系统,有了它我们就可以将选定的文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,我们可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。使用版本控制系统通常还意味着,就算我们乱来一气把整个项目中的文件改的改删的删,我们也照样可以轻松恢复到原先的样子。但额外增加的工作量却微乎其微。

1.1.2 集中式版本控制vs分布式版本控制系统

现有的版本控制系统主要有两种形式:集中式和分布式。

集中式版本控制系统:集中式版本库集中存放于一个单一的中央服务器的,保存所有文件的修订版本。在协同工作时,人们需要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。因此,集中式版本控制系统需要在联网的情况下才能工作。  集中式版本控制有一个很致命的缺点就是中央服务器的单点故障。 如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。 如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。

分布式版本控制系统: 分布式版本控制系统根本没有“中央服务器”, 我们每次是把代码仓库完整地镜像下来,包括完整的历史记录。这使得每个人的电脑上都是一个完整的版本库。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。同时,我们也不需要像联网就可以进行工作。每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

但是在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能我们不在一个局域网内,两台电脑互相访问不了。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑或者服务器,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。这也是我们在GitHub建立repo的原因。 

1.2 Git简介和历史

说到Git的诞生,我们就不得不提一下Linux之父 Linus Torvalds和Linux。Linux 内核开源项目有着为数众多的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。到2002年,整个项目组开始启用一个专有的分布式版本控制系统BitKeeper来管理和维护代码。

但是到了2005年,开发BitKeeper的商业公司认为Linux开发者内部有人对BitKeeper内部使用的协议进行逆向工程,因此他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。 他们对新的系统制订了若干目标:

  • 速度

  • 简单的设计

  • 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)

  • 完全分布式

  • 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

于是在Linux之父Linus Torvalds的带领下用了10天编写出了第一个Git版本。自诞生以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统(参见 Git 分支)。

1.3 Git的安装

关于Git的安装,我们可以访问Git book所给的下载教程进行下载,我们在下面的几部分也是仅做简要叙述。具体链接 --> 安装 Git

1.3.1 Linux

我们可以在terminal输入git命令查看系统有没有安装git。如果没有安装的话,我们可以访问git关于linux和unix的安装页面,输入对应的安装命令。网页链接 --> Download for Linux and Unix 对于常见的Debian和Ubuntu Linux,我们可以通过

sudo apt-get install git
 

就可以直接完成Git的安装。

1.3.2 Windows

在 Windows 上安装 Git 也有几种安装方法。 我们也可以打开 https://git-scm.com/downloads 进行下载安装。安装好后我们可以打开Git bash。  另一个简单的方法是安装 GitHub Desktop。 该安装程序包含图形化和命令行版本的 Git。 它也能支持 Powershell,提供了稳定的凭证缓存和健全的换行设置。

1.3.3 macOS

在 Mac 上安装 Git 有多种方式。 最简单的方法是安装 Xcode Command Line Tools。 Mavericks (10.9) 或更高版本的系统中,在 Terminal 里尝试首次运行 git 命令即可。

git --version
 

如果没有我们安装过命令行开发者工具,terminal也会提示你安装。

如果我们想安装更新的版本,可以使用二进制安装程序。 官方维护的 macOS Git 安装程序可以在 Git 官方网站下载,网址为 https://git-scm.com/download/mac。

1.3.4 初次运行Git的配置

当我们安装好Git后,还需要在Git bash或者terminal进行一些相关设置,以下设置仅需设置一次即可。

git config --global user.name "Your Name"
git config --global user.email "email@example.com"
 

除此之外,Git还有很多设置,包括常用编辑器等,大家可以键入以下命令查看自己的设置并进行修改。

git config --list
 

1.4 相关学习资源

在这里给大家推荐几个学习Git的资源,希望可以帮助大家在未来对Git有着更深的了解。

Lecture1的更多相关文章

  1. Linear Algebra lecture1 note

    Professor: Gilbert Strang Text: Introduction to Linear Algebra http://web.mit.edu/18.06   Lecture 1 ...

  2. Web Mining and Big Data 公开课学习笔记 ---lecture1

    1.1  LOOK Finding "stuff" on the web or computer or room or hidden in data Finding documen ...

  3. cs231n spring 2017 lecture1 Introduction to Convolutional Neural Networks for Visual Recognition 听课笔记

    1. 生物学家做实验发现脑皮层对简单的结构比如角.边有反应,而通过复杂的神经元传递,这些简单的结构最终帮助生物体有了更复杂的视觉系统.1970年David Marr提出的视觉处理流程遵循这样的原则,拿 ...

  4. CS20SI-tensorflow for research笔记: Lecture1

    本文整理自知乎专栏深度炼丹,转载请征求原作者同意. 本文的全部代码都在原作者GitHub仓库github CS20SI是Stanford大学开设的基于Tensorflow的深度学习研究课程. 什么是T ...

  5. Cs231n课堂内容记录-Lecture1 导论

    Lecture 1 视频网址:https://www.bilibili.com/video/av17204303/?p=2 https://zhuanlan.zhihu.com/p/21930884? ...

  6. David Silver强化学习Lecture1:强化学习简介

    课件:Lecture 1: Introduction to Reinforcement Learning 视频:David Silver深度强化学习第1课 - 简介 (中文字幕) 强化学习的特征 作为 ...

  7. Lecture1 实验过程模型

    Part 1 基本概念 因变量:待检验理论重点关注的,受多个变量影响的变量.(实际考察的,结果) 自变量:影响因变量变化的变量. 因子:重点关注的自变量. 控制变量(control variables ...

  8. 【18.065】Lecture1

    由于这一课的教材放出来了,所以直接将整个pdf放上来.   

  9. cs231n spring 2017 lecture1 Introduction to Convolutional Neural Networks for Visual Recognition

    1. 生物学家做实验发现脑皮层对简单的结构比如角.边有反应,而通过复杂的神经元传递,这些简单的结构最终帮助生物体有了更复杂的视觉系统.1970年David Marr提出的视觉处理流程遵循这样的原则,拿 ...

  10. GO語言視頻教程

    第1课:https://github.com/Unknwon/go-fundamental-programming/blob/master/lectures/lecture1.md Go开发环境搭建h ...

随机推荐

  1. aliyun全站DCDN刷新--Django

    1.编写原因: 由于登录到阿里云DCDN,需要登录加打开各种页面,导致推送一次感觉非常麻烦,所以编写(网上以有很多可以借鉴) 2.基础环境 # 所需模块 pip install aliyun-pyth ...

  2. C#的基于.net framework的Dll模块编程(五) - 编程手把手系列文章

    这次继续这个系列的介绍: 一.使用DLL类库的方法: 1) 静态类: 先引用该类库,然后声明命名空间,然后就能够进行使用了. 2) 动态类: 先引用该类库,然后声明命名空间,然后能够进行使用了. 3) ...

  3. kubernetes 存储流程

    PV 与 PVC PVC (PersistentVolumeClaim),命名空间(namespace)级别的资源,由 用户 or StatefulSet 控制器(根据VolumeClaimTempl ...

  4. 1.简单的C语言程序

    简单的C语言程序 什么是计算机程序? 什么是计算机语言? 所谓程序,就是一组计算机能识别和执行的指令. 什么是计算机语言? 机器语言(0,1 '低级语言'),汇编语言(符号化 '低级语言'),高级语言 ...

  5. 读写可编程 SIM/USIM 卡

    目录 文章目录 目录 SIM 卡 USIM 卡 USIM 卡的关键参数 pySim 读写软件与 ADM key SIM 卡 SIM 卡,用户身份模块(Subscriber Identity Modul ...

  6. kubernetes之Secret和Configmap

    创建和查询Secret literal 播报 编辑 讨论 上传视频literal是一个英语单词,形容词,意思是文字的:逐字的:无夸张的. [1] 通过--from-literal创建以及查看 [mac ...

  7. Python:当函数做为参数时的技巧

    我们之前在<Python技法3: 匿名函数.回调函数.高阶函数>中提到,可以通过lambda表达式来为函数设置默认参数,从而修改函数的参数个数: import math def dista ...

  8. 新一代AI搜索引擎神器推荐及效果测试:秘塔AI、天工AI、Perplexity等

    新一代AI搜索引擎神器推荐效果测试:秘塔AI.天工AI.Perplexity等 0.前言: 搜索的核心:事物对象级别的搜索 回到搜索引擎本身,搜索引擎的早期出现是为了解决互联网上信息过载的问题.随着互 ...

  9. pod(六):初始化容器Init Containers

    目录 一.系统环境 二.前言 三.初始化容器Init Containers 3.1 何为初始化容器Init Containers 3.2 Init Containers与普通容器的不同之处 3.3 I ...

  10. 创建一个flutter项目

    启动Android  Studio,点击[Start a new Flutter project] 如果没有这项选项,请先安装Flutter插件 具体安装方法,可参考  flutter开发环境的搭建 ...